尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

AI Agent白手起家68: 智能体优化——计划执行与反思模式实战

AI Agent白手起家68: 智能体优化——计划执行与反思模式实战 纲要智能体优化的必要性计划与执行模式核心原理流程与节点设计完整可运行示例反思模式核心原理流程与节点设计完整可运行示例两种模式的对比与选型建议总结与相关度说明智能体优化的必要性在之前的实践中我们构建了单智能体和多智能体应用但基础的 React 循环在处理复杂、需要多步推理的任务时往往缺乏全局视角和自我修正能力。为此业界提出了多种架构优化方案其中计划与执行和反思是两种最经典且实用的模式。它们同样可以基于LangGraph实现通过引入规划或批判节点显著提升输出质量。计划与执行模式核心原理计划与执行模式模拟人类解决复杂问题的过程先整体规划再逐步执行并在执行中动态调整计划。其工作流包含三个关键阶段规划根据用户目标生成任务步骤清单。执行逐项完成清单中的任务每个子任务可由独立工具或智能体处理。重规划检查已完成的步骤结果更新计划可能添加新步骤或调整顺序直至获得最终答案。还有未完成步骤全部完成用户目标规划节点: 生成步骤列表执行节点: 完成当前步骤重规划节点: 评估进度输出最终答案该模式的长处在于清晰的长期计划且执行子任务时可使用较弱模型以降低成本。缺点是延迟较高不适合实时对话场景。完整可运行示例下面使用LangGraph构建一个简化的计划与执行智能体它会先制定步骤然后调用模拟搜索工具逐步执行。首先安装依赖pipinstalllanggraph langchain-openai python-dotenv# plan_execute.pyimportosfromtypingimportTypedDict,Listfromdotenvimportload_dotenvfromlanggraph.graphimportStateGraph,ENDfromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplatefrompydanticimportBaseModel,Fieldfromlanggraph.checkpoint.memoryimportMemorySaver load_dotenv()# ---------- 结构化输出模型 ----------classPlan(BaseModel):steps:List[str]Field(description执行步骤列表)classAct(BaseModel):action:strField(descriptionplan 表示继续执行response 表示直接回答)updated_plan:List[str]Field(default[],description更新后的剩余步骤)response:strField(default,description如果 action 为 response则提供答案)# ---------- 状态定义 ----------classPlanExecuteState(TypedDict):input:strplan:List[str]executed_steps:List[str]final_answer:str# ---------- LLM 初始化 ----------llmChatOpenAI(modelgpt-3.5-turbo,temperature0)planner_llmllm.with_structured_output(Plan)replanner_llmllm.with_structured_output(Act)# ---------- 模拟搜索工具 ----------deffake_search(query:str)-str:if短跑inqueryor女子inquery:return中国女子短跑最快选手是韦永丽成绩为10.99秒。return未找到相关信息。# ---------- 节点函数 ----------defplanner_node(state:PlanExecuteState)-PlanExecuteState:promptChatPromptTemplate.from_template(针对以下目标制定一个简单的逐步计划每步应独立且可执行最后一步结果应为最终答案。\n目标{input}\n计划)chainprompt|planner_llm planchain.invoke({input:state[input]})return{plan:plan.steps,executed_steps:[]}defagent_node(state:PlanExecuteState)-PlanExecuteState:ifnotstate[plan]:returnstate stepstate[plan][0]# 取第一个未执行的步骤resultfake_search(step)executedstate.get(executed_steps,[])[f执行“{step}” →{result}]return{plan:state[plan][1:],executed_steps:executed}defreplanner_node(state:PlanExecuteState)-PlanExecuteState:promptChatPromptTemplate.from_template(原始目标{input}\n已完成步骤及结果{executed}\n剩余步骤{plan}\n请判断是否可以直接回答。如果可以用 response 动作输出答案否则用 plan 动作提供更新后的剩余步骤。)chainprompt|replanner_llm actchain.invoke({input:state[input],executed:state[executed_steps],plan:state[plan]})ifact.actionresponse:return{final_answer:act.response,plan:[]}return{plan:act.updated_plan}defroute(state:PlanExecuteState)-str:ifstate.get(final_answer):returnendreturncontinueifstate[plan]elseend# ---------- 构建图 ----------builderStateGraph(PlanExecuteState)builder.add_node(planner,planner_node)builder.add_node(agent,agent_node)builder.add_node(replanner,replanner_node)builder.set_entry_point(planner)builder.add_edge(planner,agent)builder.add_edge(agent,replanner)builder.add_conditional_edges(replanner,route,{continue:agent,end:END})memoryMemorySaver()appbuilder.compile(checkpointermemory)# ---------- 测试 ----------if__name____main__:config{configurable:{thread_id:plan-demo}}resultapp.invoke({input:中国女子短跑最快的选手是谁},config)ifresult.get(final_answer):print(最终答案:,result[final_answer])else:print(执行记录:,result[executed_steps])运行示例将看到智能体先规划步骤再逐步执行并最终给出答案。反思模式核心原理反思模式在生成器之后增加一个批判者角色形成“写作→评审→改进”的循环。生成节点创建内容反思节点给出详细反馈生成节点据此修改如此反复直至满足质量要求。需改进已满意用户请求生成节点: 创建初稿反思节点: 评审并给出建议输出最终内容该模式尤其适合需要反复打磨的创作任务如文章撰写、代码优化等。缺点同样是多轮调用带来更高的延迟和成本。完整可运行示例构建一个文章撰写智能体通过反思迭代提升文章质量。# reflection_writer.pyimportosfromtypingimportTypedDictfromdotenvimportload_dotenvfromlanggraph.graphimportStateGraph,ENDfromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimportHumanMessagefromlanggraph.checkpoint.memoryimportMemorySaver load_dotenv()classWriterState(TypedDict):task:strdraft:strfeedback:striteration:intllmChatOpenAI(modelgpt-3.5-turbo,temperature0.7)defgenerate_draft(state:WriterState)-WriterState:promptf你是一名文章助手。任务{state[task]}\nifstate.get(feedback):promptf上一次的反馈意见{state[feedback]}\n请根据反馈修改文章。responsellm.invoke([HumanMessage(contentprompt)])return{draft:response.content,iteration:state.get(iteration,0)1}defreflect_on_draft(state:WriterState)-WriterState:promptf你是一名严格编辑。请评审以下文章指出不足并给出改进建议。\n文章{state[draft]}\n建议responsellm.invoke([HumanMessage(contentprompt)])return{feedback:response.content}defshould_continue(state:WriterState)-str:returnendifstate.get(iteration,0)3elsecontinuebuilderStateGraph(WriterState)builder.add_node(generator,generate_draft)builder.add_node(reflector,reflect_on_draft)builder.set_entry_point(generator)builder.add_edge(generator,reflector)builder.add_conditional_edges(reflector,should_continue,{continue:generator,end:END})memoryMemorySaver()appbuilder.compile(checkpointermemory)if__name____main__:config{configurable:{thread_id:reflect-demo}}finalapp.invoke({task:写一篇关于科学用脑的短文约300字通俗易懂。},config)print(最终文章:\n,final[draft])print(\n迭代次数:,final[iteration])运行后会看到文章在多轮反思后质量明显提升。两种模式的对比与选型建议维度计划与执行反思核心思想全局规划→逐步执行→动态调整生成→评审→改进循环典型应用复杂多步任务、信息检索类文案写作、代码优化等创造性任务延迟较高较高模型成本规划节点可用强模型执行节点可用弱模型生成和反思节点均需一定能力实现复杂度较复杂需要三个主要节点相对简单两个主要节点两种模式可以组合使用例如在计划执行的每个步骤中嵌入反思以获得更好的效果。总结本博客详细讲解了智能体架构优化的两种经典模式计划与执行、反思并给出了基于LangGraph的完整可运行代码。掌握这些模式后你可以根据任务需求选择合适的优化策略或进行创新组合从而构建更强大、更可靠的 AI 应用。本文覆盖了计划与执行、反思的原理、流程和代码实现并补充了示例代码。
返回列表