From 7422f083b4bde66197e170041f186c5af584049b Mon Sep 17 00:00:00 2001 From: hkdong Date: Wed, 10 Jun 2026 17:19:27 +0800 Subject: [PATCH] tjl --- .../app/gateway/roundtable_run_policy.py | 41 ++++++++++++------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/offline-backend-20260512/backend/app/gateway/roundtable_run_policy.py b/offline-backend-20260512/backend/app/gateway/roundtable_run_policy.py index 784e0fb8..9526e80d 100644 --- a/offline-backend-20260512/backend/app/gateway/roundtable_run_policy.py +++ b/offline-backend-20260512/backend/app/gateway/roundtable_run_policy.py @@ -19,24 +19,30 @@ 并配合 ``SkillStopMiddleware`` 在 ``agent_orchestration`` 调用后停图,便于网关从 AIMessage.tool_calls 解析派活列表。 - ``seat`` —— 子智能体交付:开 thinking + medium reasoning;**可写文件** - (``write_file`` / ``str_replace`` 产出 md 等成品文档),但禁派活 / 澄清 / - 展示文件 / 看图 / 联网搜索 / **``bash``**。禁 ``bash`` 的原因:圆桌席位是 - 「文档产出者」,弱模型爱写 ``.py`` 脚本再跑出产物(乱且抓不到预览),与 - ``report`` 角色禁 ``bash`` 同理;让它**直接 write_file 写成品文档**。 + (``write_file`` / ``str_replace`` 产出 md 等成品文档)+ **可跑 ``bash``** + (2026-06 放开:业务需要跑知识库检索 / Python 辅助分析)。禁派活 / 澄清 / + 展示文件 / 看图 / 联网搜索。``report`` 通过 ``[*_SEAT_EXCLUDED, ...]`` 继承本角色, + 所以 Step3 报告也跟着拿到 bash;只有 ``leader`` 和 ``seat_parallel`` 仍各自显式禁。 + 历史警示(保留):弱模型用 ``bash`` 跑 ``python xxx.py > out.md`` 生成产物会 + **绕过前端虚拟预览**(预览只拦截 ``write_file.args.content``)→ 沙箱里有文件但 + Step2 右侧预览空白。席位 SOUL 必须明确「bash 只用于辅助查询拿数据,**最终交付 + 必须用 write_file 写 .md 落盘**,不要让脚本生成最终产物」。 - ``seat_parallel`` —— **DAG 快速(fast)模式的并行席位(方案 A,2026-06)**:**禁写文件** - (``write_file`` / ``str_replace``,产物走正文)+ 禁 ``bash`` + 禁「打断 / 越权」类, + (``write_file`` / ``str_replace``,产物走正文)+ **禁 ``bash``** + 禁「打断 / 越权」类, **放开 ``web_search`` 与技能**(搜索不碰 sandbox;技能靠 ``read_file`` SKILL.md)—— 否则并行席位几乎调不动工具、产生不了步骤(步骤条不显示)。 + 并行席位同时跑 bash 会在共享 sandbox 里抢路径 / 占进程数;且 fast 模式整体不 + 写文件,bash 跑出来的产物既不能预览也没意义。 「写文件产出 md」归 **沙箱(sandbox)模式**(走 ``seat`` policy,单列 + 沙箱跟随预览); fast 模式快、双列、产物走正文 —— 用户明确要求 fast 不生成文件。详见 ``docs/roundtable-dag-orchestration.md`` §4 / §12.1 / §12.8 / §12.10。 与 ``seat`` 的差异:``seat`` 禁 ``web_search``(旧「圆桌一律禁搜索」), - ``seat_parallel`` **放开搜索**(本期诉求)。 - - ``report`` —— Step3 报告绘制:在 ``seat``(已禁 ``bash``)基础上**额外禁 - ``str_replace``**: - * ``bash`` 已在 ``seat`` 禁 → 杜绝写 Python 脚本再跑出 HTML(脚本产物落在 - outputs,但前端虚拟预览只抓 ``write_file`` 的 ``args.content``,抓不到脚本 - 产物 → 预览停在半截 ``write_file``,正是「没写完就去生成 py 文件」的现象); + ``seat_parallel`` **放开搜索**(本期诉求);``seat`` 已放开 ``bash``,本角色仍禁。 + - ``report`` —— Step3 报告绘制:在 ``seat`` 基础上**额外禁 ``str_replace``**: + * 继承 ``seat`` 的 bash 放开(2026-06)—— Step3 也可跑 bash 做辅助查询,同 + ``seat`` 警示:**结果必须 write_file 落盘**,否则前端虚拟预览会空白 + (预览只抓 ``write_file.args.content``,抓不到脚本产物 → 预览停在半截 + ``write_file``,正是「没写完就去生成 py 文件」的现象)。 * 禁 ``str_replace`` → 强制返工用整文件 ``write_file`` 重写 (``str_replace`` 没有 ``content`` 字段,会让前端虚拟预览读到 undefined 而清空沙箱)。 @@ -72,16 +78,21 @@ _LEADER_EXCLUDED: list[str] = [ "hindsight_retain", "read_peer_delivery", # 总控靠 _collect_delivery_status 直读各席位,不需要这个席位侧工具 ] -# seat:席位**可以写文件**(write_file / str_replace)产出 md 等成品文档,但**禁 bash** —— -# 圆桌席位是「文档产出者」,不该跑 shell/python 脚本(弱模型爱写 .py 脚本再跑生成产物,既乱又 -# 抓不到产物预览,与 report 角色禁 bash 同理)。禁 web_search(圆桌串行一律禁搜索,旧决策)。 +# seat:席位**可以写文件**(write_file / str_replace)产出 md 等成品文档,**bash 放开** +# (2026-06 决策,业务需要 bash 跑知识库检索 / Python 辅助分析)。禁派活 / 澄清 / +# 展示文件 / 看图 / 联网搜索。``report`` 通过 ``[*_SEAT_EXCLUDED, ...]`` 继承本角色, +# 所以 Step3 报告跟着拿到 bash;只有 leader / seat_parallel 仍各自显式禁。 +# +# **历史警示(保留)**:弱模型用 bash 跑 ``python xxx.py > out.md`` 生成最终产物会 +# 绕过前端虚拟预览(只拦 write_file.args.content) → 沙箱里有文件但 Step2 右侧预览 +# 空白。必须靠席位 SOUL 强约束「bash 只用于辅助查询拿数据,最终交付必须用 write_file +# 写 .md 落盘」。 _SEAT_EXCLUDED: list[str] = [ "web_search", "ask_clarification", "present_files", "view_image", "agent_orchestration", - "bash", ] # 并行席位 = **快速(fast)模式**(双列):**禁写文件**(产物走正文)+ 禁跑命令 +「打断/越权」类。 # **禁 web_search** —— 离线内网部署无外网,席位检索一律走「技能(skill)」(靠 read_file 读