Thinking 模块为 Agent 节点提供思考增强能力,使模型能够在生成结果前或后进行额外的推理过程。本文档介绍 Thinking 模块的架构、内置模式及配置方法。
- ThinkingConfig:在 YAML
nodes[].config.thinking中声明,包含type和config两个字段。 - ThinkingManagerBase:抽象基类,定义
_before_gen_think和_after_gen_think两个时机的思考逻辑。 - 注册中心:通过
register_thinking_mode()注册新的思考模式,Schema API 会自动展示可用选项。
nodes:
- id: Thoughtful Agent
type: agent
config:
provider: openai
name: gpt-4o
api_key: ${API_KEY}
thinking:
type: reflection
config:
reflection_prompt: |
请仔细审视你的回答,考虑以下方面:
1. 逻辑是否严密
2. 有无事实错误
3. 表达是否清晰
然后给出改进后的回答。| 类型 | 描述 | 触发时机 | 配置字段 |
|---|---|---|---|
reflection |
模型生成后进行自我反思并优化输出 | 生成后 (after_gen) |
reflection_prompt |
Self-Reflection 模式让模型在初次生成后对自己的输出进行反思和改进。实现流程:
- Agent 节点正常调用模型生成初始回答
- ThinkingManager 将对话历史(系统角色、用户输入、模型输出)拼接为反思上下文
- 结合
reflection_prompt再次调用模型生成反思结果 - 反思结果替换原始输出作为节点最终输出
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
reflection_prompt |
string | 是 | 引导模型反思的提示词,可指定反思维度和期望改进方向 |
- 写作润色:让模型自我审阅并修正语法、逻辑问题
- 代码审查:生成代码后自动进行安全和质量检查
- 复杂推理:对多步骤推理结果进行验证和修正
ThinkingManager 支持两种执行时机:
| 时机 | 属性 | 说明 |
|---|---|---|
生成前 (before_gen) |
before_gen_think_enabled |
在模型调用前执行思考,可预处理输入 |
生成后 (after_gen) |
after_gen_think_enabled |
在模型输出后执行思考,可后处理或优化输出 |
内置的 reflection 模式仅启用生成后思考。扩展开发者可根据需求实现生成前思考。
Thinking 模块可访问 Memory 上下文:
ThinkingPayload.text:当前阶段的文本内容ThinkingPayload.blocks:多模态内容块(图片、附件等)ThinkingPayload.metadata:附加元数据
Memory 检索结果会通过 memory 参数传入思考函数,允许反思时参考历史记忆。
- 创建配置类:继承
BaseConfig,定义所需配置字段 - 实现 ThinkingManager:继承
ThinkingManagerBase,实现_before_gen_think或_after_gen_think - 注册模式:
from runtime.node.agent.thinking.registry import register_thinking_mode register_thinking_mode( "my_thinking", config_cls=MyThinkingConfig, manager_cls=MyThinkingManager, summary="自定义思考模式描述", )
- 导出模板:运行
python -m tools.export_design_template更新前端选项
- 控制反思轮次:当前反思为单轮,若需多轮可在
reflection_prompt中明确迭代要求 - 简洁提示词:过长的
reflection_prompt会增加 token 消耗,建议聚焦关键改进点 - 配合 Memory:将重要反思结果存入 Memory,供后续节点参考
- 监控成本:反思会额外调用模型,注意 token 用量