T learn.traeai

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

读懂一轮 Agent 与继续执行

学完能做:复现继续检查,并追踪模型响应和工具结果回写。

新提示与继续不同

agentLoop 接受 prompts 并加到上下文;agentLoopContinue 不增加新消息。后者的 77–83 行只检查两件事:列表为空时抛错,最后一条消息 role 为 assistant 时抛错。注释还要求 convertToLlm 后末尾为 user 或 toolResult,这个条件没有在入口完整验证。因此练习里的 assertCanContinue 只是复现局部检查,不能被当成所有供应商的消息合法性验证器。

export function assertCanContinue(messages: { role: string }[]): void {
  // 实现原函数中的两项前置检查
}

循环为何会再次请求模型

runLoop 的外层处理任务结束后到来的 follow-up,内层处理工具调用和 steering 消息。prepareNextTurn 可在后续回合安装新的快照。响应包含工具调用时,运行时执行工具,将每个 toolResult 同时写入 currentContext.messages 和 newMessages,再判断继续或停止。若输出因为 length 截断,源码走失败工具结果路径,避免执行参数可能不完整的调用。

用确定性轨迹验证理解

源码只读不意味着你不用动手。先给自己的最小循环一个假模型:第一次输出工具调用,第二次输出最终答案;假工具返回固定观察。检查第二次请求确实看到工具结果,且停止后不再调用模型。再用空消息、末尾 assistant、末尾 user、末尾 toolResult 验证局部检查。四项测试通过只证明这四个分支,不证明完整 Agent、外部权限或供应商兼容。

执行耗时与取消要分别记录

1.1 的工具结果和 tool_execution_end 新增 durationMs,表示 execute() 实际耗时,使用单调时钟并排除 hooks;没有执行的调用不带这个字段。缺少 durationMs 不能擅自记成零,也不能用界面等待时间替代。集成还要检查会话的最终事件,分开成功、取消与错误,才能让轨迹解释任务如何结束。

最终停止不一定是完成

AgentSettledEvent 表示这次运行已彻底稳定,不会自动重试、压缩或排队继续;1.1 增加 aborted,供集成识别用户取消。aborted:true 不能被计作成功交付;aborted:false 也不代替你的业务验收。用假事件测试完成和取消两个分支,不需要调用真实模型。

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

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

动手,把理解变成成果

本节练习

正在读取本机草稿…

实现 assertCanContinue 的两项检查,并用假模型写出工具调用→结果回写→最终回答的轨迹。TypeScript 四项固定测试可在三栏工作台运行。

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

给我一个提示

先做局部检查,再解释调用循环;不要偷偷加上原函数没有的 role 白名单。

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

先判断 messages.length===0,再判断 messages.at(-1)?.role==='assistant'。假模型首次请求工具,工具结果回写后第二次返回 final;额外的角色转换合法性留给模型边界验证。

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

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

理解自测

四项继续检查测试通过,能证明什么?

自己的学习笔记

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

围绕当前章节学习

Agent 答疑与作品评价

正在检查连接…

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

走完学习闭环

完成本节

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

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

← 上一节:先建立 Pi 1.1 的项目地图