pipeline-bidding/pipeline_bidding/role_tool_schemas.py

437 lines
25 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""投标产线角色工具 schema —— 注册进引擎 capability_tools.TOOL_SCHEMAS。
分工:
- 引擎 pipeline_service.capability_tools 只保留产线无关的分发机制(module 支持裸名/全路径);
- 投标产线的工具 schema(工具名→实现模块→参数)定义在这里,模块加载时注册进引擎字典。
这样宿主不装投标产线时,引擎字典里不会出现任何投标字符串。
注册时机:init.py 的 load_pipeline_bidding() 调用 register_role_tools()(import 即注册)。
"""
import logging
logger = logging.getLogger("pipeline.bidding.tools")
_M = "pipeline_bidding"
BID_ROLE_TOOL_SCHEMAS = {
# ── bid_tender_capability:招标文件(产线起点=收到招标书直接启动,无立项/配人步骤)──
# ── bid_analysis_capability:招标文件分析师 ──
"read_tender_file": {
"module": f"{_M}.bid_analysis_capability",
"description": "分段读取招标文件正文(供分析)",
"params": {"file_id": "招标文件ID", "offset": "起始字符(可选)", "length": "长度(可选)"},
"required": ["file_id"],
},
"list_tender_files": {
"module": f"{_M}.bid_analysis_capability",
"description": "列出项目招标文件及抽取状态",
"params": {"project_id": "项目ID(可选,默认当前)", "extract_status": "抽取状态(可选)"},
"required": [],
},
"extract_from_file": {
"module": f"{_M}.bid_analysis_capability",
"description": "LLM 一次性抽取评分项+得分规则/所需资质/投标文件要求并批量落库(大文件分段调)",
"params": {"project_id": "项目ID(可选,默认当前)", "file_id": "招标文件ID(可选)",
"offset": "分段起始字符(可选)", "length": "分段长度(可选)"},
"required": [],
},
"extract_scoring": {
"module": f"{_M}.bid_analysis_capability",
"description": "分析维度1:抽取评分项+得分规则落库(任务 analysis_dim=scoring 时用)",
"params": {"project_id": "项目ID(可选,默认当前)", "file_id": "招标文件ID(可选)",
"offset": "分段起始字符(可选)", "length": "分段长度(可选)"},
"required": [],
},
"extract_quals": {
"module": f"{_M}.bid_analysis_capability",
"description": "分析维度2:抽取资质清单与要求落库(任务 analysis_dim=quals 时用)",
"params": {"project_id": "项目ID(可选,默认当前)", "file_id": "招标文件ID(可选)",
"offset": "分段起始字符(可选)", "length": "分段长度(可选)"},
"required": [],
},
"extract_reqs_outline": {
"module": f"{_M}.bid_analysis_capability",
"description": "分析维度3:抽取投标文件要求落库并自动生成章节骨架(任务 analysis_dim=reqs_outline 时用)",
"params": {"project_id": "项目ID(可选,默认当前)", "file_id": "招标文件ID(可选)",
"offset": "分段起始字符(可选)", "length": "分段长度(可选)"},
"required": [],
},
"extract_cost_benefit": {
"module": f"{_M}.bid_analysis_capability",
"description": "分析维度4:投标成本与收益分析落库(任务 analysis_dim=cost_benefit 时用)",
"params": {"project_id": "项目ID(可选,默认当前)", "file_id": "招标文件ID(可选)",
"offset": "分段起始字符(可选)", "length": "分段长度(可选)"},
"required": [],
},
"add_cost_benefit_item": {
"module": f"{_M}.bid_analysis_capability",
"description": "补录一条成本/收益项(分析漏项或人工修正时用)",
"params": {"project_id": "项目ID(可选,默认当前)", "category": "cost|benefit",
"item_name": "项目名", "amount": "金额数字(可选)",
"amount_note": "金额口径说明(可选)", "basis": "推理依据(可选)",
"confidence": "high|medium|low(可选)", "source_ref": "出处(可选)"},
"required": ["category", "item_name"],
},
"list_cost_benefit": {
"module": f"{_M}.bid_analysis_capability",
"description": "列出成本/收益分析全部条目。QC 重做/修正前必读现状——禁止看不到旧行就盲重抽(会堆积互斥重复条)",
"params": {"project_id": "项目ID(可选,默认当前)"},
"required": [],
},
"update_cost_benefit_item": {
"module": f"{_M}.bid_analysis_capability",
"description": "修改一条成本/收益项(QC 意见要求合并口径/修正引用/补算式时用;只改传入字段,改前先 list_cost_benefit 查 id)",
"params": {"project_id": "项目ID(可选,默认当前)", "record_id": "目标行id(必填)",
"item_name": "新名称(可选)", "amount": "新金额(可选)",
"amount_note": "新口径说明(可选)", "basis": "新推理依据(可选)",
"confidence": "high|medium|low(可选)", "source_ref": "新出处(可选)"},
"required": ["record_id"],
},
"delete_cost_benefit_item": {
"module": f"{_M}.bid_analysis_capability",
"description": "删除一条成本/收益项(QC 判定互斥重复/占位无效行时用;reason 必填留审计)",
"params": {"project_id": "项目ID(可选,默认当前)", "record_id": "目标行id(必填)",
"reason": "删除理由(必填:重复/占位/被哪条取代)"},
"required": ["record_id", "reason"],
},
"add_scoring_item": {
"module": f"{_M}.bid_analysis_capability",
"description": "录入评分项及得分规则(抽取漏项时人工补录)",
"params": {"project_id": "项目ID(可选,默认当前)", "item_name": "评分项名称", "max_score": "满分",
"scoring_rule": "得分规则原文", "section": "business|technical|price(可选)",
"is_veto": "是否否决项 0/1(可选)", "target_chapter_no": "对应章节号(可选)"},
"required": ["item_name", "max_score"],
},
"add_qualification": {
"module": f"{_M}.bid_analysis_capability",
"description": "录入招标所需资质",
"params": {"project_id": "项目ID(可选,默认当前)", "qual_name": "资质名称",
"requirement": "要求原文(可选)", "is_mandatory": "是否必需 0/1(可选)"},
"required": ["qual_name"],
},
"add_doc_requirement": {
"module": f"{_M}.bid_analysis_capability",
"description": "录入投标文件要求(structure 类即章节骨架来源)",
"params": {"project_id": "项目ID(可选,默认当前)", "requirement": "要求内容",
"req_type": "structure|format|seal|copies|deadline|other(可选)",
"chapter_no": "章节号(可选)", "chapter_title": "章节标题(可选)",
"page_limit": "页数限制(可选)"},
"required": ["requirement"],
},
"create_chapter_outline": {
"module": f"{_M}.bid_analysis_capability",
"description": "生成章节骨架(默认用 structure 类要求自动生成,并挂评分项)",
"params": {"project_id": "项目ID(可选,默认当前)", "chapters": "章节JSON数组(可选,默认自动生成)"},
"required": [],
},
"patch_chapters": {
"module": f"{_M}.bid_analysis_capability",
"description": "按 chapter_no 增量更新已有章节(改标题/outline/挂载评分项/满分)。create_chapter_outline 只增不改,修正既有骨架必须用它。scoring_items_by_name 按名称反查绑定真实 id",
"params": {"project_id": "项目ID(可选,默认当前)",
"patches": "JSON数组[{chapter_no,title?,outline?,section?,scoring_item_ids?,scoring_items_by_name?,max_score?}]"},
"required": ["patches"],
},
"update_doc_requirement": {
"module": f"{_M}.bid_analysis_capability",
"description": "更新/删除既有投标文件要求条目(纠正必须回写原条目,不得只追加新条目形成矛盾对;编造/无出处项用 delete 删除)。add_doc_requirement 只增不改",
"params": {"project_id": "项目ID(可选,默认当前)", "record_id": "条目ID(优先)",
"chapter_no": "章节号(与req_type组合定位)", "req_type": "类型(structure/format/seal/copies/deadline/other)",
"requirement": "回写的新正文(可选)", "source_ref": "回写原文出处(可选)",
"page_limit": "页数(可选)", "delete": "true=删除该条(可选)"},
"required": [],
},
"list_scoring_items": {
"module": f"{_M}.bid_analysis_capability",
"description": "列出评分项与得分规则",
"params": {"project_id": "项目ID(可选,默认当前)", "section": "评分部分(可选)"},
"required": [],
},
"list_doc_requirements": {
"module": f"{_M}.bid_analysis_capability",
"description": "列出投标文件要求",
"params": {"project_id": "项目ID(可选,默认当前)", "req_type": "类型(可选)"},
"required": [],
},
"mark_file_extracted": {
"module": f"{_M}.bid_analysis_capability",
"description": "标记招标文件抽取完成",
"params": {"file_id": "招标文件ID", "note": "说明(可选)"},
"required": ["file_id"],
},
# ── bid_kb_capability:投标资料专员 ──
"search_bid_kb": {
"module": f"{_M}.bid_kb_capability",
"description": "检索公司投标知识库(资质证书/业绩案例/模板/财务/人员)",
"params": {"query": "关键词", "doc_type": "类型(可选)", "org_id": "机构(可选)"},
"required": [],
},
"kb_doc_detail": {
"module": f"{_M}.bid_kb_capability",
"description": "取知识库文档正文",
"params": {"kb_doc_id": "知识库文档ID"},
"required": ["kb_doc_id"],
},
"list_qualifications": {
"module": f"{_M}.bid_kb_capability",
"description": "列出招标所需资质及匹配状态",
"params": {"project_id": "项目ID(可选,默认当前)", "match_status": "匹配状态(可选)"},
"required": [],
},
"match_qualification": {
"module": f"{_M}.bid_kb_capability",
"description": "把知识库文档挂到资质项上(pending→matched)",
"params": {"qual_id": "资质项ID", "kb_doc_id": "知识库文档ID", "note": "说明(可选)"},
"required": ["qual_id", "kb_doc_id"],
},
"mark_qualification_missing": {
"module": f"{_M}.bid_kb_capability",
"description": "知识库无此资质:标记 missing 或 human_required",
"params": {"qual_id": "资质项ID", "note": "说明(可选)", "need_human": "需人工提供 0/1(默认1)"},
"required": ["qual_id"],
},
"auto_match_qualifications": {
"module": f"{_M}.bid_kb_capability",
"description": "批量自动匹配全部 pending 资质项(命中知识库即 matched,否则 human_required)",
"params": {"project_id": "项目ID(可选,默认当前)"},
"required": [],
},
"request_human_docs": {
"module": f"{_M}.bid_kb_capability",
"description": "发布「人类应提供的文件」清单任务(阻塞门禁;默认自动汇总缺失资质)",
"params": {"project_id": "项目ID(可选,默认当前)", "items": "清单(可选)", "note": "说明(可选)"},
"required": [],
},
# ── bid_write_capability:标书撰写工程师 ──
"list_chapters": {
"module": f"{_M}.bid_write_capability",
"description": "列出章节及状态",
"params": {"project_id": "项目ID(可选,默认当前)", "status": "状态(可选)"},
"required": [],
},
"chapter_detail": {
"module": f"{_M}.bid_write_capability",
"description": "章节详情:要点/对应评分项及得分规则/上轮改进意见/当前正文",
"params": {"chapter_id": "章节ID"},
"required": ["chapter_id"],
},
"write_chapter": {
"module": f"{_M}.bid_write_capability",
"description": "写入章节正文(写到操作层面,禁止空话;有最小长度门槛)。超长章节(如几百行响应表)用 mode=append 分批追加,每批50~80行,全部写完回读核对再 submit",
"params": {"chapter_id": "章节ID", "content": "本批正文",
"mode": "replace覆盖(默认)|append追加", "summary": "本次写作要点(可选)"},
"required": ["chapter_id", "content"],
},
"submit_chapter": {
"module": f"{_M}.bid_write_capability",
"description": "提交章节评审(written 后系统自动派评审任务)",
"params": {"chapter_id": "章节ID", "note": "说明(可选)"},
"required": ["chapter_id"],
},
# ── bid_review_capability:标书评审员 ──
"review_chapter": {
"module": f"{_M}.bid_review_capability",
"description": "章节评审打分:对照评分项得分规则+招标文件/投标文件要求;不达标必须给改进意见。若写作层已达可写上限、失分全部因实体材料未回传(证书扫描件/截图等写作者变不出的东西),传material_missing=1——章节如实披露后通过不冻结流转,自动发信息流供料待办,禁止再烧写作轮次",
"params": {"chapter_id": "章节ID", "score": "得分(数字)", "max_score": "满分(可选,默认取章节挂载满分)",
"comments": "评审意见/改进意见(不通过必填)", "detail": "评审明细(可选)",
"material_missing": "1=失分因实体材料缺失且写作者无法闭环(可选)"},
"required": ["chapter_id", "score"],
},
"approve_chapter": {
"module": f"{_M}.bid_review_capability",
"description": "直接通过章节(特殊情况)",
"params": {"chapter_id": "章节ID", "comment": "意见(可选)"},
"required": ["chapter_id"],
},
"reject_chapter": {
"module": f"{_M}.bid_review_capability",
"description": "退回章节重写(必须给改进意见)",
"params": {"chapter_id": "章节ID", "comment": "改进意见"},
"required": ["chapter_id", "comment"],
},
"list_reviews": {
"module": f"{_M}.bid_review_capability",
"description": "查评审记录",
"params": {"project_id": "项目ID(可选,默认当前)", "scope": "chapter|whole(可选)",
"chapter_id": "章节ID(可选)"},
"required": [],
},
# ── bid_qc_capability:解析产出 QC 契合度审核(agent.qc)──
"start_qc": {
"module": f"{_M}.bid_qc_capability",
"description": "开启一轮解析产出契合度审核:返回审核清单+该类产出物待核内容(对照招标文件原文逐项核对后打分)",
"params": {"qc_type": "审核对象 scoring_items|qualifications|doc_requirements|chapter_outline",
"project_id": "项目ID(可选,默认当前)"},
"required": ["qc_type"],
},
"finish_qc": {
"module": f"{_M}.bid_qc_capability",
"description": "落契合度分并判定:得分高于通过分(当前8.5,10分制)放行;不通过必须给改进意见,系统清空该类产出并触发解析重做",
"params": {"review_id": "start_qc 返回的评审ID", "fit_score": "契合度得分 0~10(可带一位小数)",
"improvement": "改进意见(不通过必填:缺了什么/错在哪/对照原文哪一处)",
"comments": "审核说明(可选)"},
"required": ["review_id", "fit_score"],
},
"list_qc": {
"module": f"{_M}.bid_qc_capability",
"description": "列出项目 QC 审核记录(可按审核对象过滤)",
"params": {"project_id": "项目ID(可选,默认当前)", "qc_type": "审核对象(可选)"},
"required": [],
},
"qc_report": {
"module": f"{_M}.bid_qc_capability",
"description": "项目 QC 总览:四类产出的最新契合度审核状态",
"params": {"project_id": "项目ID(可选,默认当前)"},
"required": [],
},
# ── bid_spec_capability:样板标书编写规范抽取(PM)──
"extract_writing_spec": {
"module": f"{_M}.bid_kb_capability",
"description": "从样板标书(doc_type=sample_bid)抽取编写规范并落库:章节结构惯例/篇幅口径/表格图表示例/商务标要素清单",
"params": {"kb_doc_id": "样板标书ID(可选,默认取最新一份)", "note": "PM抽取的规范条目(可选)"},
"required": [],
},
"add_kb_doc": {
"module": f"{_M}.bid_kb_capability",
"description": "录入公司投标知识库文档(资质证书/业绩案例/样板标书sample_bid等)",
"params": {"doc_name": "文档名称", "doc_type": "类型(qualification/case/template/sample_bid等)",
"doc_no": "编号(可选)", "tags": "标签(可选)", "content_text": "正文/摘要(可选)",
"file_path": "文件路径(可选)"},
"required": ["doc_name"],
},
"list_kb_docs": {
"module": f"{_M}.bid_kb_capability",
"description": "列出知识库文档(可按类型过滤,如 sample_bid 样板标书)",
"params": {"doc_type": "类型(可选)", "org_id": "机构ID(可选)", "limit": "条数(可选,默认100)"},
"required": [],
},
# ── bid_compose_capability:标书合成工程师 ──
"compose_bid": {
"module": f"{_M}.bid_compose_capability",
"description": "合成标书(要求全部章节已评审通过;产出 md+docx 并登记版本)",
"params": {"project_id": "项目ID(可选,默认当前)", "doc_name": "标书名称(可选)"},
"required": [],
},
"list_bid_documents": {
"module": f"{_M}.bid_compose_capability",
"description": "列出已合成标书版本及评分",
"params": {"project_id": "项目ID(可选,默认当前)"},
"required": [],
},
"read_bid_document": {
"module": f"{_M}.bid_compose_capability",
"description": "分段读取合成标书正文(供整书评审)",
"params": {"document_id": "标书ID", "offset": "起始字符(可选)", "length": "长度(可选)"},
"required": ["document_id"],
},
# ── bid_score_capability:标书评分员(模拟评标)──
"start_bid_score": {
"module": f"{_M}.bid_score_capability",
"description": "开启一轮整书评分:返回评审ID+全部评分项清单",
"params": {"project_id": "项目ID(可选,默认当前)", "document_id": "标书ID(可选,默认最新)"},
"required": [],
},
"add_score_item_result": {
"module": f"{_M}.bid_score_capability",
"description": "逐个评分项落分;不合格项必须给 improvement+目标章节",
"params": {"review_id": "评审ID", "scoring_item_id": "评分项ID", "score": "得分",
"max_score": "满分(可选)", "reason": "评分理由(可选)",
"improvement": "改进意见(不合格必填)", "target_chapter_no": "待改章节号(可选)",
"target_chapter_id": "待改章节ID(可选)"},
"required": ["review_id", "scoring_item_id", "score"],
},
"finalize_bid_score": {
"module": f"{_M}.bid_score_capability",
"description": "汇总整书评分:通过→发交付确认任务;不通过→改进意见落到问题章节自动退回重写",
"params": {"review_id": "评审ID", "comments": "总体评审说明(可选)"},
"required": ["review_id"],
},
"request_chapter_revise": {
"module": f"{_M}.bid_score_capability",
"description": "按改进意见定点退回单个章节",
"params": {"chapter_id": "章节ID", "improvement": "改进意见"},
"required": ["chapter_id", "improvement"],
},
"bid_score_report": {
"module": f"{_M}.bid_score_capability",
"description": "最近一轮整书评分报告(总分+逐项明细)",
"params": {"project_id": "项目ID(可选,默认当前)"},
"required": [],
},
# ── PM 分析编排(2026-09-04 方案乙)──
"analysis_progress": {
"module": f"{_M}.bid_orchestration_capability",
"description": "解析编排决策依据:各维度产出计数/最新QC/在办任务/依赖门禁状态(就绪或阻塞缺什么)",
"params": {"project_id": "项目ID(可选,默认当前)"},
"required": [],
},
"dispatch_analysis_dim": {
"module": f"{_M}.bid_orchestration_capability",
"description": "派发一个分析维度首跑任务。代码门禁:上游维度QC未全过会拒绝(不得跳步)。已过的上游自动注入任务参数供分析员先读上游再抽取。可选维度:scoring 评分项 / quals 资质 / reqs_outline 要求与骨架 / cost_benefit 成本收益",
"params": {"dim": "维度名 scoring|quals|reqs_outline|cost_benefit",
"instructions": "对该维度的补充指令:异常招标文档的特殊交代/交叉核对要点/上游产出怎么用(可选)",
"project_id": "项目ID(可选,默认当前)"},
"required": ["dim"],
},
# ── bid_tech_capability:纯技术方案流程(bid_tech_proposal,2026-09-14 批2)──
# 输入=技术需求书(非招标文件),六类评估项:功能清单/功能点/硬件配置/技术架构/功能架构/部署架构
"extract_tech_items": {
"module": f"{_M}.bid_tech_capability",
"description": "技术需求解析(analysis_dim=tech 时用):LLM 从技术需求书抽取六类技术评估项落库(大文件分段调 offset 递增),同名同类自动去重。需求书是本项目唯一基准,禁止编造需求",
"params": {"project_id": "项目ID(可选,默认当前)", "file_id": "需求书文件ID(可选)",
"offset": "分段起始字符(可选)", "length": "分段长度(可选)"},
"required": [],
},
"add_tech_item": {
"module": f"{_M}.bid_tech_capability",
"description": "补录一条技术评估项(抽取漏项或人工修正;category 必须是六类之一)",
"params": {"project_id": "项目ID(可选,默认当前)",
"category": "function_list|function_point|hardware|tech_arch|func_arch|deploy_arch",
"item_name": "条目名称", "requirement": "需求书原文要求(可选)",
"qty_note": "数量/规模说明(可选)", "mandatory": "是否硬性要求 1/0(可选)",
"source_ref": "需求书出处(可选)"},
"required": ["category", "item_name"],
},
"list_tech_items": {
"module": f"{_M}.bid_tech_capability",
"description": "列出技术评估项(头部含六类分布统计与缺类提示;category 可按类过滤)",
"params": {"project_id": "项目ID(可选,默认当前)", "category": "按类过滤(可选)",
"limit": "条数上限(可选,默认300)"},
"required": [],
},
"find_template_candidates": {
"module": f"{_M}.bid_tech_capability",
"description": "检索技术方案模版候选(三级降级:公司知识库预定模版→RAG→网络),每级如实标注来源。拟骨架前先调它",
"params": {"project_id": "项目ID(可选,默认当前)", "query": "检索词(可选,默认按技术方案书目录模版)"},
"required": [],
},
"propose_tech_template": {
"module": f"{_M}.bid_tech_capability",
"description": "拟定技术方案书章节骨架并发「模版确认」待办(用户确认前流程阻塞,你不能代替确认;确认后系统自动落骨架开写)。机制硬校验:骨架必须覆盖全部已抽取评估类别,漏类拒绝。chapters 为空时自动按评估项+模版候选生成",
"params": {"project_id": "项目ID(可选,默认当前)",
"chapters": "章节JSON数组[{chapter_no,title,outline,cover_categories}](可选,空=自动生成)",
"template_source": "骨架依据来源 kb|rag|web|manual(如实标注)",
"template_ref": "模版参考内容/名称(可选)",
"note": "给用户的说明(可选)"},
"required": [],
},
}
def register_role_tools():
"""把投标角色工具 schema 注册进引擎分发字典(幂等)。
引擎不可用(未装 pipeline-service)时诚实降级返回 0,不抛异常。
"""
try:
from pipeline_service.capability_tools import TOOL_SCHEMAS
except Exception as e:
logger.warning("引擎不可用,投标角色工具未注册: %s", str(e)[:160])
return 0
added = 0
for name, schema in BID_ROLE_TOOL_SCHEMAS.items():
TOOL_SCHEMAS[name] = schema
added += 1
logger.info("bid role tool schemas registered: %d", added)
return added