LangGraph项目中的Plan-and-Execute模式实现详解
什么是Plan-and-Execute模式
Plan-and-Execute是一种先进的AI代理架构模式,它将复杂任务的解决过程分为两个主要阶段:规划阶段和执行阶段。这种模式借鉴了人类解决复杂问题时的思维方式——先制定整体计划,再分步执行。
与传统的ReAct模式相比,Plan-and-Execute具有以下显著优势:
- 显式的长期规划:通过专门规划阶段,系统能够建立更全面、更长远的任务分解方案
- 资源优化:规划阶段可以使用更强大的模型,执行阶段则使用轻量级模型,实现计算资源的高效分配
- 动态调整能力:在执行过程中可以根据实际情况重新评估和调整计划
实现Plan-and-Execute的核心组件
1. 工具定义
首先需要定义代理可以使用的工具集。在本项目中,我们使用Tavily搜索工具作为示例:
from langchain_teddynote.tools import TavilySearch
tools = [TavilySearch(max_results=3)]
2. 执行代理(Execution Agent)
执行代理负责实际执行规划阶段分解出的具体任务。我们使用ReAct风格的代理:
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model=MODEL_NAME, temperature=0)
agent_executor = create_react_agent(llm, tools, state_modifier=prompt)
3. 状态管理
定义代理的运行时状态结构:
class PlanExecute(TypedDict):
input: Annotated[str, "User's input"]
plan: Annotated[List[str], "Current plan"]
past_steps: Annotated[List[Tuple], operator.add]
response: Annotated[str, "Final response"]
4. 规划器(Planner)
规划器负责将用户输入分解为可执行的步骤序列:
class Plan(BaseModel):
steps: Annotated[List[str], "Different steps to follow"]
planner_prompt = ChatPromptTemplate.from_messages([
("system", "For the given objective, come up with a simple step by step plan..."),
("placeholder", "{messages}")
])
planner = planner_prompt | ChatOpenAI(model=MODEL_NAME).with_structured_output(Plan)
5. 重新规划器(Replanner)
在执行过程中动态调整计划:
class Act(BaseModel):
action: Union[Response, Plan]
replanner_prompt = ChatPromptTemplate.from_template(
"For the given objective, update your plan based on current progress..."
)
replanner = replanner_prompt | ChatOpenAI(model=MODEL_NAME).with_structured_output(Act)
构建执行流程图
将各个组件连接成完整的工作流:
from langgraph.graph import StateGraph
workflow = StateGraph(PlanExecute)
# 添加节点
workflow.add_node("planner", plan_step)
workflow.add_node("execute", execute_step)
workflow.add_node("replan", replan_step)
workflow.add_node("final_report", generate_final_report)
# 定义边连接
workflow.add_edge(START, "planner")
workflow.add_edge("planner", "execute")
workflow.add_edge("execute", "replan")
workflow.add_edge("final_report", END)
# 条件分支
workflow.add_conditional_edges(
"replan",
should_end,
{"execute": "execute", "final_report": "final_report"}
)
app = workflow.compile()
实际应用示例
让我们看一个实际查询的处理流程:
inputs = {
"input": "Modular RAG가 기존의 Naive RAG와 어떤 차이가 있는지와 production level에서 사용하는 이점을 설명해줘"
}
result = app.invoke(inputs)
系统会按照以下步骤处理:
- 规划阶段:将问题分解为多个可执行的子任务
- 执行阶段:逐个执行子任务
- 重新规划:根据执行结果调整后续计划
- 最终报告:整合所有结果生成最终回答
总结
Plan-and-Execute模式通过明确的阶段划分,为复杂任务处理提供了更结构化的解决方案。LangGraph框架使得这种模式的实现变得简单而直观。关键优势包括:
- 更好的任务分解能力
- 动态调整的灵活性
- 资源使用的优化
- 更可靠的长期规划
这种架构特别适合需要多步骤推理和外部工具调用的复杂任务场景。通过本项目的实现,开发者可以快速构建出功能强大且可靠的AI代理系统。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



