Skip to main content

@llm_chat

@llm_chat 创建一个多轮对话智能体。它管理历史记录、执行带工具的 ReAct 循环、支持流式响应,并可选地集成 SelfRef 实现持久化上下文。

基本用法

历史记录管理

history 参数(或 chat_history)是特殊参数。框架会:
  1. 将你提供的 history 作为对话记录
  2. 追加当前用户消息
  3. 运行 ReAct 循环
  4. output.messages 中返回更新后的历史记录
历史记录是外部管理的——你自行控制存储、持久化和分支。

流式传输

设置 stream=True 后,你会以事件的形式接收数据块:
设置 stream=False 时,模型响应会作为单个 ResponseYield 一次性返回。

多模态用户消息

对于多模态 chat 输入,只使用一个 canonical user-message 对象:UserChatMessage。这样 @llm_chat 仍然是“一个用户回合”的 Agent 抽象,不会出现多套图片参数风格。
UserChatMessage.multimodal(...) 接受文本以及任意数量的 ImgUrl / ImgPath。它会归一化为 OpenAI-compatible user message,包含 textimage_url content parts。未来新增输入模态时也应扩展 UserChatMessage,而不是新增另一套 chat 输入约定。

工具

ReAct 循环自动处理工具调用:
  1. LLM 决定调用工具 → ToolCallStartEvent
  2. 框架执行工具 → ToolCallEndEvent
  3. 运行时将工具结果记录为内部对话记录补丁
  4. 重新编译上下文 → LLM 看到修补后的对话记录 → 决定下一步操作
max_tool_calls 限制每次调用中工具调用的总次数。默认值由框架定义。None 表示不限制。

SelfRef 集成

对于需要持久化记忆、上下文压缩或子智能体分叉的场景:
设置 self_reference_key 后,框架会:
  • SelfReference 后端绑定到该 key
  • 为每次调用创建 SelfRefSession
  • 在 PyRepl 中提供 selfref 原语
  • 每轮对话后持久化更新的历史记录
详见 SelfRef 了解完整的上下文模型。

模板参数

在运行时向系统提示词注入动态值:

返回模式

系统提示词构建

对于 @llm_chat,最终的系统提示词由多个来源构建:
  1. 文档字符串 → 基础系统提示词(应用模板参数后)
  2. 工具最佳实践 → 以 <tool_best_practices> 块添加到前部
  3. 必要原则 → 以 <must_principles> 块追加到末尾(使用原生工具调用)
  4. SelfRef 经验 → 如果激活则渲染到系统提示词中
  5. 历史记录中最新的系统消息 → 如果存在则覆盖文档字符串
将文档字符串编写为稳定的智能体策略——身份定义、行为规则和长期约束。将每轮变化的上下文放在参数或模板参数中。

并发会话

可以同时运行多个独立的对话:

参数参考

调用时的特殊参数:
  • _template_params: Dict[str, Any] — 模板值
  • _abort_signal: AbortSignal — 取消信号
  • _too_long_to_file: bool — 将过长的工具结果截断并写入文件
API 参考:装饰器