智能体设计范式:Reflection

智能体设计范式:Reflection

1 核心思想

Reflection(反思) 让模型在生成初步答案后,对自己的回答进行自我评价和修正,通过多轮"生成---反思---改进"的循环,提升答案的准确性、完整性和逻辑性。

2 工作原理

  1. 初始回答:模型根据问题直接生成一个答案。
  2. 反思阶段:将问题、初始回答以及反思提示(如"请指出上述答案中的错误、不足或遗漏")发给模型,让它输出批评意见和建议。
  3. 改进阶段:将反思内容连同初始答案一起,要求模型生成一个改进后的答案。
  4. 可以迭代多轮反思,直到满意或达到次数上限。

3 使用场景

  • 答案质量要求极高的场合,如法律分析、医学建议、复杂逻辑推理。
  • 需要自我纠错的开放式任务(写作、代码审查)。
  • 模型容易产生幻觉的领域,通过反思降低错误。

4 优缺点

优点

  • 能显著减少事实错误和逻辑漏洞。
  • 模拟人类"打草稿---检查---誊写"的过程,输出更可靠。
  • 可应用于任何基础的 LLM 调用之上,即插即用。

缺点

  • 多次调用 LLM,成本翻倍。
  • 模型可能固执己见,反思不能真正纠正错误。
  • 反思缺乏外部知识校验,仍可能自我强化错误。

5 Python 实现

python 复制代码
import requests
from typing import Optional

class AliYunLLM: ...  # 定义与前文相同

# ---------- Reflection Agent ----------
class ReflectionAgent:
    def __init__(self, llm: AliYunLLM, max_reflections: int = 2):
        self.llm = llm
        self.max_reflections = max_reflections

    def _generate_initial_answer(self, question: str) -> str:
        system_prompt = "你是一个乐于助人的助手,请认真回答用户的问题。"
        answer = self.llm.generate(question, system_prompt=system_prompt)
        print(f"初始答案:\n{answer}")
        return answer

    def _reflect(self, question: str, answer: str) -> str:
        system_prompt = (
            "你是一位严厉的评审专家。请仔细审阅以下问题和答案,找出其中可能存在的"
            "错误、遗漏、逻辑矛盾或表述不清的地方,并给出具体的改进建议。"
            "直接输出批评和建议,不要输出其他内容。"
        )
        prompt = f"问题:{question}\n\n答案:{answer}\n\n请进行反思和批评:"
        reflection = self.llm.generate(prompt, system_prompt=system_prompt)
        print(f"反思内容:\n{reflection}")
        return reflection

    def _improve_answer(self, question: str, original_answer: str, reflection: str) -> str:
        system_prompt = (
            "你是一位追求完美的助手。请根据评审专家的反思意见,对原始答案进行改进,"
            "生成一个更准确、完整、清晰的最终答案。只输出改进后的答案。"
        )
        prompt = (
            f"问题:{question}\n\n"
            f"原始答案:{original_answer}\n\n"
            f"评审意见:{reflection}\n\n"
            "请输出改进后的答案:"
        )
        improved = self.llm.generate(prompt, system_prompt=system_prompt)
        print(f"改进后答案:\n{improved}")
        return improved

    def run(self, question: str) -> str:
        # 1. 初始答案
        answer = self._generate_initial_answer(question)

        # 2. 迭代反思与改进
        for i in range(self.max_reflections):
            reflection = self._reflect(question, answer)
            # 使用改进后的答案作为下一轮的基础
            answer = self._improve_answer(question, answer, reflection)

        return answer

# ---------- 示例运行 ----------
if __name__ == "__main__":
    llm = AliYunLLM(api_key="your-api-key", base_url="https://dashscope.aliyuncs.com/api/v1", model="qwen-plus")
    agent = ReflectionAgent(llm, max_reflections=2)
    question = "请解释量子纠缠的基本概念及其应用。"
    final_answer = agent.run(question)
    print(f"\n最终答案:\n{final_answer}")