Agent 类将智能体的行为抽象为一组接口,分别适用于不同的目标:
回复
reply 和 reply_stream 都接受相同的 inputs 参数,驱动相同的推理-行动循环,区别只在结果的交付方式。inputs 参数支持:
基础回复
一次调用返回一条最终Msg:运行智能体最简单的方式,适合不关心中间事件的自动化场景。
reply 在内部消费所有事件,并在智能体完成后返回最终 Msg。如果回复因等待外部交互而暂停,它会返回一条 finished_reason 为 None 的等待提示消息,表示回复尚未结束。
Msg 还携带本次回复的完整结果。每次调用后值得检查的字段如下:
完整的
Msg 结构与内容块类型参见消息与事件。
流式回复
智能体实时产出文本增量、工具调用进度和生命周期事件,这是构建交互式界面的基础。reply_stream 逐一产出 AgentEvent 对象:
yield_final_msg=True 可以让流的最后一项额外产出最终 Msg。当你在事件之外还需要组装好的回复消息(例如它的 structured_output 属性)时很有用:
结构化输出
可以要求一次回复产出符合 JSON schema 的字段,典型场景是生成报告,或输出用于驱动工作流的控制字段。 通过structured_schema 传入一个 Pydantic 模型类。智能体会装配一个内置的 GenerateStructuredOutput 工具,其输入 schema 就是你的 schema:智能体先自由推理和调用其他工具,最后通过该工具提交结果。校验错误会反馈给模型重试,通过校验的结果以普通 dict 的形式落在最终消息的 structured_output 属性上(消息文本只是占位内容)。
structured_schema;回复会沿用暂停时保存的 schema 继续。
- 校验方式随回复的运行方式自适应。进程内运行时,由模型类本身校验输出:默认值(含
default_factory)会被填充、多余字段被丢弃、自定义校验器会执行。从序列化状态恢复后,只剩下 JSON schema:schema 中声明的默认值会被填充、多余字段被保留、自定义校验器被跳过。 - 达到
max_iters仍无输出时,智能体会在structured_output_grace_iters(默认 5)次额外迭代内强制调用GenerateStructuredOutput。若仍失败,回复以finished_reason=EXCEED_MAX_ITERS结束且structured_output为None,使用前请先判空。
观察消息
可以把消息注入智能体上下文而不触发回复。在多智能体场景中,让一个智能体看到另一个智能体的输出时非常有用。压缩上下文
通过对较早的消息做摘要,长对话得以保持在模型的上下文窗口之内,既可自动触发,也可按需手动触发。 当 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。