Repository navigation
run_code 转义提示落地建议:两处最小改动(复核 #3925 根因定位 + 一条实测) #7618
Replies: 1 comment
|
我最近使用 PTC 模式很多,总是出现一些生成脚本错误,故让 ds 查了下,然后也看了下 discussion,找到了这条类似的,下面是 ds 帮我拟的内容,用于参考 补充:同一出口还丢了一样东西——位置(可作为第三条最小改动)先说结论:我这条不是转义问题,而是解析失败时位置被丢掉了。想把它作为 #7618 建议 2 之后的一个互补改动提出来。 我这边的场景PTC(Code Mode)下用 一次翻车要重试 1~3 轮,而每轮都得把整个程序重新输出一遍——和 #7618 说的"实打实的 token 和轮次浪费"是同一笔账。 直接原因:漏了一个逗号(跟转义无关)解析器处在"该有逗号"的位置(数组元素 / 函数实参 / 对象属性),下一个 token 是双引号字符串,于是报 最关键的一点: 同一个根因的不同外形(我在 Node v24 下用
为什么反复出现,而且难自查
需要说明的是,我不是要工具去"容错"语法错误(#4699 已经论证:内容坏在模型构造字符串那一刻,工具侧更鲁棒解决不了),而是把本来就存在、却被丢掉的诊断信息还回来。 但位置其实就在
|
Uh oh!
There was an error while loading. Please reload this page.
背景
PTC(Code Mode)下用
run_code做文本替换、配置生成、正则处理时,每隔几轮就会撞一次转义问题:模型拿到Expression expected/Expected unicode escape这类报错,完全联想不到是转义层的问题,于是自己转向"换用更稳的通道:写 Python 脚本做精确替换"。一次翻车要重试 2~4 轮,是实打实的 token 和轮次浪费。这个问题讨论区已经有两条独立反馈,根因和修复方向都很清楚:
run_code的code参数按 JS 源码处理,写正则/路径/heredoc 经常报错;评论里 lws2004 进一步定位到报错来自类型剥离层(stripTypeScriptTypes),不是 worker 的 AsyncFunction 编译层,并实测:在解析失败出口追加提示后,模型会立刻转向检查转义而不是反复改逻辑;补一条今天的实测
写这个帖子时,我用
node -e "…"在 shell 里跑一段含多行字符串的脚本,模板字符串里嵌套引号 + 换行,在 shell 双引号环境里被直接撕碎报语法错误——和 run_code 的机制同源(字符串字面量经过多层解析)。改成"先用 write 落盘、再执行文件"立刻就好。这既是 #3925 定位的印证,也说明一个实用结论:对模型最有效的帮助不是让它学会多层转义,而是让它在快要撞墙时知道"先落盘再执行"。
建议(已复核 0.1.7-alpha.2 源码,两处都尚未落地)
packages/core/tools/src/ptc.ts的TYPESCRIPT_FLAVOR.codeDescription补一句:code 按源码编译,转义会被处理两次(JSON 传输 + 源码字面量);反引号会提前闭合模板串、字符串里的 \n 会变成真换行、${} 会被插值;含反斜杠/正则/heredoc/脚本片段的内容,优先用tools.write落盘再读取执行。packages/ptc-runtime/ptc-runtime-node/src/index.ts的解析(类型剥离)失败出口,parsing === true时给 message 追加同一句提示。报错文本是模型唯一能看到的诊断,现在的Expression expected对它没有信息量。两处都是纯文案改动、无行为风险;收益覆盖所有 PTC 会话与所有模型(非 DeepSeek 模型对 JS 字符串字面量的把握普遍更差,踩坑更频繁)。
CONTRIBUTING 目前不接受外部 PR,所以把复核结论与实测放在讨论区,供维护者取舍。
参考
All reactions