AgentState 代理状态详解
AgentState — 代理状态详解
一个公共代理(Agent)的状态。它主要服务于类似 AI 对话系统(例如基于大语言模型的智能体),记录了代理运行所需的核心配置、对话历史以及实时状态。
AgentState(代理的状态)— “三块记忆法”
把状态分成三块:配置、对话、运行中。
1. 配置(怎么干活)
systemPrompt— 系统提示词(角色设定)model— 用哪个模型(GPT-4、Claude…)thinkingLevel— 思考深度(off / low / high)
2. 对话内容(记着什么)
tools— 可用工具列表(数组,有防护)messages— 聊天记录(数组,有防护)
3. 运行中状态(正在干嘛)
isStreaming— 是否正在输出(只读)streamingMessage— 当前输出到一半的消息(只读)pendingToolCalls— 正在执行的工具调用ID集合(只读)errorMessage— 最近一次错误信息(只读)
记忆口诀:配置、对话、运行中,三块记住不头痛。
字段详解
具体各个字段和特性的作用如下:
系统提示词:systemPrompt
系统提示词,每次模型请求都会携带,用于设定代理的角色、行为规则等。
当前模型:model
当前激活的模型(泛型 Model<any>),用于后续的对话轮次。
推理级别:thinkingLevel
请求的推理级别(ThinkingLevel),控制模型在回答时的”思考深度”或精细程度。
工具列表:tools(访问器属性)
代理可用的工具列表(AgentTool<any>[])。
通过 set 赋值时会复制数组的顶层(浅拷贝),避免外部直接修改原数组;get 返回当前内部数组。这样设计可以让实现者在存储之前对数组做防御性拷贝。
对话历史:messages(访问器属性)
对话转录(AgentMessage[]),即完整的对话历史。同样通过 set 赋值时复制顶层数组,get 返回内部数组,保证状态的安全更新。
流式状态:isStreaming(只读)
代理是否正在处理提示或继续生成内容(流式响应)。为 true 期间会等待所有 agent_end 监听器执行完毕后才变为 false。
当前流式消息:streamingMessage(只读,可选)
当前流式响应中部分构建中的助手消息,用于实时展示生成的内容。
待执行工具:pendingToolCalls(只读)
当前正在执行中的工具调用 ID 合(ReadonlySet<string>),用于追踪哪些工具调用尚未完成。
错误信息:errorMessage(只读,可选)
最近一次失败或中止的助手轮次所产生的错误信息,便于上层进行错误处理或展示。
设计特点
整体上,这个接口描述了代理的配置快照 + 运行时状态,并且通过访问器属性对数组类型数据进行只读或拷贝控制,增强了状态管理的可控性和安全性。它通常会被某个具体的代理类(如 Agent 实现)所实现,供外部调用者获取或监听代理状态的变化。
数组防护机制
访问器属性的设计让状态更新更加安全:
- Setter:浅拷贝数组,防止外部修改
- Getter:返回内部数组引用
- 目的:状态封装 + 可控更新
与其他核心类型的关系
| 概念 | 关系 | 说明 |
|---|---|---|
AgentTool | tools 数组的元素 | 每个工具对象定义代理的技能 |
AgentLoopConfig | 使用 State 的字段 | LoopConfig 在各钩子中读取/修改 State |
AgentMessage | messages 数组的元素 | 记录每条对话的历史 |
简单说:
- State = 这一刻的”是什么”
- Tool = 技能卡
- LoopConfig = 工作流程规则书
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!