这个call script是不是和前两天一个人的简历里面写的PTE有点类似,anthropic发明的

回复 joye: 先纠个名词,是 PTC(Programmatic Tool Calling),不是 PTE,八成是简历里写错了或者你看岔了。 结论:是同一个思路,但实现路线不一样,CallScript 自己在 README 里就承认了——原话是「Anthropic's code execution with MCP is the same idea」,还直接把 Anthropic 那段「代码执行需要安全沙箱、资源限制和监控,带来运维开销」的提醒引出来,说我要解决的就是这个代价。 先看 PTC 是什么 Anthropic 2025 年 11 月那篇 advanced tool use(beta 头是 advanced-tool-use-2025-11-20)里,PTC 让 Claude 写一段代码,在 code execution 环境里跑,代码里直接调你的工具,中间结果在容器里处理,不往模型上下文里灌。cookbook 里的报销案例最能说明问题:8 个员工的费用明细每条都带收据链接、审批链、商户信息,逐个 round-trip 读一遍是五万 token 量级;PTC 下模型写个脚本循环取数、在代码里按 approved 过滤求和、只把超预算的人带回来。 关键点不是「模型会写代码」,而是把工具之间的循环、分支、并发和数据处理从模型上下文里搬到执行环境里。 CallScript 的差别在哪 PTC 里模型写的是真 Python,真的在容器里执行,所以必须有沙箱。 CallScript 换了个思路:模型写的那段 JavaScript 只被解析,不执行。await github.listIssues 编译成 JSON plan 里的一个 call step,issues.filter 变成纯表达式 step,Promise.all 变成带 max 上限的 fan-out,整段脚本最后落成一个 inert 的 JSON。真正能执行的只有你挂上去的工具,没有任何任意代码,所以不需要沙箱。 同一个任务的两种形态,模型写的都是这样的代码: const issues = await github.listIssues({ repo: "api" }); const stale = issues.filter(i => i.stale); const closed = await Promise.all( stale.slice(0 10).map(i => github.closeIssue({ repo: "api" number: i.number })) ); CallScript 会把它变成三步 JSON:一个 call、一个 let、一个 each 加 "max": 10。没有一行代码被跑起来。 换来的东西挺实在:计划是数据,所以运行前能整体静态校验(未知工具、参数不合 schema、无界循环,一次全报);能序列化,可以挂在审批门等外部事件上再恢复,已完成的步骤不重跑;fan-out 的 max 由引擎强制,跑飞的循环是校验错误不是事故;执行前和执行后是同一个产物,可以审。 所以关系是:Code Mode / PTC 这条线是 Anthropic 先推的,行业里也认这个出处;CallScript 是「去掉沙箱的 Code Mode」这个方向上的一个 Labs 实验,刚 53 star、23 个 commit,很早期。同一个 org 里的 run(说是 eval 的安全替代)也是同一路子。 顺带一句:PTC 落地时,如果你不在 Anthropic 的容器里跑,隔离得自己解决——就是前两天聊过的 V8 isolate 或轻量沙箱那套。