- 12张 bid_* 表(models+DDL+CRUD):招标信息/邮箱配置/人员/招标文件/评分项/资质/ 投标文件要求/章节/评审/评分/知识库/标书 - 7个角色能力模块(bid_*_capability):采集摘要/解析/知识库资质/编写/评审/合成/评分 - bid_flow 状态对账器:角色任务唯一创建者+阻塞门禁(源头守门,引擎零特判) - bid_mail:阿里云企业邮 IMAP 采集(凭据存DB AES,客户端专用密码兼容) - 能力包注册(bid_ability)+ 角色工具自注册(role_tool_schemas) - 技能:6 common 状态机/规范 + 9 角色技能(pipelines/bidding_general,随 pipeline-core 部署) - i18n(zh/en)、init/data.json(appcodes+pipelines记录)、build.sh、RBAC load_path
15 KiB
投标产线(bidding_general)设计文档
对照开发产线(
sdlc_general)设计,复用平台通用内核(项目/会话/任务链/人类任务/交付件/问答冒泡/技能分层), 只增量定义投标产线自己的 阶段、角色、工具、技能、任务流转规则、交付件。
版本:v1.0.0 创建:2026-08-26
一、业务流程(需求原文映射)
| # | 业务动作 | 承担者 | 落库 |
|---|---|---|---|
| 1 | 从 yumoqing@opencomputing.cn(阿里云企业邮)获取招标信息 | agent.tender_scout | bid_tenders |
| 2 | 对每条招标信息内容摘要:投标开始时间、项目周期、招标金额等 | agent.tender_scout | bid_tenders.summary/bid_start_at/project_period/budget_amount |
| 3 | 走审批流程 | 人(human task + 可选钉钉审批) | pipeline_human_tasks(task_type=tender_approval) |
| 4 | 审批不通过 → 招标信息存档作废 | 机制 | bid_tenders.status=archived |
| 5 | 审批通过 → 创建项目 | 机制/主 agent | sd_projects(pipeline_id=bidding_general) |
| 6 | 设定参与人员 | 主 agent / 人 | bid_members |
| 7 | 等待上传招标文件 | 人(阻塞门禁) | pipeline_human_tasks(tender_file_upload) + bid_tender_files |
| 8 | 从招标文件抽取评分项及得分规则 | agent.tender_analyst | bid_scoring_items |
| 9 | 抽取所需资质 | agent.tender_analyst | bid_qualifications |
| 10 | 抽取投标文件要求(章节结构/格式/份数/密封) | agent.tender_analyst | bid_doc_requirements |
| 11 | 从公司投标知识库获取所需资质文档 | agent.bid_prep | bid_qualifications.kb_doc_id ← bid_kb_docs |
| 12 | 发布人类应提供的文件清单 | agent.bid_prep(阻塞门禁) | pipeline_human_tasks(human_docs_request) |
| 13 | 按投标文件要求分章节编写投标文件 | agent.bid_writer | bid_chapters |
| 14 | 每章节完成后对照招标/投标文件要求评审,分数不够给改进意见重做 | agent.bid_reviewer | bid_reviews(scope=chapter) → 章节循环 |
| 15 | 合成标书 | agent.bid_compositor | bid_documents(docx) |
| 16 | 对整个标书评审 + 按评分项和得分规则打分 | agent.bid_scorer | bid_reviews(scope=whole) + bid_scores |
| 17 | 不合适 → 改进意见 → 修改问题章节 → 评审 → …… 直到得分通过 | 机制(整书循环) | bid_scores.target_chapter_id → 章节回 rejected |
二、阶段与角色(对照开发产线)
| 开发产线 | 投标产线 | 角色规范名 | 职责 | next_role |
|---|---|---|---|---|
| requirement 需求分析 | 招标情报 | agent.tender_scout |
收邮件、去重入库、摘要与要素抽取、提交审批 | agent.tender_analyst |
| —(新增门禁) | 招标审批 | 人类任务 | 审批通过立项 / 不通过存档作废 | — |
| design 设计 | 招标文件解析 | agent.tender_analyst |
抽取评分项+得分规则、所需资质、投标文件要求,产出章节骨架 | agent.bid_prep |
| —(新增) | 资料准备 | agent.bid_prep |
知识库资质匹配、缺失项发布人类文件清单 | agent.bid_writer |
| develop 开发 | 章节编写 | agent.bid_writer |
按章节骨架逐章写作(一章一任务) | agent.bid_reviewer |
| test 测试 | 章节评审 | agent.bid_reviewer |
对照招标要求+得分规则逐章打分,不达标退回重写 | agent.bid_compositor |
| —(新增) | 标书合成 | agent.bid_compositor |
合成 docx(封面/目录/页码/偏离表),产出交付件 | agent.bid_scorer |
| deploy 部署 | 全书评分 | agent.bid_scorer |
按评分项+得分规则给整书打分、生成改进意见并映射章节 | ""(终结→人类交付确认) |
| agent.pm | 同名复用 | agent.pm |
任务审核/派发/验收 | — |
| agent.qc | 同名复用 | agent.qc |
交付件合规检查 | — |
角色命名遵守平台规范:agent 角色 =
agent.{role},人类角色 = RBAC{orgtype}.{role}。 同名角色跨产线隔离(按 pipeline_id 查 RoleSpec),agent.pm/agent.qc在两产线各有自己的技能与提示词。
三、任务流转规则
3.1 主链(机制驱动,非 LLM 驱动)
[邮箱] --fetch_tenders--> bid_tenders(new)
--summarize_tender--> summarized
--submit_tender_approval--> pending_approval ┌── reject ──> archived(作废) ✗终止
└── approve ──> approved
--create_bid_project--> sd_projects + assign_members
--request_tender_file--> [人类任务:上传招标文件] (阻塞)
↓ 上传完成
agent.tender_analyst → 评分项 / 资质 / 投标文件要求 / 章节骨架
↓ approved (PM)
agent.bid_prep → 知识库资质匹配 + [人类任务:应提供文件清单](阻塞)
↓ approved
agent.bid_writer → 逐章写作(每章一个任务,可并行受并发上限约束)
↓ 章节 written
agent.bid_reviewer → 章节评审打分
↓ 全部章节 approved
agent.bid_compositor → 合成标书 docx
↓
agent.bid_scorer → 整书评分
↓ 通过
[人类任务:交付确认] → 项目 completed
3.2 循环一:章节级评审回退
- 触发:
review_chapter判定score / max_score < chapter_pass_ratio(默认 0.8) - 动作:章节
status=rejected+review_comment落库 +revise_count += 1 - 机制:
bid_reviewer任务 approved 后,若存在 rejected 章节 → 自动派生agent.bid_writer重写任务(任务标题带章节号,params 带chapter_id+improvement) - 上限:
revise_count > bid_max_revise(默认 3)→ 抛人类介入(fault_report + 人类任务),不无限重做
3.3 循环二:整书评分回退
- 触发:
score_bid总分率< bid_pass_ratio(默认 0.85),或存在否决项(is_veto)未响应 - 动作:
bid_scores逐评分项落分 +improvement+target_chapter_id - 机制:把
target_chapter_id命中的章节置rejected→ 派生bid_writer任务 → 重写 → 章节评审 → 全部通过 → 重新合成 → 重新评分 - 轮次记录
bid_reviews.round,上限bid_max_round(默认 3)→ 抛人类介入
3.4 阻塞门禁(人类任务)
| task_type | 语义 | 阻塞范围 |
|---|---|---|
tender_approval |
招标信息审批 | 该 tender 不立项、不推进 |
tender_file_upload |
等待上传招标文件 | 项目全部角色任务 |
human_docs_request |
人类应提供的文件 | 项目全部角色任务 |
bid_delivery_confirm |
最终标书交付确认 | 项目收尾 |
门禁的守门位置:投标产线的角色任务唯一创建者是 bid_flow 对账器(每 15 秒状态对账)。
对账器在创建任务前就检查 pipeline_human_tasks.project_id = <项目id> AND status='pending',
有阻塞任务直接不派 —— 门禁在创建源头,不在引擎派发层。
⚠️ 概念区分(重要):
tenant_id是引擎的通用租户键(宿主可提供为 org_id / user_id 等)。 只有角色任务(pipeline_id='role_task')这个具体场景约定tenant_id = project_id(与开发产线的既有任务创建约定一致,_create_next_task同款)。 这是角色任务派发机制的约定,不是引擎通用规则 —— 引擎层 SQL 不得引用该等价关系, 引擎对投标产线零特判;投标的阻塞语义全部收敛在投标产线自己的代码(bid_flow)里。
3.5 硬规则
- 审批不通过 = 终态(archived),不得再进入立项;需重新评估须人工
reopen_tender。 - 章节写作任务与章节一对一(
params.chapter_id),禁止一个任务写多章(对照开发产线「单任务不要过大」)。 - 评审/评分只由
agent.bid_reviewer/agent.bid_scorer执行,写作角色不得自评(源头杜绝越权:capability 按角色缩小)。 - 得分/改进意见必须落库(
bid_reviews/bid_scores),不接受"文档里声称评审通过"。 - 案例与业绩一致性:技术方案引用的案例必须能对应到
bid_kb_docs(doc_type=case)真实合同,禁止虚构客户/金额(写进 bid-doc-spec 技能,评审项硬检查)。
四、数据表(bid_ 前缀,与 sd_/pipeline_ 表共库 pipeline)
| 表 | 说明 | 关键字段 |
|---|---|---|
bid_mail_accounts |
招标邮箱配置(凭据不写死代码) | protocol/host/port/username/password(AES)/folder/filter_keywords/last_uid/enabled |
bid_tenders |
招标信息 | mail_uid/subject/received_at/raw_content/title/purchaser/tender_no/summary/bid_start_at/bid_deadline/project_period/budget_amount/deposit/qualification_req/status/project_id |
bid_members |
项目参与人员 | project_id/user_id/member_role/duty |
bid_tender_files |
招标文件及附件 | project_id/tender_id/file_name/file_path/file_type/extract_status |
bid_scoring_items |
评分项 + 得分规则 | project_id/section/item_name/max_score/scoring_rule/is_veto/weight/source_ref |
bid_qualifications |
所需资质 | project_id/qual_name/requirement/is_mandatory/kb_doc_id/match_status/owner |
bid_doc_requirements |
投标文件要求 | project_id/req_type/chapter_no/chapter_title/requirement/page_limit |
bid_chapters |
标书章节 | project_id/chapter_no/title/scoring_item_ids/status/version/content/file_path/review_score/review_comment/revise_count/assignee_role |
bid_reviews |
评审记录(章节级/整书级) | project_id/scope/chapter_id/round/reviewer/score/max_score/passed/comments |
bid_scores |
评分明细(按评分项) | project_id/review_id/scoring_item_id/score/max_score/reason/improvement/target_chapter_id |
bid_kb_docs |
公司投标知识库 | org_id/doc_type/doc_name/tags/file_path/content_text/valid_until/status |
bid_documents |
合成标书 | project_id/version/file_path/page_count/total_score/status |
复用平台表:sd_projects(项目,pipeline_id=bidding_general)、pipeline_tasks(角色任务链)、
pipeline_human_tasks(审批/人类任务)、pipeline_deliverables(交付件)、pipeline_agent_questions(问答冒泡)。
五、工具
5.1 主 agent(驾驶舱)工具 —— PipelineAbility.tools
招标情报:fetch_tenders list_tenders tender_detail summarize_tender
submit_tender_approval approve_tender reject_tender archive_tender reopen_tender
立项与人员:create_bid_project assign_members list_members request_tender_file list_tender_files
解析结果查看:list_scoring_items list_qualifications list_doc_requirements
知识库:search_bid_kb list_kb_docs add_kb_doc request_human_docs
章节与标书:create_chapter_outline list_chapters chapter_detail compose_bid list_bid_documents
评审评分:list_reviews bid_score_report
通用复用(引擎级,来自 shared_ability):create_task list_tasks task_detail approve_task
complete_task cancel_task reset_task_retry start_agents diagnose_project
list_deliverables view_deliverable list_questions answer_question escalate_question
list_projects start_project complete_project archive_project pause_project resume_project
list_role_models set_role_model submit_deliverable approve_deliverable reject_deliverable
5.2 角色 agent 能力工具(capability → TOOL_SCHEMAS)
| capability | 工具 | 授予角色 |
|---|---|---|
bid_tender_capability |
fetch_tenders summarize_tender set_tender_fields submit_tender_approval archive_tender list_tenders |
agent.tender_scout |
bid_analysis_capability |
add_scoring_item add_qualification add_doc_requirement create_chapter_outline list_scoring_items list_doc_requirements mark_file_extracted |
agent.tender_analyst |
bid_kb_capability |
search_bid_kb match_qualification mark_qualification_missing request_human_docs list_qualifications |
agent.bid_prep |
bid_write_capability |
list_chapters chapter_detail write_chapter submit_chapter list_scoring_items search_bid_kb |
agent.bid_writer |
bid_review_capability |
review_chapter reject_chapter approve_chapter list_chapters list_scoring_items list_doc_requirements |
agent.bid_reviewer |
bid_compose_capability |
compose_bid list_chapters list_doc_requirements |
agent.bid_compositor |
bid_score_capability |
score_bid add_score_item_result request_chapter_revise list_scoring_items list_bid_documents |
agent.bid_scorer |
capability 按角色职责缩小 —— 写作角色拿不到
review_chapter/score_bid,评审角色拿不到write_chapter。 越权在源头杜绝,不靠事后 RBAC 校验。
六、技能(skills_library/pipelines/bidding_general/)
common/(产线通用规范,状态机 + 门禁)
| 技能 | 内容 |
|---|---|
bid-workflow |
产线总纲:阶段链、门禁、两级循环、回退语义、机制 vs LLM 分界 |
tender |
招标信息状态机:new→summarized→pending_approval→approved/rejected→archived |
bid-chapter |
章节状态机 + 评审循环 + 重做上限 + 一章一任务 |
bid-review |
评审与评分规范:对照评分项/得分规则打分、改进意见→章节映射、否决项处理 |
bid-qualification |
资质匹配规范:知识库检索 → matched/missing/human_required → 人类文件清单 |
bid-doc-spec |
投标文件编写规范:章节骨架来自评分标准原文、操作层内容、案例与业绩一一对应、禁虚构 |
team-communication |
问答冒泡链(复用开发产线同名规范) |
roles/(角色定义,frontmatter 声明 capability)
agent.tender_scout agent.tender_analyst agent.bid_prep agent.bid_writer
agent.bid_reviewer agent.bid_compositor agent.bid_scorer agent.pm agent.qc
七、代码落位
| 内容 | 位置 | 理由 |
|---|---|---|
主 agent 能力包 bid_ability.py |
pipeline-service | 与 sdlc_ability 同构;ability 注册表在 core,任何模块可注册 |
角色能力工具 bid_*_capability.py |
pipeline-service | exec_capability_tool 只 import pipeline_service.* |
邮箱采集 bid_mail_fetcher.py |
pipeline-service | 被能力工具调用 |
通用任务 handler 汇总 shared_ability.py |
pipeline-service | 复用而非重写 SDLC 的通用任务/交付件/问答 handler |
| 表 / CRUD / UI / dspy / RBAC | pipeline-bidding(新模块仓库) | 产线业务资产独立仓库,宿主 load_pipeline_bidding() 装载 |
| 技能 | pipeline-core/skills_library/pipelines/bidding_general | 技能库统一目录,部署期同步到机构工作空间 |
八、验收口径
bid_*12 张表建表成功,CRUD 页面可增删改查。fetch_tenders真连阿里云企业邮 IMAP 取到邮件并入库(凭据来自bid_mail_accounts)。summarize_tender真调 LLM 产出摘要与 5 要素并落库。- 审批不通过 → tender 状态 archived;通过 → sd_projects 出现 pipeline_id=bidding_general 的项目。
- 上传招标文件人类任务 pending 时,poller 不派发该项目 agent 任务(项目级门禁生效)。
- 章节评审不达标 → 章节 rejected + 自动派生重写任务(DB 可查)。
- 整书评分不达标 → bid_scores 有 improvement + target_chapter_id,命中章节回 rejected。
- 全流程任务链在
pipeline_tasks中可追溯(role 从 tender_scout 到 bid_scorer)。