DATA_SOURCE_CONTRACT.md 7.6 KB

V8 数据源与决策真实性契约

业务事实表

V8 中的唯一业务含义
script_build_record Run 状态、当前创作方向、最终总结和模型配置
script_build_round 轮次目标和当前保存的多路规划
script_build_branch 实现任务、方案类型、当前处置状态和理由
script_build_data_decision 实现 Agent 对取数结果的采用、组合和排除
script_build_multipath_decision 主 Agent 对 branch_ids 指向的一批候选结果作出的综合决策
script_build_domain_info 已核实并独立保存的领域事实
段落、元素、关联三表 当前主脚本和内容方案候选产物

运行记录表

script_build_eventscript_build_event_body 只用于补充:

  • script_multipath_evaluator 对候选方案的逐支评审、跨方案比较和建议;
  • script_evaluator 对主 Agent 决策后的主脚本进行整体评审;
  • 实现 Agent 直接调用的取数 Tool;
  • 取数 Agent 实例、Agent 内多次查询和 Agent 输出的初筛整理;
  • 规划工具在运行时留下的修订记录;
  • Inspector 中的原始输入输出。

主 Agent 前三阶段决策链

  • 创作目标的当前业务事实是 script_build_record.script_direction;成功的 save_script_direction 只用来还原它何时保存及保存前主 Agent 直接读取了什么。
  • 本轮目标的当前业务事实是 script_build_round.goalbegin_round 调用前携带的 round_index 仍是旧轮次,新轮次优先取成功返回中的 round_index,其次才取紧随的 round_begin marker。
  • 实现规划的当前业务事实是 multipath_plan / race_or_divide / plan_note。成功的 record_multipath_plan 保留为同轮修订版本,失败调用只进技术记录。
  • “主 Agent 直接读取”只认 agent_role=main + agent_depth=0 + 真实主 scope;评审 Agent 内部的工具调用不得并入。
  • “主 Agent 收到评审”要求评审 Agent 明确返回主 scope;只有结构化轮次和时间顺序时,只能写“形成前可见”,不得写成已采用依据。
  • 评审报告正文里的轮次文字与结构化事件冲突时,以事件的 round_index 为准。

统一 Agent 决策契约

  • direction:创作目标、本轮目标、实现规划,由主 Agent 最终决定。
  • tradeoff:实现 Agent 数据取舍仅在当前方案内有效;主 Agent 多路决策是候选方案的最终取舍。
  • evaluation:多方案评审与主脚本整体评审只提供判断、问题和建议,不直接决定 Branch 状态或 Run 状态。
  • creative:只有安全关联的实现 Agent think_and_plan 与写入事件才能形成创作处理;候选脚本本身不能反推创作过程。
  • 所有输入同时标记“观察到的关系”和“是否明确作为依据”。读取过的数据默认只能说明形成前可见,不能自动升级为已采用依据。

评审正文只由带版本号的 EvaluationReportParser 解析。业务区只展示结构化的评审对象、标准、逐项结论、达成项、问题、总结论和建议;原始 Markdown、表格和正文中的内部 ID 只进入技术记录。报告正文中的构建 ID 和轮次不参与关联。

Prompt 准确性

  • Agent 派发事件中保存的任务可显示为“本次真实任务”。
  • 当前 system prompt 从当前数据库配置或当前文件读取,只能显示为“当前版本规则”。
  • 系统没有保存每次 Run 的完整 Prompt 快照,因此当前规则不得描述成“当次运行完整 Prompt”。
  • Prompt 只通过懒加载接口读取,统一脱敏、限制长度,不进入 execution-view 主响应。

实现 Agent 与取数 Agent 的归属仅使用 parent_event_id / scope_event_id 及明确的 round_index + branch_id。缺少父子关系时进入未归属技术记录,不通过中文任务文本猜测。

取数三层事实

  1. 取到什么:来自 Tool 调用状态和轻量结果摘要。0 条结果是“无结果”,不是失败。
  2. 初筛了什么:只来自取数 Agent 的 output_content.summary,不从工具结果自动总结。
  3. 正式采用什么:只来自 script_build_data_decision,由实现 Agent 做决定。

script_build_data_decision.sources 没有 Agent 事件 ID,因此只做数据类型级对照,不声称某条证据来自同类 Agent 的某一次具体调用。取过但没有进入正式来源的数据,也不自动标记为“被排除”。

取数分类

  • 工具取数:实现 Agent 直接读取选题、创作总目标、当前脚本、账号段落模式、账号人设或领域信息。
  • Agent 取数:解构 Case、知识、外部搜索、Pattern / Relation Agent。每次 agent_invoke 是一个独立实例,即使 Agent 类型相同也不合并。
  • Agent 内的 think_and_plan 和上下文 get_script_snapshot 不计入源数据查询次数。

禁止解释

  1. 不读取或展示 branch_id <= 0 的旧语义数据决策。
  2. 不用 Branch 的 merged、parked、discarded 状态生成一条不存在的多路决策。
  3. 不用事件内容覆盖业务表中的决定、Branch 状态或领域事实。
  4. 不把领域事实已经入库解释成其来源内容方案已经进入主脚本。
  5. 不把当前规划解释成完整的规划修订历史。
  6. 不把候选处置前快照解释成本轮合并后的完整主脚本。
  7. 不用模型生成缺失的理由、评审结论或业务影响。
  8. 不把取数 Agent 的初筛整理解释成实现 Agent 的正式数据取舍。
  9. 不因为同一实现 Agent 调用多个取数 Agent 就显示为并行;必须存在真实时间重叠。
  10. 不用模糊的 evaluator 名称匹配评审类型;两类评审只认精确事件名。
  11. 不把“决策形成前发生过读取”直接解释为“这些数据导致了决策”。
  12. 不把评审 Agent 内部读取的数据解释为主 Agent 直接读取。
  13. 不把多方案评审或整体评审的建议解释为主 Agent 最终决定。
  14. 不从候选脚本或最终主脚本反推实现 Agent 的创作处理过程。
  15. 不把当前 Prompt 配置解释成历史 Run 实际使用的完整 Prompt 快照。

多批次决策

  • 同一轮的多路决策按 created_at, id 排序。
  • 每条记录独立生成一个收敛节点。
  • branch_ids 决定进入该节点的连接线。
  • 同一 Branch 多次出现时保留全部决策记录,不声明后者覆盖前者。
  • 引用不存在的 Branch 时保留决策,但标记为部分完整。
  • 有 Branch、无多路决策时显示“未记录主 Agent 多路决策”。

多方案评审与主决策关联

  • 同一轮允许存在多个收敛批次。
  • 多方案评审先用报告中明确的 Branch ID 确认候选范围。
  • 只有 Branch 集合相同、且决策时间不早于评审结束时间时,评审和数据库决策才会关联。
  • 无法安全关联的评审进入未归属运行记录,不强行挂到某个方案。
  • Branch 的当前状态和处置理由只作为主 Agent 决策的逐方案结果展示,不再生成实现 Agent 内部的“方案处理”节点。

领域信息方案

  • path_type=领域信息 的产出来自 script_build_domain_info
  • 领域事实按 script_build_id 全局累加,round_index/branch_id 只用于复盘来源。
  • 领域事实数量与 Branch 状态分别展示。
  • 领域信息方案不得显示段落、元素或“合入主脚本”的候选统计。

只读边界

  • 数据库连接使用 visualization 自有连接池。
  • 物理连接创建时设置 MySQL Session 为只读。
  • Repository 仅允许 Query,不允许 flush、commit 或写操作。
  • 活动正文和候选快照按需读取,所有技术输出统一脱敏。