T learn.traeai

第 3 节 · 本站原创中文课程 · 建议 25 分钟

工具定义、真实执行与模型消息

学完能做:分开工具声明和执行,实现一个可解释的只读工具。

模型看到声明,程序承担副作用

core/tools/index.ts 的 ToolName 包含 read、bash、powershell、edit、write、grep、find、ls。createToolDefinition 与 createTool 分开:定义描述参数和能力,执行对象才访问文件或启动进程。Codemode 和 tool_search 由内建扩展注册,不在这个八项联合类型里。不能因为模型选择了 read,就说读取成功,也不能把名字带 read 的工具视为可信。

工具观察如何回到模型

pi-ai 的 Quick Start 定义工具 schema 和 Context,用 models.stream 取得流式事件,再通过 s.result() 获得最终消息。示例筛选 toolCall,执行后把 toolCallId、toolName、content、isError 等写成 toolResult 放回上下文。工具调用请求与工具执行结果是两种消息;缺少关联 ID 或结果,模型下一轮就无法可靠判断执行了什么。

先用假工具建立边界

学习时先实现读取预登记文档 ID 的工具,不接受任意文件路径。定义参数错误、NOT_FOUND、TIMEOUT 的处理,再在宿主执行端重复校验;schema 是沟通协议,不是最终访问控制。测试未知 ID、超长返回、取消和正文中的伪指令。这个练习是你的最小安全适配器,并非宣称 Pi 自带同样的权限系统。

增减默认工具不等于替换清单

1.1 的 pi --tools +codemode,-write 保留其他默认工具、添加 codemode 并移除 write;只用普通名称的列表则替换整个选择。两种写法不能混用,+/- 项只接受准确工具名,模式排除使用 --exclude-tools。禁用 write 仍可能留下 bash、edit 或 MCP 工具,因此它不是只读沙箱。用一个假工具集合模拟增减和替换,再检查最终可达能力。

这是本站独立编写的讲解与示例,并非官方课程逐字翻译。理解之后,请完成下面的练习、自测和笔记。

参考来源:Pi v1.1.0 官方源码与文档

动手,把理解变成成果

本节练习

正在读取本机草稿…

用任意语言设计 read_document 工具,包含白名单 ID、取消、长度上限、关联调用 ID 和成功/失败结果;写出四个边界案例,并比较 +codemode,-write 与普通名称列表的选择结果。

35 / 6000 字。本页不执行代码;可下载后在本地运行,或用 Agent 获取定性建议。

给我一个提示

不要把未知文档自动当作文件路径读取。

查看参考思路(本站预写,非实时 Agent)

只允许 docs 中已有 ID;未知 ID 返回 NOT_FOUND;取消立即停止;过长内容明确截断。工具结果关联请求,正文仅作数据。假默认集合为 read/bash/edit/write 时,+codemode,-write 得到 read/bash/edit/codemode;普通 read,codemode 列表则替换原集合。剩余能力仍需检查宿主权限。

人工自评:逐项核对自己的作品

这些勾选由你确认,不是自动测试结果。遇到待测项,请在作品里明确注明。

理解自测

createToolDefinition 是否已执行文件操作?

自己的学习笔记

0 / 3000 字 · 仅保存在此浏览器

围绕当前章节学习

Agent 答疑与作品评价

正在检查连接…

本站讲解、提示、参考思路和自测可独立使用。连接模型服务后,才能实时提问或评价;这里不会把预写内容伪装为 Agent 回答。

走完学习闭环

完成本节

保留练习、勾选人工自评并通过自测后,可记录完成。修改作品或答案会重新打开本节。

课程进度:0 / 6 · 本机记录,不是外部官方证书

下一节:用 Codemode 编排工具 →
← 上一节:读懂一轮 Agent 与继续执行