标书从上传解析到正文生成的业务流程说明¶
本文面向运营同学,说明用户从上传招标文件到生成正文,后台大致会经过哪些流程。
文中提到的 Worker,可以简单理解为“后台处理员”:负责排队处理耗时任务,并把结果写回系统。
第一部分:业务流程图¶
这条业务链路可以拆成 6 个主要服务:
| 服务 | 主要做什么 |
|---|---|
| OSS 直传服务 | 给前端上传凭证,让浏览器把原始文件直接传到阿里云 OSS |
| 文件确认与全文抽取服务 | 确认 OSS 文件可用,并抽取成后续可复用的标书全文 |
| 标书解析服务 | 从标书全文里提取项目概览、项目要求和评分标准 |
| 一二级目录生成服务 | 根据评分标准和页数要求生成目录骨架 |
| 子目录和编写思路解析服务 | 并行生成三级/四级目录和每个目录节点的编写思路 |
| 正文生成服务 | 支持一键全文编写和单章节编写,按章节生成正文 |
除 OSS 直传这种前置上传能力外,后面几个耗时服务的处理方式大体类似:页面发起动作后,系统先创建任务,把任务放进后台队列;Worker 领取任务后处理业务;处理过程中通过 Redis 通知页面刷新进度;最终结果写回数据库。
代表性后台任务流程¶
下面用“正文生成服务”举一个代表性的后台任务流程:
flowchart TD
A["页面发起正文生成"] --> B["创建生成任务"]
B --> C["任务进入后台队列"]
C --> D["正文 Worker 领取任务"]
D --> E["组装章节材料"]
E --> F["调用模型生成正文"]
F --> G["保存正文和任务状态"]
G --> H["Redis 发布进度通知"]
H --> I["页面订阅并刷新进度"]
G --> J{"任务是否完成"}
J -->|"未完成"| C
J -->|"完成"| K["页面展示最终结果"]
标书生成总览流程¶
下面是用户从上传招标文件到生成正文的完整业务流程:
flowchart TD
A["选择招标文件"]
subgraph UPLOAD["OSS 直传提高性能"]
direction TD
B["向后端申请OSS上传凭证"] --> C["浏览器文件直传到阿里云 OSS"]
end
A --> B
C --> D["后端确认上传并发起解析"]
D --> E["系统确认文件存在、大小和格式"]
subgraph CONFIRM["文件提取服务"]
direction TD
F["确认之后抽取标书全文并解析转化"]
F --> G["保存可复用的标书原文 Markdown"]
end
E --> F
G --> H["创建解析任务并绑定标书"]
subgraph PARSE_WORKER["标书解析服务"]
direction TD
J["提取项目概览和项目要求"]
J --> J2["提取评分标准"]
J2 --> J1["整理并保存解析结果"]
end
H --> J
J1 --> K1{"解析结果是否可用"}
K1 -->|"可用"| L["进入目录编制"]
K1 -->|"失败或缺失"| X["进入重新解析或人工修正"]
subgraph OUTLINE_SERVICE["一二级目录生成服务"]
direction TD
M1["读取评分标准和页数要求"]
M1 --> M2["组合目录提示词"]
M2 --> M3["生成一二级目录"]
M3 --> M4["保存一二级目录"]
end
L --> M1
M4 --> N["一二级目录确认与调整"]
subgraph SUB_OUTLINE_SERVICE["子目录和编写思路解析服务"]
direction TD
O["按二级目录生成三级/四级目录"]
Q["为目录节点生成编写思路"]
O --> P["保存完整目录树"]
Q --> R["编写思路确认与编辑"]
P --> READY["目录和编写思路准备完成"]
R --> READY
end
N --> O
N --> Q
READY --> WRITE_MODE{"正文编写方式"}
subgraph CONTENT_SERVICE["正文生成服务"]
direction TD
S["创建全文正文生成任务"]
S --> T["按章节排队写作"]
T --> U_FULL["组装当前章节材料"]
U_FULL --> V_FULL["生成当前章节正文"]
V_FULL --> W_FULL["保存正文并刷新全文进度"]
W_FULL --> Y{"是否全部章节完成"}
S1["选择单个章节生成"]
S1 --> U_SINGLE["组装该章节材料"]
U_SINGLE --> V_SINGLE["生成该章节正文"]
V_SINGLE --> W_SINGLE["保存单章节正文"]
W_SINGLE --> Z1["单章节正文生成完成"]
end
WRITE_MODE -->|"一键全文编写"| S
WRITE_MODE -->|"单章节编写"| S1
Y -->|"全文未完成"| T
Y -->|"全文已完成"| Z["标书正文生成完成"]
style UPLOAD fill:#ffffff,stroke:#ff2a00,stroke-width:3px,color:#d40000
style CONFIRM fill:#ffffff,stroke:#ff2a00,stroke-width:3px,color:#d40000
style PARSE_WORKER fill:#ffffff,stroke:#ff2a00,stroke-width:3px,color:#d40000
style OUTLINE_SERVICE fill:#ffffff,stroke:#ff2a00,stroke-width:3px,color:#d40000
style SUB_OUTLINE_SERVICE fill:#ffffff,stroke:#ff2a00,stroke-width:3px,color:#d40000
style CONTENT_SERVICE fill:#ffffff,stroke:#ff2a00,stroke-width:3px,color:#d40000
第二部分:核心点介绍¶
1. 上传、确认文件并抽取全文¶
1. 技术点¶
这一阶段主要做文件上传确认和全文抽取,不调用大模型。系统会根据文件类型选择对应的文档解析方式,把原始招标文件整理成 Markdown 全文。
| 技术点 | 说明 |
|---|---|
| 无大模型调用 | 这里只做文件校验、下载和文档解析,不进入 AI 提取 |
| PDF 解析器 | 处理 PDF 标书,抽取正文并读取页数 |
| DOCX 解析器 | 处理 Word 标书;旧版 .doc 会先转换成 .docx |
| XLSX 解析器 | 处理 Excel 类文件,整理成可读取的正文内容 |
| OSS 文件校验 | 确认文件是否存在、大小是否有效、格式是否支持 |
2. 关键描述¶
用户选择招标文件后,系统不是直接把文件传到业务服务器里长期保存,而是先给前端一个临时上传凭证。浏览器拿到凭证后,会把文件直传到阿里云 OSS。OSS 可以理解为文件仓库,用来保存原始招标文件。
文件传到 OSS 后,前端会自动调用确认解析接口。这个确认动作很关键:系统会去 OSS 核对文件是否真的存在、文件大小是否有效、格式是否支持。确认通过后,系统会把 OSS 中的文件下载回来,先抽取成一份可读的全文正文,一般以 Markdown 形式保存。
3. 设计优点¶
这一步的业务价值是:后续提取项目概览、评分标准、目录生成、正文写作,都可以复用同一份“标书原文”,不需要每一步都重新读原文件。
4. 流程动作¶
| 动作 | 业务说明 |
|---|---|
| 申请上传凭证 | 系统给前端一个短时有效的 OSS 上传地址 |
| 文件直传 OSS | 浏览器把原始招标文件保存到阿里云 OSS |
| 自动确认解析 | 前端上传完成后自动通知系统开始确认和解析 |
| 抽取全文正文 | 系统把文件内容整理成后续可复用的标书原文 |
这一阶段的主要结果:
| 产物 | 作用 |
|---|---|
| OSS 原始文件 | 留档、后续可追溯 |
| 全文正文 | 后续解析和写作的基础材料 |
| 解析任务 | 记录这次解析是否完成、是否失败 |
| 标书状态 | 页面展示“解析中 / 草稿 / 失败”等状态 |
2. 标书解析服务¶
1. 技术点¶
标书解析主要使用 qwen3.6-flash。这一阶段不是继续处理文件格式,而是基于已经抽取好的标书全文,提取后续目录和正文会用到的关键信息。
| 技术点 | 说明 |
|---|---|
| qwen3.6-flash | 用于提取项目概览、项目要求和评分标准 |
| 串联提取 | 先提取项目概览和项目要求,再提取评分标准 |
| 后台任务队列和 Redis | 用来投递解析任务、记录解析进度,并把状态同步给页面 |
| 结果落库 | 解析出来的内容会保存到数据库,后续目录和正文直接复用 |
2. 关键描述¶
全文正文保存后,系统会进入标书解析服务。这个服务会把标书原文交给模型识别,先整理项目概览和项目要求,再继续提取评分标准。
项目概览主要回答“这是一个什么项目”,项目要求主要回答“招标文件要求我们做什么”,评分标准主要回答“评审时怎么打分”。这三类结果会成为后续目录生成、编写思路和正文写作的基础材料。
3. 设计优点¶
把解析结果提前整理出来,后面的目录和正文就不用每次都从整份标书里重新找信息。运营和编写人员也能先看到项目基本情况、要求和评分点,方便判断后续生成内容是否贴合招标文件。
4. 流程动作¶
这一阶段主要会用到:
| 使用内容 | 作用 |
|---|---|
| 标书全文 Markdown | 作为解析的基础材料 |
| 项目基础信息 | 帮助识别项目名称、编号、预算、采购人等概览内容 |
| 招标要求原文 | 帮助提取服务范围、交付要求、质量要求等项目要求 |
| 评分表和评分细则 | 帮助提取评分项、分值和得分要求 |
流程动作如下:
| 步骤 | 说明 |
|---|---|
| 领取解析任务 | 后台解析服务开始处理当前标书 |
| 提取项目概览和项目要求 | 整理项目背景、基础信息和招标要求 |
| 提取评分标准 | 整理评分项、分值和评分细则 |
| 保存解析结果 | 把概览、要求和评分标准保存起来,供后续流程复用 |
3. 一二级目录生成服务¶
1. 技术点¶
一二级目录主要使用 qwen3.6-flash。这个模型响应更快,适合先生成“章 / 节”这种目录骨架。
| 技术点 | 说明 |
|---|---|
| qwen3.6-flash | 用于生成一二级目录骨架 |
| 低随机度生成 | 目录结构需要稳定,避免每次生成差异过大 |
| 输出格式约束 | 要求模型按固定目录格式输出,方便系统保存和页面展示 |
| 页数分配 | 根据标书计划页数,给不同章节做初步篇幅安排 |
| 后台任务队列和 Redis | 用来承接耗时任务、记录任务状态和进度,避免页面一直等待 |
2. 关键描述¶
解析结果可用后,系统会先生成一二级目录。这里不是简单拿“项目名称”去生成目录,而是把已经解析出来的评分标准和页数要求组合起来,让目录尽量围绕得分点展开。
一二级目录可以理解为整本标书的“大框架”:先确定有哪些章、每章下面有哪些节,后续三级/四级目录和正文都会在这个框架下继续展开。
3. 设计优点¶
先生成一二级目录,可以让用户先看到整本标书的大方向,及时调整章节结构。这样后面生成细目录和正文时,就不容易跑偏,也能减少返工。
4. 流程动作¶
这一阶段主要会用到:
| 使用内容 | 作用 |
|---|---|
| 评分项名称 | 决定一级目录和主要章节方向 |
| 分值 | 帮助判断章节重要程度和篇幅分配 |
| 评分细则原文 | 拆分二级目录时避免漏掉得分点 |
| 标书总页数要求 | 给各章节做大致页数预算 |
| 目录输出格式规则 | 约束模型按“章 / 节”输出,方便后续保存和编辑 |
流程动作如下:
| 步骤 | 说明 |
|---|---|
| 读取评分标准和页数要求 | 从解析结果里拿评分项、分值、评分细则,再读取标书计划页数 |
| 组合目录提示词 | 把评分标准、页数要求、输出格式规则拼成给模型看的说明 |
| 生成一二级目录 | 模型按要求生成“章 / 节”两层目录 |
| 保存一二级目录 | 系统把目录保存成可展示、可编辑、可继续生成三级目录的数据 |
4. 子目录和编写思路解析服务¶
1. 技术点¶
子目录生成主要使用 qwen3.6-plus,编写思路生成也使用写作模型 qwen3.6-plus。这一步比一二级目录更细,需要结合更多项目材料,所以使用能力更强的模型。
| 技术点 | 说明 |
|---|---|
| qwen3.6-plus | 用于生成三级/四级目录和编写思路 |
| 并行处理 | 子目录和编写思路可以同时准备,互不等待 |
| 材料组合 | 会结合一二级目录、评分标准、项目要求、行业类型、页数预算等内容 |
| 分段生成 | 按二级目录逐段细化,避免一次性生成整本细目录导致难调整 |
| 后台任务队列和 Redis | 用来分发子目录和编写思路任务,并记录生成进度和状态 |
2. 关键描述¶
一二级目录确定后,系统会继续往下补两类内容:一类是三级/四级目录,另一类是每个目录节点的编写思路。
这两件事在流程上是并行准备的:子目录负责把章节继续拆细,编写思路负责告诉后续正文“这一节应该怎么写”。两边都完成后,目录和写作方向就准备好了。
3. 设计优点¶
子目录和编写思路并行生成,可以缩短等待时间。按二级目录逐步细化,也方便后续调整单个章节,不需要反复重做整本目录。
4. 流程动作¶
这一阶段主要会用到:
| 使用内容 | 作用 |
|---|---|
| 已确认的一二级目录 | 明确当前要细化哪一章、哪一节 |
| 项目要求 | 让三级/四级目录覆盖招标文件里的实际需求 |
| 评分标准 | 保证子目录和编写思路继续围绕得分点展开 |
| 行业类型和项目类型 | 让目录结构更贴合服务类、货物类、工程类等不同场景 |
| 页数和字数预算 | 避免子目录过粗或过细,方便后续正文分配篇幅 |
| 招标文件相关原文片段 | 给编写思路提供依据,减少空泛表达 |
流程动作如下:
| 分支 | 说明 |
|---|---|
| 生成三级/四级目录 | 按二级目录继续拆出更细的章节和要点,并保存完整目录树 |
| 生成编写思路 | 给目录节点补充写作方向,说明这一节正文应该围绕什么展开 |
| 汇合 | 子目录和编写思路都准备好后,再进入正文生成任务 |
5. 正文生成服务¶
1. 技术点¶
正文生成主要使用 qwen3.6-plus。正文比目录更长,也更需要结合上下文,所以会先整理章节材料,再交给模型写作。
| 技术点 | 说明 |
|---|---|
| qwen3.6-plus | 用于生成章节正文和编写内容 |
| 章节材料组装 | 写正文前先整理标题、目录路径、评分标准、项目要求、原文片段等材料 |
| 一键全文任务 | 按完整目录把多个章节排队生成 |
| 单章节任务 | 只生成当前章节,可用于补写或重写 |
| 进度刷新 | 每完成一节,就保存正文并刷新生成进度 |
| 后台任务队列和 Redis | 用来按章节排队写作、记录每节状态,并把进度同步给页面 |
2. 关键描述¶
目录和编写思路准备好后,正文可以从两个入口开始:一种是一键全文编写,系统按完整目录逐章生成;另一种是单章节编写,只针对当前选中的章节生成或重写。
这两种方式是独立入口:一键全文适合批量生成整本标书,单章节适合用户只想处理某一节。进入正文生成后,系统都会先准备这一节需要的材料,再生成正文并保存。
3. 设计优点¶
一键全文和单章节分开,可以同时满足“快速生成整本”和“精修某一节”两种使用场景。正文按章节生成,也方便失败重试、进度展示和后续人工修改。
4. 流程动作¶
正文生成有两种入口:
| 编写方式 | 说明 |
|---|---|
| 一键全文编写 | 扫描完整目录,把需要写正文的章节排成任务队列 |
| 单章节编写 | 只创建当前章节的生成任务,用于补写或重写某一节 |
生成正文时,系统会先组装这一节需要的材料:
| 材料 | 作用 |
|---|---|
| 当前章节标题和目录路径 | 确认这一节属于哪一章、要写什么 |
| 编写思路 | 给正文写作提供方向 |
| 相关评分标准 | 保证正文能回应得分点 |
| 项目要求和招标文件原文片段 | 保证内容贴合招标文件 |
| 已绑定的清单、知识库、产品资料、图片 | 补充业务素材和可引用内容 |
流程动作如下:
| 步骤 | 说明 |
|---|---|
| 选择正文生成方式 | 一键全文编写或单章节编写 |
| 创建生成任务 | 全文会创建多章节任务,单章节只创建当前章节任务 |
| 组装章节材料 | 汇总目录、编写思路、评分标准、项目要求和相关素材 |
| 生成章节正文 | 模型按章节材料生成正文 |
| 保存正文并刷新进度 | 正文写回对应章节,并更新页面进度 |
| 判断是否完成 | 全文任务会继续处理未完成章节,单章节任务完成后直接结束 |