Repository navigation
PTC 呈现下,工具描述中的字面量 {{...}} 被当作提示词变量,导致每轮请求组装失败 #6537
Ghost-Silver
started this conversation in
General
Replies: 1 comment
|
机制核实(master c291e79,2026-09-13):属实。
插件作者的规避:工具描述里避免成对 给维护者的建议:工具描述来自第三方插件,插值失败理应降级为字面文本(或 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Summary
在 PTC 呈现(
run_code)下,只要任意一个可见工具的描述文本里含有字面量{{name}}形式的花括号序列,系统提示词组装就会在每一轮直接抛错,该 agent 完全无法发出请求。报错:
触发源可以是任意第三方 MCP server —— 例如 draw.io 官方 MCP(
https://mcp.draw.io/mcp)的create_diagram,其工具描述里包含 Mermaid 形状语法原文`{{hexagon}}`。结果是:内置
ptcpreset(以及任何会切到code呈现的 preset)在连接了这类 MCP server 后完全不可用。Reproduction
连接一个工具描述中含字面量
{{...}}的 MCP server。以 draw.io 官方 MCP 为例:其
create_diagram描述中确实存在这样一行(原文照抄):用 PTC 呈现启动一个 agent:内置
ptcpreset(@deepseek-ai/dsh-agent-tool-presentation配置mode: ptc),或任意在提升后调用ctx.tools.presentAs('code')的 preset。发送任意一条消息。
Current behavior
每一轮都在 prompt 组装阶段失败,请求不会发出:
观测到的现象:
turn/end的 reason 为{"kind":"error", ...},与turn/start几乎同一时刻发生;request/header事件 —— 失败发生在请求构造之前,而不是模型侧返回错误;补充说明其触发条件:该问题与具体是哪个 MCP server 无关,只取决于「PTC 呈现生效」+「存在含
{{...}}的工具描述」两个条件的交集。同一个 MCP server 在 native 呈现下没有任何问题。Expected behavior
第三方工具描述是任意文本,不应被当作提示词模板参与插值。
tools:sdk段应当原样呈现工具描述(或对其中的{{做转义);PTC 呈现不应因为某个 MCP 工具描述里出现{{...}}而整体不可用。Environment
@deepseek-ai/dsh0.1.5-rc.1;@deepseek-ai/dsh-tools0.1.5-rc.2https://mcp.draw.io/mcp(工具create_diagram)定位线索(可选)
packages/core/tools:sdkSection()注册名为tools:sdk的段,在呈现模式不是native时,把每个可见工具的name/description/parameters原文交给 SDK renderer:packages/core/system-prompt:interpolate()会扫描段文本中的所有{{...}},变量名未注册即抛错:两者叠加,使「工具描述」事实上成为了提示词模板的一部分,而工具描述(尤其来自 MCP)是部署方无法控制的任意文本。
一个可能的修法:由工具 schema 生成的段(如
tools:sdk)不参与模板插值,或在生成 SDK 文本时转义{{。All reactions