yumoqing 19a3d67c68 feat: 投标产线模块(bidding_general)
- 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
2026-08-26 23:45:03 +08:00

15 KiB
Raw Blame History

投标产线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_documentsdocx
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 查 RoleSpecagent.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_generalpipeline_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_abilitycreate_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 技能库统一目录,部署期同步到机构工作空间

八、验收口径

  1. bid_* 12 张表建表成功CRUD 页面可增删改查。
  2. fetch_tenders 真连阿里云企业邮 IMAP 取到邮件并入库(凭据来自 bid_mail_accounts)。
  3. summarize_tender 真调 LLM 产出摘要与 5 要素并落库。
  4. 审批不通过 → tender 状态 archived通过 → sd_projects 出现 pipeline_id=bidding_general 的项目。
  5. 上传招标文件人类任务 pending 时poller 不派发该项目 agent 任务(项目级门禁生效)。
  6. 章节评审不达标 → 章节 rejected + 自动派生重写任务DB 可查)。
  7. 整书评分不达标 → bid_scores 有 improvement + target_chapter_id命中章节回 rejected。
  8. 全流程任务链在 pipeline_tasks 中可追溯role 从 tender_scout 到 bid_scorer