437 lines
25 KiB
Python
437 lines
25 KiB
Python
"""投标产线角色工具 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
|