ChatDev 2.0 如何为 Agent 节点开启 reflection 思考模式优化输出?
【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/GitHub_Trending/ch/ChatDev
在 ChatDev 2.0(DevAll)中,Agent 节点负责调用大语言模型完成文本生成。模型第一次生成的结果有时还不够理想:语法不严谨、逻辑有漏洞、代码缺少自检。ChatDev 2.0 的 Thinking 模块提供了内置的reflection思考模式,让 Agent 节点在初次生成后,再对输出进行一次自我反思,并用反思结果替换原始输出作为该节点的最终输出。本文的任务就是:在一个 Agent 节点上开启reflection,写一条合适的reflection_prompt,然后运行工作流并确认输出确实被反思优化过。适用前提是节点类型为agent、已配置好可用的模型提供商(如openai)与密钥。
1. 开启前需要理解 reflection 做了什么
reflection属于 Thinking 模块的内置思考模式,只在**生成后(after_gen)**触发。按 Thinking 模块指南 描述,其执行流程为:
- Agent 节点正常调用模型生成初始回答;
- ThinkingManager 将对话历史(系统角色、用户输入、模型输出)拼接为反思上下文;
- 结合
reflection_prompt再次调用模型生成反思结果; - 反思结果替换原始输出作为节点最终输出。
这一步在源码中可以直接对应:SelfReflectionThinkingManager 的_after_gen_think会拼接SYSTEM / USER / ASSISTANT三段对话并调用模型,最终返回(reflection_message.text_content(), True)——第二个返回值True表示“用反思结果替换原始生成结果”,这与指南中“反思结果替换原始输出”的说明一致。
这一点直接关系到验证:开启reflection后,节点最终输出的不是模型第一次的原始回答,而是反思后的版本。这也是判断配置是否生效的核心依据。
2. 准备条件
thinking是 Agent 节点的可选配置项,但它依附于一个能正常调模型的 Agent 节点,所以provider、name、api_key仍要配好。先按 README 完成安装与配置:
# 后端依赖 uv sync # 前端依赖 cd frontend && npm install# 环境配置 cp .env.example .env在.env中设置你的模型API_KEY和BASE_URL,YAML 里用${VAR}占位符引用这些变量。
启动前后端:
make dev然后访问 Web Console:http://localhost:5173。
3. 在 Agent 节点上配置 reflection
reflection通过nodes[].config.thinking声明,包含type和config两个字段,其中config里的必填项是reflection_prompt。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 是 | 思考模式,此处填reflection |
config.reflection_prompt | string | 是 | 引导模型反思的提示词,可指定反思维度和期望改进方向 |
下面是 Thinking 模块指南 给出的配置示例,把它加到你已有的 Agent 节点上即可:
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_prompt决定了反思的方向。文档给出了几类适用场景,提示词应围绕具体目标写:写作润色(自查语法、逻辑)、代码审查(生成后做安全和质量检查)、复杂推理(对多步骤结果做验证和修正)。
仓库里已有现成示例可直接对照。demo_human.yaml 的 Agent 节点A开启了reflection,其reflection_prompt是'Extract the first sentence of each paragraph, do not output any other content.'——这个提示词会让节点最终只输出每段第一句,正好能直观体现“反思结果替换原始输出”。demo_simple_memory.yaml 的节点A也配置了reflection,并同时绑定了memories,属于“反思 + 记忆”的组合用法。如果你的节点不需要记忆,去掉memories字段即可,只保留thinking部分。
注意:
thinking只是配置块的一部分,同一个节点仍可保留params(如temperature、max_tokens)等字段,两者互不影响。
配置完成后,可以本地校验 YAML 语法与 schema:
make validate-yamls该命令检查所有 YAML 文件的语法和 schema 错误,适合在把配置交给前端执行前先跑一遍,确认thinking块没有写错结构。
4. 运行并确认输出被反思优化
在 Web UI 中运行工作流并观察结果(步骤来自 Web UI 快速入门):
- 进入Launch View;
- 从左侧选择你修改后的工作流;
- 输入 Task Prompt(任务提示);
- 点击Launch按钮启动执行;
- 观察节点视图状态变化(
pending → running → success/failed),并在输出面板查看节点输出上下文。
如何判断 reflection 生效:reflection的反思结果会替换原始输出作为节点最终输出,所以你在输出面板看到(或后续下载得到的)节点结果,应该是反思后的版本,而不是模型第一次的原始回答。执行完成后,可点击右侧面板的Download下载完整 Session 压缩包(含context.json、附件、日志等),在context.json中核对该节点最终落盘的文本,确认它已经是反思优化后的内容。
如果你希望反思时还能参考历史记忆,可以把重要结果存入 Memory 并在节点上绑定memories,反思上下文会通过memory参数传入——这是可选分支,不影响上面这条最小路径。
5. 限制与注意点
- 单轮反思:当前
reflection为单轮反思。文档建议若需多轮,可在reflection_prompt中明确迭代要求,而不是依赖多轮自动执行。 - 额外模型调用与成本:反思会再调用一次模型,注意 token 用量;过长的
reflection_prompt也会增加消耗,建议聚焦关键改进点。 - 仅生成后触发:内置
reflection只启用生成后(after_gen)思考,不会在模型调用前改写输入;生成前思考需要自行扩展实现。 reflection_prompt必填:它决定反思方向,写得越具体,优化越贴近目标。
参考:Thinking 模块指南、Agent 节点配置、真实示例 demo_human.yaml 与 demo_simple_memory.yaml。
【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/GitHub_Trending/ch/ChatDev
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考