498 lines
29 KiB
Python
498 lines
29 KiB
Python
"""Business-scene contracts for the platform AI routing console."""
|
||
|
||
from __future__ import annotations
|
||
|
||
from typing import Any
|
||
|
||
|
||
AI_SCENE_REGISTRY: dict[str, dict[str, Any]] = {
|
||
"project_launch": {
|
||
"label": "项目启动草案",
|
||
"summary": "快速起草,失败后深度修复,结果必须进入确认",
|
||
"scene_family": "project_lifecycle",
|
||
"scene_owner": "PMFlow 项目启动链",
|
||
"lifecycle": "active",
|
||
"function_names": ["pmflow_launch_draft_v1", "project_from_text_analysis", "project_from_text_charter"],
|
||
"default_slot": "structured",
|
||
"required_slots": ["structured"],
|
||
"allowed_slots": ["structured"],
|
||
"protected": True,
|
||
"business_goal": "把一句话想法转成可确认的项目草案、初始任务和项目真相种子。",
|
||
"input_contract": "原始想法、空间上下文、已有项目约束",
|
||
"output_contract": "结构化草案 + 人工确认",
|
||
"success_criteria": ["草案字段完整", "缺失问题显式列出", "确认前不创建项目"],
|
||
"failure_policy": "结构化失败必须显式失败或进入待确认,禁止模板句冒充成功。",
|
||
"confirmation_policy": "必须进入人工确认后才写入项目主链。",
|
||
"evidence_policy": "需要结构化输出与 JSON Schema 探测证据。",
|
||
"protected_reason": "该场景会生成项目初始事实和任务,错误写入会污染后续执行主链。",
|
||
"expected_slot_key": "structured",
|
||
"expected_slot_label": "结构化槽",
|
||
},
|
||
"requirement_structuring": {
|
||
"label": "需求结构化",
|
||
"summary": "深度优先,保护项目真相层入口",
|
||
"scene_family": "project_lifecycle",
|
||
"scene_owner": "PMFlow 需求主链",
|
||
"lifecycle": "active",
|
||
"function_names": ["project_requirement_extraction", "pmflow_requirement_plan_draft", "pmflow_requirement_plan_round"],
|
||
"default_slot": "structured",
|
||
"required_slots": ["high", "structured"],
|
||
"allowed_slots": ["high", "structured"],
|
||
"protected": True,
|
||
"business_goal": "把用户需求沉淀为可追踪、可确认、可拆解的结构化需求草案。",
|
||
"input_contract": "需求文本、追问上下文、reply/thread 锚点",
|
||
"output_contract": "JSON Schema + 缺字段追问",
|
||
"success_criteria": ["业务字段来自 requirement_card", "缺字段进入追问", "不从 prose 反推业务字段"],
|
||
"failure_policy": "结构化不足时返回待确认或追问,禁止掉回普通问答链。",
|
||
"confirmation_policy": "需求 draft confirm 必须有明确锚点或卡片按钮。",
|
||
"evidence_policy": "需要结构化输出、JSON Schema 与上下文锚点证据。",
|
||
"protected_reason": "需求草案是后续任务拆解和执行确认的业务真源。",
|
||
"expected_slot_key": "structured",
|
||
"expected_slot_label": "结构化槽",
|
||
},
|
||
"task_breakdown": {
|
||
"label": "任务拆解",
|
||
"summary": "快速结构化,失败后深度修复,仍失败则标记待补充",
|
||
"scene_family": "project_lifecycle",
|
||
"scene_owner": "PMFlow 执行队列",
|
||
"lifecycle": "active",
|
||
"function_names": ["generate_task_breakdown", "decompose_tasks_from_charter", "sstc_ai_breakdown"],
|
||
"default_slot": "structured",
|
||
"required_slots": ["structured"],
|
||
"allowed_slots": ["structured"],
|
||
"protected": True,
|
||
"business_goal": "把已确认需求拆成可执行任务、依赖、责任边界和 pending 项。",
|
||
"input_contract": "需求草案、项目目标、团队能力图谱",
|
||
"output_contract": "结构化任务 + pending 标记",
|
||
"success_criteria": ["任务边界清晰", "不确定项标记 pending", "失败不冒充拆解完成"],
|
||
"failure_policy": "低阶结构化失败可升级;仍失败时必须显式 pending。",
|
||
"confirmation_policy": "高风险任务写入前需要人工确认。",
|
||
"evidence_policy": "需要结构化输出、JSON Schema 和任务字段完整性证据。",
|
||
"protected_reason": "任务拆解会直接影响执行队列和后续协同。",
|
||
"expected_slot_key": "structured",
|
||
"expected_slot_label": "结构化槽",
|
||
},
|
||
"assignee_matching": {
|
||
"label": "人员匹配",
|
||
"summary": "深度分析,必须结合人员能力图谱",
|
||
"scene_family": "execution",
|
||
"scene_owner": "PMFlow 人员能力图谱",
|
||
"lifecycle": "active",
|
||
"function_names": ["recommend_assignees_for_task"],
|
||
"default_slot": "high",
|
||
"required_slots": ["high"],
|
||
"allowed_slots": ["high"],
|
||
"protected": True,
|
||
"business_goal": "基于人员能力图谱、负载和任务要求推荐可解释负责人。",
|
||
"input_contract": "任务要求、技能图谱、团队负载",
|
||
"output_contract": "能力图谱 + 可解释推荐",
|
||
"success_criteria": ["推荐理由可解释", "能力缺口显式展示", "不跳过人员能力图谱"],
|
||
"failure_policy": "证据不足时只给待确认候选,不自动派发。",
|
||
"confirmation_policy": "负责人变更属于执行决策,需要用户确认或 reviewer 审核。",
|
||
"evidence_policy": "需要人员能力图谱、负载和任务匹配证据。",
|
||
"expected_slot_key": "high",
|
||
"expected_slot_label": "深度槽",
|
||
},
|
||
"internal_qa": {
|
||
"label": "内部问答",
|
||
"summary": "先走受控内部查询,再按复杂度组织答案",
|
||
"scene_family": "knowledge",
|
||
"scene_owner": "PMFlow 内部问答链",
|
||
"lifecycle": "active",
|
||
"function_names": ["adaptive_rag_answer_normal", "adaptive_rag_answer_deep", "rag_db_project_semantic_retrieval"],
|
||
"default_slot": "mixed",
|
||
"required_slots": ["low", "high"],
|
||
"allowed_slots": ["low", "high"],
|
||
"protected": False,
|
||
"business_goal": "基于项目真相、语义事实和知识库回答内部问题。",
|
||
"input_contract": "问题、对象绑定、内部上下文包",
|
||
"output_contract": "内部证据优先 + 来源摘要",
|
||
"success_criteria": ["先走内部证据", "来源中文化展示", "证据不足时澄清或显式不确定"],
|
||
"failure_policy": "不得让 LLM 自由编造内部结论;证据不足时返回 uncertain/clarify。",
|
||
"confirmation_policy": "只读回答不需要确认,涉及写入动作必须进入待确认。",
|
||
"evidence_policy": "需要 semantic facts、项目真相或受控检索证据。",
|
||
"expected_slot_key": "mixed",
|
||
"expected_slot_label": "快速/深度混合",
|
||
},
|
||
"external_query": {
|
||
"label": "外部实时查询",
|
||
"summary": "外部查询必须经过计划、来源校验和答案验证",
|
||
"scene_family": "external",
|
||
"scene_owner": "PMFlow 外部查询链",
|
||
"lifecycle": "active",
|
||
"function_names": ["external_query_plan", "external_query_dashscope_responses", "adaptive_rag_answer"],
|
||
"default_slot": "external_query",
|
||
"required_slots": ["external_query"],
|
||
"allowed_slots": ["external_query", "high"],
|
||
"protected": True,
|
||
"business_goal": "在需要新鲜外部信息时检索、验证并用中文业务摘要呈现。",
|
||
"input_contract": "外部问题、freshness 需求、来源策略",
|
||
"output_contract": "实时来源 + verifier + freshness guard",
|
||
"success_criteria": ["来源过滤 fail-closed", "verifier 可用", "无法确认时不编造最新结论"],
|
||
"failure_policy": "外部查询失败必须显式失败或返回 freshness guard。",
|
||
"confirmation_policy": "只读外部回答不确认;接入或入库动作需要确认。",
|
||
"evidence_policy": "需要外部 provider、source filtering、verifier 和 freshness 证据。",
|
||
"protected_reason": "外部事实错误会直接影响策略判断和推荐质量。",
|
||
"expected_slot_key": "external_query",
|
||
"expected_slot_label": "外部查询槽",
|
||
},
|
||
"pmflow_ai_route_planning": {
|
||
"label": "旧 PMFlow AI 路由规划(已下线)",
|
||
"summary": "历史 route_plan/source_strategy 规划场景,仅用于旧日志归类和迁移审计",
|
||
"scene_family": "knowledge",
|
||
"scene_owner": "PMFlow AI 双脑入口",
|
||
"lifecycle": "deprecated",
|
||
"function_names": ["pmflow_ai_route_planner"],
|
||
"default_slot": "low",
|
||
"required_slots": ["low"],
|
||
"allowed_slots": ["low", "high"],
|
||
"protected": False,
|
||
"business_goal": "保留旧日志与 Prompt 运营清单可解释性;Space 用户侧主链已由 TurnState + Action Loop 取代。",
|
||
"input_contract": "旧日志兼容字段,不再作为运行时输入合同。",
|
||
"output_contract": "旧 route_plan/source_strategy/allowed_executors,仅用于历史 replay,不得驱动 Space API。",
|
||
"success_criteria": ["不再出现在 Space 用户侧运行时调用", "旧日志仍可归类", "不能恢复为 action/source/answer 主控"],
|
||
"failure_policy": "不得恢复旧 planner fallback;运行时必须进入 Turn Runtime 或非 Space RAG 兼容链。",
|
||
"confirmation_policy": "无运行时动作授权。",
|
||
"evidence_policy": "仅保留旧日志归类证据。",
|
||
"protected_reason": "已下线场景不参与 active 槽位发布门禁。",
|
||
"expected_slot_key": "low",
|
||
"expected_slot_label": "快速槽",
|
||
},
|
||
"rag_query_semantics": {
|
||
"label": "RAG 问答语义与来源策略(非 Space)",
|
||
"summary": "把非 Space query.answer 只读问题结构化为对象、来源策略和回答形态",
|
||
"scene_family": "knowledge",
|
||
"scene_owner": "AdaptiveRAG",
|
||
"lifecycle": "active",
|
||
"function_names": ["rag_query_semantics"],
|
||
"default_slot": "low",
|
||
"required_slots": ["low"],
|
||
"allowed_slots": ["low", "high"],
|
||
"protected": True,
|
||
"business_goal": "服务非 Space RAG 兼容主链;Space 用户侧不得通过该场景绕开 Turn Runtime。",
|
||
"input_contract": "用户原始问题、workflow bundle、业务对象绑定、上下文与 source policy hint。",
|
||
"output_contract": "query.answer 语义结构、目标对象、答案形态和来源策略。",
|
||
"success_criteria": ["只服务非 Space RAG 主链", "输出结构化语义而不是最终答案", "下游不能再做词面拍板"],
|
||
"failure_policy": "结构化失败时显式 degraded/uncertain,不得伪装成证据不足。",
|
||
"confirmation_policy": "只读语义治理;涉及写入或接入动作必须交给后续确认链。",
|
||
"evidence_policy": "需要 business frame、source policy hint 与对象锚点证据。",
|
||
"protected_reason": "RAG 来源策略误判会导致内部/外部答案混用。",
|
||
"expected_slot_key": "low",
|
||
"expected_slot_label": "快速槽",
|
||
},
|
||
"pmflow_ai_context_governance": {
|
||
"label": "上下文与语义治理",
|
||
"summary": "绑定对象、线程、续问和主链边界",
|
||
"scene_family": "knowledge",
|
||
"scene_owner": "PMFlow AI 语义治理层",
|
||
"lifecycle": "active",
|
||
"function_names": [
|
||
"pmflow_semantic_context_decision",
|
||
"rag_followup_anchor_semantics",
|
||
"rag_pending_clarification_selection_semantics",
|
||
"rag_answer_scene_semantics",
|
||
],
|
||
"default_slot": "low",
|
||
"required_slots": ["low"],
|
||
"allowed_slots": ["low", "high"],
|
||
"protected": True,
|
||
"business_goal": "把当前消息、历史线程、显式锚点和业务对象统一成可审计的 SemanticDecision,保护 requirement、query 和 follow-up 主链不串线。",
|
||
"input_contract": "SemanticContextPacket、上一轮 QA/clarify 状态、reply/thread/work_item 锚点、业务对象候选",
|
||
"output_contract": "topic/workflow/interaction boundary/anchor decision JSON",
|
||
"success_criteria": ["显式锚点优先", "需求模式不掉回普通 QA", "无证据时保留 uncertain/clarify"],
|
||
"failure_policy": "语义规划失败只能带 degraded 标记降级到中性 query.answer 或澄清,禁止强行进入写链。",
|
||
"confirmation_policy": "只做语义边界裁决,不直接写 Project Memory、ChangeSet 或任务。",
|
||
"evidence_policy": "需要 SemanticContextPacket、conversation scope、显式锚点和 active workspace 证据。",
|
||
"protected_reason": "该场景保护 PMFlow AI 上下文和主链边界,误判会造成旧草稿回捞、线程串线或错误写入。",
|
||
"expected_slot_key": "low",
|
||
"expected_slot_label": "快速槽",
|
||
},
|
||
"pmflow_ai_answer_presentation": {
|
||
"label": "客户答案呈现与质检",
|
||
"summary": "把 customer-safe evidence packet 渲染成客户可见答案并做泄露检查",
|
||
"scene_family": "knowledge",
|
||
"scene_owner": "PMFlow AI 客户答案层",
|
||
"lifecycle": "active",
|
||
"function_names": [
|
||
"customer_answer_composer",
|
||
"space_ai_interaction_option_planner",
|
||
"customer_answer_verifier",
|
||
],
|
||
"default_slot": "low",
|
||
"required_slots": ["low"],
|
||
"allowed_slots": ["low", "high"],
|
||
"protected": True,
|
||
"business_goal": "只基于客户安全证据包生成中文答案,并在返回前检查是否泄露内部术语、trace、prompt key 或供应商信息。",
|
||
"input_contract": "customer_evidence_packet、用户问题、候选答案",
|
||
"output_contract": "客户可见中文答案 / verifier JSON",
|
||
"success_criteria": ["只消费 display_label/display_summary/business_values", "不暴露 raw source 或内部实现", "证据不足时明确不确定"],
|
||
"failure_policy": "呈现或质检失败时回退确定性 renderer 或显式失败,禁止用模板话术冒充成功。",
|
||
"confirmation_policy": "只读答案不确认;任何写入动作必须进入待确认链。",
|
||
"evidence_policy": "需要 customer_evidence_packet、answer_process_packet 和 verifier 结果。",
|
||
"protected_reason": "该场景直接决定用户看到什么,错误会暴露内部实现或把无证据结论包装成确定答案。",
|
||
"expected_slot_key": "low",
|
||
"expected_slot_label": "快速槽",
|
||
},
|
||
"space_pmflow_ai_operating_runtime": {
|
||
"label": "Space AI Operating Mission",
|
||
"summary": "把 Space 用户输入升级为可经营 mission,供后续 Agent OS 工作循环消费",
|
||
"scene_family": "knowledge",
|
||
"scene_owner": "PMFlow AI Operating Runtime",
|
||
"lifecycle": "active",
|
||
"function_names": ["pmflow_ai_operating_mission"],
|
||
"default_slot": "low",
|
||
"required_slots": ["low"],
|
||
"allowed_slots": ["low", "high"],
|
||
"protected": True,
|
||
"business_goal": "把用户输入转成可审计的 OperatingMission,明确对象范围、业务交付、专业 agent、确认边界和下一轮触发。",
|
||
"input_contract": "用户原始问题、conversation context、客户安全 surface context、specialist capability contracts。",
|
||
"output_contract": "OperatingMission JSON,不生成最终答案、不执行写入、不调用工具。",
|
||
"success_criteria": ["使用 active prompt release", "输出符合 OperatingMission schema", "确认边界和禁止动作显式写入", "失败时回到确定性 mission fallback"],
|
||
"failure_policy": "模型失败只影响 mission 丰富度,不得阻塞后续确定性 fallback;禁止 code_fallback prompt 和同步 low->high 拖长等待。",
|
||
"confirmation_policy": "只生成 mission;Project Memory、ChangeSet、任务、handoff、发布和外部动作必须由后续确认链路处理。",
|
||
"evidence_policy": "需要 prompt active release、runtime profile、路由规则、provider request payload 和 agent_run/step 归因证据。",
|
||
"protected_reason": "OperatingMission 是 Space AI 后续工作循环的目标合同,错误会影响 agent 选择、证据读取和最终答案边界。",
|
||
"expected_slot_key": "low",
|
||
"expected_slot_label": "快速槽",
|
||
},
|
||
"space_pmflow_ai_agent_runtime": {
|
||
"label": "Space AI Agent Runtime 节点",
|
||
"summary": "Operating Runtime 的只读交付子循环,负责目标框架、工具规划、证据归一、状态审查和终局表达",
|
||
"scene_family": "knowledge",
|
||
"scene_owner": "PMFlow AI Agent Runtime",
|
||
"lifecycle": "active",
|
||
"function_names": [
|
||
"pmflow_ai_agent_goal_frame",
|
||
"pmflow_ai_agent_step_planner",
|
||
"pmflow_ai_agent_evidence_normalizer",
|
||
"pmflow_ai_agent_state_critic",
|
||
"pmflow_ai_agent_answer_composer",
|
||
"pmflow_ai_agent_answer_reviser",
|
||
],
|
||
"default_slot": "low",
|
||
"required_slots": ["low"],
|
||
"allowed_slots": ["low", "high"],
|
||
"protected": True,
|
||
"business_goal": "把本轮工具观察转成客户安全的 claim、boundary、gap、action ledger,并生成不泄露内部实现的自然回答。",
|
||
"input_contract": "用户原始问题、Agent Workspace、客户安全 surface context、白名单工具合同和 Observation Ledger。",
|
||
"output_contract": "Agent node JSON 或客户安全自然答案;不写 Project Memory、不提交 ChangeSet、不发起执行。",
|
||
"success_criteria": ["节点调用写入 function runtime profile 归因", "证据归一保留可核验具体事实", "终局表达只消费客户安全 ledger", "质量失败时 fail-closed"],
|
||
"failure_policy": "节点模型失败只能进入确定性只读 fallback 或 terminal boundary,禁止旧链路模板抢答。",
|
||
"confirmation_policy": "只读回答不确认;任何写入、提交、派发、发布或执行交接必须由后续确认链处理。",
|
||
"evidence_policy": "需要 prompt active release、runtime profile、Agent step、Observation Ledger、Answer Runtime 和 verifier 归因证据。",
|
||
"protected_reason": "该场景直接决定 Space AI 回答的具体性和安全边界,参数错误会造成空泛回答或内部实现泄露。",
|
||
"expected_slot_key": "low",
|
||
"expected_slot_label": "快速槽",
|
||
},
|
||
"feishu_understanding": {
|
||
"label": "飞书消息理解",
|
||
"summary": "快速理解与分流,低置信度进入澄清",
|
||
"scene_family": "collaboration",
|
||
"scene_owner": "PMFlow 飞书集成",
|
||
"lifecycle": "active",
|
||
"function_names": ["feishu_level_classification", "feishu_signal_extraction"],
|
||
"default_slot": "low",
|
||
"required_slots": ["low"],
|
||
"allowed_slots": ["low"],
|
||
"protected": False,
|
||
"business_goal": "从飞书消息、回复线程和卡片回流中恢复正确业务上下文。",
|
||
"input_contract": "飞书消息、reply/thread、卡片按钮、source_message_id",
|
||
"output_contract": "上下文锚点 + 主链选择",
|
||
"success_criteria": ["优先 canonical reply/thread", "不按同群旧草稿回捞", "主链选择可审计"],
|
||
"failure_policy": "锚点不足时澄清或回到中性问答,不强行进入需求链。",
|
||
"confirmation_policy": "draft confirm 必须来自显式锚点或卡片动作。",
|
||
"evidence_policy": "需要 reply/thread、work_item_id 或 active draft workspace 证据。",
|
||
"expected_slot_key": "low",
|
||
"expected_slot_label": "快速槽",
|
||
},
|
||
"feishu_reply": {
|
||
"label": "飞书回复",
|
||
"summary": "快速润色,不改变业务结论",
|
||
"scene_family": "collaboration",
|
||
"scene_owner": "PMFlow 飞书集成",
|
||
"lifecycle": "active",
|
||
"function_names": ["feishu_humanized_reply", "feishu_qa_direct_natural_reply"],
|
||
"default_slot": "low",
|
||
"required_slots": ["low"],
|
||
"allowed_slots": ["low"],
|
||
"protected": False,
|
||
"business_goal": "把业务结论改写成适合飞书对话的中文自然表达。",
|
||
"input_contract": "业务结论、回复场景、对象上下文",
|
||
"output_contract": "中文自然表达 + 不改变结论",
|
||
"success_criteria": ["不新增未证实事实", "不改变业务结论", "语气适合协作场景"],
|
||
"failure_policy": "润色失败时返回原结论或显式失败,不编造补充信息。",
|
||
"confirmation_policy": "只读回复不确认;写入项目状态仍需确认。",
|
||
"evidence_policy": "需要上游业务结论与来源摘要。",
|
||
"expected_slot_key": "low",
|
||
"expected_slot_label": "快速槽",
|
||
},
|
||
"release_review": {
|
||
"label": "发布评审",
|
||
"summary": "候选场景:发布前汇总变更、风险、验证和回滚建议",
|
||
"scene_family": "project_lifecycle",
|
||
"scene_owner": "PMFlow 发布增长链",
|
||
"lifecycle": "candidate",
|
||
"function_names": [],
|
||
"default_slot": "",
|
||
"required_slots": [],
|
||
"allowed_slots": [],
|
||
"protected": False,
|
||
"business_goal": "把一次发布前的变更、验证证据、风险和回滚方案组织成可审查结论。",
|
||
"input_contract": "变更集、验证记录、失败样本、项目目标",
|
||
"output_contract": "发布评审摘要 + 风险清单 + 回滚建议",
|
||
"success_criteria": ["风险可追踪", "验证证据可解释", "回滚建议不冒充自动发布"],
|
||
"failure_policy": "证据不足时标记待补充,不生成发布通过结论。",
|
||
"confirmation_policy": "发布结论必须由负责人确认。",
|
||
"evidence_policy": "需要变更集、测试/验证和失败样本证据。",
|
||
"expected_slot_key": "high",
|
||
"expected_slot_label": "深度槽",
|
||
},
|
||
"retrospective_summary": {
|
||
"label": "项目复盘摘要",
|
||
"summary": "候选场景:从执行记录和结果信号生成复盘草案",
|
||
"scene_family": "project_lifecycle",
|
||
"scene_owner": "PMFlow 复盘链",
|
||
"lifecycle": "candidate",
|
||
"function_names": [],
|
||
"default_slot": "",
|
||
"required_slots": [],
|
||
"allowed_slots": [],
|
||
"protected": False,
|
||
"business_goal": "把项目结果、执行轨迹和关键偏差整理为可确认复盘。",
|
||
"input_contract": "项目目标、任务结果、发布数据、团队反馈",
|
||
"output_contract": "结构化复盘草案 + 改进行动",
|
||
"success_criteria": ["结论有证据", "改进项可执行", "不把推测写成事实"],
|
||
"failure_policy": "证据不足时只输出待补充项。",
|
||
"confirmation_policy": "复盘写回项必须人工确认。",
|
||
"evidence_policy": "需要执行、发布和反馈证据。",
|
||
"expected_slot_key": "long_context",
|
||
"expected_slot_label": "长上下文槽",
|
||
},
|
||
"change_review": {
|
||
"label": "变更审查",
|
||
"summary": "从项目主链消息抽取待审变更,写回前必须人工确认",
|
||
"scene_family": "project_lifecycle",
|
||
"scene_owner": "PMFlow Change Review",
|
||
"lifecycle": "active",
|
||
"function_names": ["pmflow_change_review_extraction_v1"],
|
||
"default_slot": "structured",
|
||
"required_slots": ["structured"],
|
||
"allowed_slots": ["structured"],
|
||
"protected": True,
|
||
"business_goal": "把项目主链里的新增诉求、风险、任务和决策抽取成 ChangeSet 待审对象。",
|
||
"input_contract": "项目线程消息、附件摘要、可选对象锚点",
|
||
"output_contract": "结构化 proposed_items + evidence + missing_info",
|
||
"success_criteria": ["候选对象来自本轮消息证据", "风险分级清楚", "不自动提交变更"],
|
||
"failure_policy": "结构化失败或证据不足时显式失败/待补充,禁止创建模板 ChangeSet。",
|
||
"confirmation_policy": "写回或提交变更必须确认。",
|
||
"evidence_policy": "需要项目线程消息证据和结构化输出证据。",
|
||
"protected_reason": "该场景会生成可写回项目事实和任务的待审对象,误抽取会污染项目主链。",
|
||
"expected_slot_key": "structured",
|
||
"expected_slot_label": "结构化槽",
|
||
},
|
||
"project_memory_writeback": {
|
||
"label": "项目记忆写回",
|
||
"summary": "候选场景:把已确认结论写入项目记忆和语义事实",
|
||
"scene_family": "knowledge",
|
||
"scene_owner": "PMFlow 记忆层",
|
||
"lifecycle": "candidate",
|
||
"function_names": [],
|
||
"default_slot": "",
|
||
"required_slots": [],
|
||
"allowed_slots": [],
|
||
"protected": False,
|
||
"business_goal": "把已确认业务结论转成可审计、可撤销的项目记忆写回计划。",
|
||
"input_contract": "确认后的业务结论、来源摘要、对象绑定",
|
||
"output_contract": "写回计划 + 证据引用 + 待确认",
|
||
"success_criteria": ["只写确认事实", "来源可追踪", "可撤销"],
|
||
"failure_policy": "来源不足时禁止写回。",
|
||
"confirmation_policy": "写回动作必须人工确认。",
|
||
"evidence_policy": "需要确认卡片、来源摘要和对象绑定证据。",
|
||
"expected_slot_key": "structured",
|
||
"expected_slot_label": "结构化槽",
|
||
},
|
||
"mcp_execution_planning": {
|
||
"label": "MCP 执行规划",
|
||
"summary": "候选场景:为本地或外部工具执行生成受控计划",
|
||
"scene_family": "execution",
|
||
"scene_owner": "PMFlow 工具执行层",
|
||
"lifecycle": "candidate",
|
||
"function_names": [],
|
||
"default_slot": "",
|
||
"required_slots": [],
|
||
"allowed_slots": [],
|
||
"protected": False,
|
||
"business_goal": "把用户意图转成受控工具执行计划、权限边界和确认点。",
|
||
"input_contract": "用户意图、工具目录、权限和环境约束",
|
||
"output_contract": "工具执行计划 + 权限确认",
|
||
"success_criteria": ["命令可解释", "权限边界清楚", "危险动作确认"],
|
||
"failure_policy": "工具能力或权限不足时显式失败。",
|
||
"confirmation_policy": "本机执行、写操作和外部副作用必须确认。",
|
||
"evidence_policy": "需要工具目录、权限和运行环境证据。",
|
||
"expected_slot_key": "tool",
|
||
"expected_slot_label": "工具槽",
|
||
},
|
||
"contract_sync": {
|
||
"label": "合同同步",
|
||
"summary": "候选场景:把外部规范或契约同步为内部可用上下文",
|
||
"scene_family": "knowledge",
|
||
"scene_owner": "PMFlow 契约同步",
|
||
"lifecycle": "candidate",
|
||
"function_names": [],
|
||
"default_slot": "",
|
||
"required_slots": [],
|
||
"allowed_slots": [],
|
||
"protected": False,
|
||
"business_goal": "把外部文档、接口契约或流程规范同步成可审计上下文。",
|
||
"input_contract": "外部文档、接口契约、同步来源",
|
||
"output_contract": "结构化契约摘要 + 差异说明",
|
||
"success_criteria": ["来源明确", "差异可审查", "不覆盖未确认契约"],
|
||
"failure_policy": "解析或来源校验失败时不写入。",
|
||
"confirmation_policy": "同步写入必须确认。",
|
||
"evidence_policy": "需要来源、版本和解析证据。",
|
||
"expected_slot_key": "long_context",
|
||
"expected_slot_label": "长上下文槽",
|
||
},
|
||
}
|
||
|
||
|
||
def scene_contract(scene_key: str) -> dict[str, Any]:
|
||
scene = AI_SCENE_REGISTRY.get(str(scene_key or "").strip())
|
||
if not scene:
|
||
return {
|
||
"scene_key": scene_key,
|
||
"label": scene_key,
|
||
"business_goal": "该场景由 PMFlow AI 运行层按业务语义触发。",
|
||
"input_contract": "业务上下文",
|
||
"output_contract": "显式成功 / 显式失败 / 待确认",
|
||
"success_criteria": ["输出可解释", "失败显式表达", "不绕过保护边界"],
|
||
"failure_policy": "证据不足或结构化不足时必须显式失败、澄清或进入待确认。",
|
||
"confirmation_policy": "涉及写入、派发或发布的动作必须人工确认。",
|
||
"evidence_policy": "需要对应场景的上下文、能力槽位和运行证据。",
|
||
"protected_reason": None,
|
||
"expected_slot_key": "",
|
||
"expected_slot_label": "按场景所需能力选择槽位",
|
||
"scene_family": "unknown",
|
||
"scene_owner": "PMFlow AI 运行层",
|
||
"lifecycle": "active",
|
||
"protected": False,
|
||
}
|
||
return {
|
||
"scene_key": scene_key,
|
||
"label": scene["label"],
|
||
"business_goal": scene["business_goal"],
|
||
"input_contract": scene["input_contract"],
|
||
"output_contract": scene["output_contract"],
|
||
"success_criteria": list(scene["success_criteria"]),
|
||
"failure_policy": scene["failure_policy"],
|
||
"confirmation_policy": scene["confirmation_policy"],
|
||
"evidence_policy": scene["evidence_policy"],
|
||
"protected_reason": scene.get("protected_reason"),
|
||
"expected_slot_key": scene.get("expected_slot_key", ""),
|
||
"expected_slot_label": scene.get("expected_slot_label", "按场景所需能力选择槽位"),
|
||
"scene_family": scene.get("scene_family", "unknown"),
|
||
"scene_owner": scene.get("scene_owner", "PMFlow AI 运行层"),
|
||
"lifecycle": scene.get("lifecycle", "active"),
|
||
"protected": bool(scene.get("protected", False)),
|
||
}
|