my_reflection_agent.py
代码实现
# my_reflection_agent.py
from typing import List, Dict, Any, Optional
from hello_agents import HelloAgentsLLM# --- 模块 1: 记忆模块 ---class Memory:"""一个简单的短期记忆模块,用于存储智能体的行动与反思轨迹。"""def __init__(self):# 初始化一个空列表来存储所有记录self.records: List[Dict[str, Any]] = []def add_record(self, record_type: str, content: str):"""添加新记录"""self.records.append({"type": record_type, "content": content})# 为了控制台输出清爽,可以简化打印print(f"📝 记忆更新: [{record_type.upper()}] 记录已保存。")def get_last_execution(self) -> str:"""获取最近一次的执行结果 (初稿或优化后的内容)"""for record in reversed(self.records):if record['type'] == 'execution':return record['content']return ""# --- 模块 2: Reflection 智能体 ---# 默认的通用提示词(当没有传入 custom_prompts 时使用)
DEFAULT_PROMPTS = {"initial": """请完成以下任务:
任务:{task}
请直接输出最终结果,不要包含任何多余的开头或结尾解释。""","reflect": """你是一位极其严格的评审专家。请审查以下内容的质量、准确性和逻辑性。
任务:{task}
当前内容:
{content}请指出不足之处并提供具体的改进建议。如果内容已经非常完美,达到了最高标准,请严格且仅输出“无需改进”四个字。""","refine": """请根据评审专家的反馈,优化你之前生成的内容。
任务:{task}评审员的反馈:
{feedback}请直接输出优化后的完整最新内容,不要包含任何额外的解释。"""
}class MyReflectionAgent:"""支持自定义提示词的反思型智能体 (Reflection Agent)"""def __init__(self, name: str, llm: HelloAgentsLLM, custom_prompts: Optional[Dict[str, str]] = None,max_iterations: int = 3):self.name = nameself.llm = llmself.max_iterations = max_iterationsself.memory = Memory()# 核心修改:如果用户传了 custom_prompts 就用用户的,否则用通用的 DEFAULT_PROMPTSself.prompts = custom_prompts if custom_prompts else DEFAULT_PROMPTSprint(f"✅ {self.name} 初始化完成,最大反思轮数: {self.max_iterations}")def run(self, task: str) -> str:print(f"\n🤖 {self.name} 开始处理任务: {task}")# --- 1. 初始执行 (生成初稿) ---print("\n--- 正在生成初稿 ---")initial_prompt = self.prompts["initial"].format(task=task)initial_content = self._invoke_llm(initial_prompt)self.memory.add_record("execution", initial_content)# --- 2. 迭代循环:反思与优化 ---for i in range(self.max_iterations):print(f"\n--- 第 {i+1}/{self.max_iterations} 轮反思迭代 ---")# a. 反思阶段 (Critique)print("🤔 正在进行反思与审查...")last_content = self.memory.get_last_execution()# 使用 format 传入 task 和 content(对应 test 文件中的占位符)reflect_prompt = self.prompts["reflect"].format(task=task, content=last_content)feedback = self._invoke_llm(reflect_prompt)self.memory.add_record("reflection", feedback)# b. 停止条件判断if "无需改进" in feedback or "no need for improvement" in feedback.lower():print("✅ 评审通过:内容已达标,停止迭代。")break# c. 优化阶段 (Refine)print("✍️ 正在根据反馈进行优化...")# 使用 format 传入 task, feedback 和 content (多传不报错,兼容不同模板)refine_prompt = self.prompts["refine"].format(task=task,feedback=feedback,content=last_content)refined_content = self._invoke_llm(refine_prompt)self.memory.add_record("execution", refined_content)# 获取最后一次修改的内容作为最终答案final_content = self.memory.get_last_execution()print("\n✨ 任务完成")return final_contentdef _invoke_llm(self, prompt: str) -> str:"""内部方法:统一调用大语言模型"""messages = [{"role": "user", "content": prompt}]# 兼容各种情况的判空处理response = self.llm.invoke(messages)return response if response else ""
test_reflection_agent.py
# test_reflection_agent.py
from dotenv import load_dotenv
from hello_agents import HelloAgentsLLM
from my_reflection_agent import MyReflectionAgentload_dotenv()
llm = HelloAgentsLLM()# 使用默认通用提示词
general_agent = MyReflectionAgent(name="我的反思助手", llm=llm)# 使用自定义代码生成提示词(类似第四章)
code_prompts = {"initial": "你是Python专家,请编写函数:{task}","reflect": "请审查代码的算法效率:\n任务:{task}\n代码:{content}","refine": "请根据反馈优化代码:\n任务:{task}\n反馈:{feedback}"
}
code_agent = MyReflectionAgent(name="我的代码生成助手",llm=llm,custom_prompts=code_prompts
)# 测试使用
result = general_agent.run("写一篇关于人工智能发展历程的简短文章")
print(f"最终结果: {result}")
结果
✅ 我的反思助手 初始化完成,最大反思轮数: 3
✅ 我的代码生成助手 初始化完成,最大反思轮数: 3🤖 我的反思助手 开始处理任务: 写一篇关于人工智能发展历程的简短文章--- 正在生成初稿 ---
📝 记忆更新: [EXECUTION] 记录已保存。--- 第 1/3 轮反思迭代 ---
🤔 正在进行反思与审查...
📝 记忆更新: [REFLECTION] 记录已保存。
✍️ 正在根据反馈进行优化...
📝 记忆更新: [EXECUTION] 记录已保存。--- 第 2/3 轮反思迭代 ---
🤔 正在进行反思与审查...
📝 记忆更新: [REFLECTION] 记录已保存。
✍️ 正在根据反馈进行优化...
📝 记忆更新: [EXECUTION] 记录已保存。--- 第 3/3 轮反思迭代 ---
🤔 正在进行反思与审查...
📝 记忆更新: [REFLECTION] 记录已保存。
✍️ 正在根据反馈进行优化...
📝 记忆更新: [EXECUTION] 记录已保存。✨ 任务完成
最终结果: 从古希腊哲学对思维规律的叩问,到莱布尼茨设想“普遍语言”的理性狂想,人类对智能的追问早已深植于文明血脉。二十世纪初,数理逻辑的突破为这场追问准备了精确的语汇——弗雷格、罗素与哥德尔的工作,让“推理”本身成为可被形式化研究的对象,也悄然埋下了人工智能的思想种子。转折发生在1950年。阿兰·图灵在那篇划时代的论文中抛出了一个朴素而深邃的问题:“机器能思考吗?”他避开了对“思考”的终极定义,代之以一个可操作的模仿游戏——后来被称为图灵测试的标准。从图灵提出的这个朴素标准出发,我们走过了七十余年的求索之路。这段历程并非一帆风顺,而是一场在符号与联结、理性与经验之间的壮阔摆荡。1956年达特茅斯会议正式为“人工智能”命名,开启了符号主义的黄金时代。先驱们相信,智能的核心在于符号操作与逻辑推理,知识可以被显式编码为规则,从而让机器像人类专家一样进行演绎。这一范式在早期定理证明和专家系统中取得令人振奋的成果,却很快遭遇瓶颈:真实世界的模糊性、常识知识的浩如烟海,让精心构建的规则系统在复杂性面前轰然崩塌。二十世纪七八十年代,两次“人工智能寒冬”相继降临,经费削减,信心动摇,整个领域在过度承诺与交付不足的落差中艰难喘息。然而,火种从未熄灭。就在符号主义苦苦挣扎之际,另一条源自神经科学隐喻的路径——连接主义,正在暗处积蓄力量。从麦卡洛克-皮茨神经元模型到罗森布拉特的感知机,从反向传播算法的成熟到卷积神经网络在图像识别中的突破,连接主义用数据驱动的学习取代了人工编织的规则。真正的爆发点出现在深度学习的崛起:算力的指数级增长、大数据的丰沛供给,以及算法精进的三股力量交汇,让深度神经网络在语音识别、图像理解、自然语言处理等领域接连取得超越人类水平的表现。AlphaGo在围棋棋盘上落下的那枚棋子,不仅是算法对弈的胜利,更是一个时代的宣告:人工智能已从实验室的奇思妙想,蜕变为重塑社会的基础设施。当前,人工智能正站在新的临界点上。生成式大语言模型的出现,让机器首次展现出令人惊叹的文本理解与创作能力,多模态模型的进展则进一步模糊了感知与认知的边界。然而,这场狂飙突进也伴随着深刻的挑战:模型的可解释性仍如迷雾深锁,偏见与歧视可能被算法固化和放大,能耗问题与训练数据的版权争议迫在眉睫,而对人类意图对齐与失控风险的忧虑,已从科幻走进公共政策的议事厅。昔日图灵测试追问的是“机器能否思考”,今天的核心命题则演变为:我们能否塑造出真正安全、可靠、与人类价值相协调的智能?答案不在代码之中,而在人类集体的智慧与审慎选择之间。
