Skip to main content
Agent 类将智能体的行为抽象为一组接口,分别适用于不同的目标:

回复

replyreply_stream 都接受相同的 inputs 参数,驱动相同的推理-行动循环,区别只在结果的交付方式。inputs 参数支持:

基础回复

一次调用返回一条最终 Msg:运行智能体最简单的方式,适合不关心中间事件的自动化场景。 reply 在内部消费所有事件,并在智能体完成后返回最终 Msg。如果回复因等待外部交互而暂停,它会返回一条 finished_reasonNone 的等待提示消息,表示回复尚未结束。
除文本内容外,返回的 Msg 还携带本次回复的完整结果。每次调用后值得检查的字段如下: 完整的 Msg 结构与内容块类型参见消息与事件

流式回复

智能体实时产出文本增量、工具调用进度和生命周期事件,这是构建交互式界面的基础。 reply_stream 逐一产出 AgentEvent 对象:
传入 yield_final_msg=True 可以让流的最后一项额外产出最终 Msg。当你在事件之外还需要组装好的回复消息(例如它的 structured_output 属性)时很有用:

结构化输出

可以要求一次回复产出符合 JSON schema 的字段,典型场景是生成报告,或输出用于驱动工作流的控制字段。 通过 structured_schema 传入一个 Pydantic 模型类。智能体会装配一个内置的 GenerateStructuredOutput 工具,其输入 schema 就是你的 schema:智能体先自由推理和调用其他工具,最后通过该工具提交结果。校验错误会反馈给模型重试,通过校验的结果以普通 dict 的形式落在最终消息的 structured_output 属性上(消息文本只是占位内容)。
结构化输出的要求以单次回复为作用域,并且能跨越人机交互暂停、状态持久化和进程重启,因为 schema 会以普通 dict 的形式存入智能体状态。恢复一次暂停的回复时,不要再次传入 structured_schema;回复会沿用暂停时保存的 schema 继续。
  • 校验方式随回复的运行方式自适应。进程内运行时,由模型类本身校验输出:默认值(含 default_factory)会被填充、多余字段被丢弃、自定义校验器会执行。从序列化状态恢复后,只剩下 JSON schema:schema 中声明的默认值会被填充、多余字段被保留、自定义校验器被跳过。
  • 达到 max_iters 仍无输出时,智能体会在 structured_output_grace_iters(默认 5)次额外迭代内强制调用 GenerateStructuredOutput。若仍失败,回复以 finished_reason=EXCEED_MAX_ITERS 结束且 structured_outputNone,使用前请先判空。

观察消息

可以把消息注入智能体上下文而不触发回复。在多智能体场景中,让一个智能体看到另一个智能体的输出时非常有用。

压缩上下文

通过对较早的消息做摘要,长对话得以保持在模型的上下文窗口之内,既可自动触发,也可按需手动触发。 当 token 数量超过 context_config.trigger_ratio × model.context_length 时,智能体会自动压缩上下文;若配置了 offloader,被摘要的消息还会被卸载到磁盘。 compress_context 接受两个可选参数:context_config 为本次调用覆盖默认阈值;instructions 传入一个 HintBlock,注入压缩上下文来引导摘要行为(例如指定必须保留的信息):
超过 tool_result_limit token 的工具结果会被自动截断;若配置了 offloader,截断的部分会被卸载,智能体会收到一个可按需读取的路径引用。完整的压缩流程与卸载机制参见上下文管理
如果系统提示词本身就超过了压缩阈值,compress_context 会抛出 RuntimeError。请保持系统提示词简洁,或增大模型的上下文长度。

持久化状态

完整的智能体状态可以序列化为 JSON,因此一次回复可以在一个进程中暂停、在另一个进程中恢复。这是构建多会话服务的基础。 AgentState 保存了从断点精确恢复所需的全部信息:对话上下文、压缩摘要、权限规则、工具状态和当前回复位置。RedisStorage 是内置的存储后端,以 (user_id, agent_id, session_id) 为键层级组织状态:
若 session 尚不存在,update_session_state 会抛出 KeyError。首次创建时请使用 upsert_session 建立 session 记录,后续轮次再切换为 update_session_state