[Agent]智能体循环

Agent loop

agent接收input后在调用工具->返回到agent与Agent相应的循环

一次对话(turn)就是指从输入到最后返回控制权/结果(助手信息)的过程

单次对话:

https://images.ctfassets.net/kftzwdyauwt9/6eFpyKRVVEF6nNnKv7Tp1o/557f226a1f0e9c704af62a5c842a3037/oai_Unrolling_the_Codex_agent_loop_Agent_loop_desktop-light.svg?w=3840&q=80

多轮对话就是多了一个history,模型每次从asembled history里找最近消息,然后继续循环,将新的工具调用与响应写入histroy

第一次查询

使用Response API,当用户查询时,API会将查询结构化,形成一个项目列表,并根据项目的角色确定优先级:system、developer、user、assistant

Pesponse API接收一个JSON payload,重点是三个部分:instruction, tools ,input

instruction 是插入模型context的系统/开发者命令

tools 可能使用的工具列表

input 文本/图像/文件输入列表

input在发出之前会插入以下内容:

role:developer :描述沙箱权限

可选 role:developer :从用户 config.toml 文件中读取的 developer_instructions 值

可选 role:user :skills,agent.md,agent.override.md以及config.toml读取的指定文件(大小限制32KiB)

role:user ,描述智能体当前运行的本地环境

随着对话不断推进,我们发送给 Responses API 的 input 长度会不断增加

Item(项) 与 Delta(增量)

OpenAI定义的Response生命周期:

阶段对应事件语义与作用
容器初始化response.created服务端收到了请求,正式开启一次推理 Response。
条目诞生response.output_item.added服务端通知客户端:“模型接下来要输出一个新物件了”,并在 payload 中指明这个 item 是文本还是工具调用。
内容增量response.output_text.delta<br>response.function_call_arguments.delta最核心的高频流事件。每次模型吐出新的几个字或几段代码参数碎片时触发,客户端用于拼接或实时打印。
内容完成response.output_text.done<br>response.function_call_arguments.done该条目内的文本或工具调用参数全部生成完毕。
条目关闭response.output_item.done整个 item 的最终完整状态(包含累积好的完整文本或 JSON 参数)封包下发。
响应结束response.completed / response.done模型在这一步推理完成,关闭当前 HTTP SSE 长连接。

对应关系:

Turn(用户发问到最终得到回答的完整轮次)│├── Iteration 1(第 1 次 API 请求)│ └── 对应一个 Response(从 response.created 到 response.done)│ ├── item 1: message ("正在为您检查目录...")(从item added到item.done)

|            |    ------     delta是token│ └── item 2: function_call ("ls -la")

|            |    ------     delta是json片段

││ [客户端本地执行 ls 命令,拿到结果]│├── Iteration 2(第 2 次 API 请求,带着工具返回的执行结果再次请求)│ └── 对应一个全新的 Response(从 response.created 到 response.done)│ └── item 1: message ("当前目录下共有 5 个文件,分别是...")│└── Turn 结束(没有后续工具调用,控制权归还给用户)

Cache Hit 缓存命中

cache hit能让agent重用之前的计算,从而将复杂度从2次增长降低至线性增长

缓存未命中通常发生在:更换tools,更换沙盒/审批模式/工作目录,更换模型

缓存命中与上下文窗口有明显的Trade-off(制约)关系

image

上下文越多,则越稳定(不变信息的多),命中率就高

现代工程解决方案是compact(压缩),token消耗到一定上限制时启用压缩将input压缩