核心基础:Agent Loop

streamText

核心概念:streamText 不只是“流式返回一段文本”的接口。当传入 tools 和 stopWhen 后,它会负责驱动一个多步 Agent Loop:反复调用模型、执行工具、把工具结果交回模型,直到模型完成回答或命中停止条件。

一次模型调用称为一个 step。模型在当前 step 可以直接生成文本,也可以产生 tool-call。如果产生工具调用,SDK 会执行工具,把 tool-result 加入本轮消息上下文,再根据 stopWhen 判断进入下一个 step 还是结束。因此一轮用户请求可能包含 Step 0 → Step 1 → Step 2 → ... 多次模型调用。

streamText 会持续输出文本、推理、来源、文件、工具调用、工具结果、step 结束和最终结束等事件;生命周期回调则用于观察生成开始、模型请求、工具执行和 step 完成等时机。SDK 负责本轮循环,应用负责消费事件、更新界面、审批、重试、保存消息与文件,以及下一轮上下文恢复。

Agent Loop 全局流程

先看总览掌握主流程,再按需查看下面 4 张子流程图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
flowchart TB
A[用户发送消息] --> B[应用组装历史上下文]
B --> C[调用 streamText]
C --> D[生成开始 onStart]

subgraph LOOP[Agent Loop:Step 0 → Step 1 → Step 2 → ...]
D --> S[Step N 开始:prepareStep]
S --> M[模型生成本 step]
M --> O{本 step 输出}
O -->|文本 / 推理| TXT[流式返回内容并更新界面]
O -->|tool-call| TOOL[审批判断并执行工具]
TOOL --> RESULT[tool-result 加入本轮上下文]
TXT --> ENDSTEP[Step N 完成:onStepEnd]
RESULT --> ENDSTEP
ENDSTEP --> STOP{stopWhen 是否满足?}
STOP -->|否| NEXT[进入 Step N + 1]
NEXT --> S
end

STOP -->|是| END[Agent Loop 全部结束:onEnd]
END --> SAVE[整理并保存消息与文件]
SAVE --> ANSWER[返回最终回答]
ANSWER --> ROUND[下一轮从历史 parts 恢复上下文]

S -.回调细节.-> NOTE1[详见子图 1:单个 step 生命周期]
TOOL -.审批分支.-> NOTE2[详见子图 2:工具审批与续跑]
M -.发生异常.-> NOTE3[详见子图 3:错误重试与 checkpoint]
SAVE -.跨轮恢复.-> NOTE4[详见子图 4:持久化与下一轮恢复]

classDef sdk fill:#E8F3FF,stroke:#3370FF,color:#143A72;
classDef app fill:#EAF8EE,stroke:#34A853,color:#245B2A;
classDef decision fill:#FFF4E5,stroke:#F59E0B,color:#7A4600;
classDef note fill:#F7F7F7,stroke:#8F959E,color:#3C4043;
class C,D,S,M,O,RESULT,ENDSTEP,STOP,END sdk;
class A,B,TXT,TOOL,NEXT,SAVE,ANSWER,ROUND app;
class O,STOP decision;
class NOTE1,NOTE2,NOTE3,NOTE4 note;
Read More

openai文档学习

调用模型时,一个最小可运行请求通常至少包含哪几个核心要素?

身份认证:有效的 API Key(放在 Authorization 头里)。
模型标识:要调用的模型名(例如某个 GPT 模型)。
输入内容:给模型的文本输入(常见是 messages 或 input)。
输出内容:模型生成的文本输出(通常在 response 的 choices 字段里)。

model、input、temperature、max_output_tokens、instructions、tools、 response_format、stream 分别控制什么?

什么是工具调用?它和“模型自己直接回答”有什么区别?

什么是 prompt injection?为什么 Agent 场景更危险?

如果你要做一个企业内部 Agent,最担心的安全风险有哪些?