节点自由组合:- workflow.add_node("node1", func1)
- workflow.add_node("node2", func2)
- workflow.add_edges(["node1","node2"])
复制代码 </ul>3. 状态管理能力
特性 | LangChain | LangGraph | 自动记忆管理 | ✓ | ✓ | 自定义状态对象 | ✗ | ✓ | 多轮次状态追踪 | 有限 | 强大 | 中间结果访问 | 困难 | 直接 | LangGraph状态示例:- classState(TypedDict):input:str
- messages: List[dict]
- agent_out: Optional[str]defnode1(state: State):return{"agent_out":"结果"}
复制代码 4. 典型使用场景
适合LangChain的情况:
快速搭建标准RAG流程简单问答系统需要开箱即用的常见模板
适合LangGraph的情况:
多智能体协作系统
- 需要条件分支的复杂对话
- defshould_continue(state):return state["step"]<5
- workflow.add_conditional_edges("main_node",
- should_continue,{True:"main_node",False: END})
复制代码 需要循环执行的任务(如自动调试)涉及多个决策阶段的业务流程
5. 代码风格对比
LangChain典型代码:- # 线性链式结构
- chain =(
- load_documents
- | split_text
- | embed
- | store_vector
- | query_chain
- )
复制代码 LangGraph典型代码:- # 图结构工作流
- builder = Graph()
- builder.add_node("preprocess", preprocess_input)
- builder.add_node("retrieve", retrieve_docs)
- builder.add_node("generate", generate_response)
- builder.add_conditional_edges("generate",lambda x:"需要修正"in x["output"],{"True":"correct","False": END})
复制代码 6. 集成关系
不是替代关系:LangGraph通常与LangChain配合使用
- 常见组合模式:
用LangChain处理标准化组件(嵌入、检索等)用LangGraph编排这些组件的执行逻辑
- from langchain_community.retrievers import BM25Retriever
- from langgraph.graph import Graph
- # LangChain组件
- retriever = BM25Retriever.from_documents(docs)# LangGraph节点defretrieve_node(state):
- docs = retriever.invoke(state["query"])return{"docs": docs}
复制代码 7. 性能考量
维度 | LangChain | LangGraph | 启动速度 | 快(预构建链) | 稍慢(需编译图) | 复杂流程效率 | 线性执行可能效率低 | 可并行优化 | 调试难度 | 简单 | 较复杂(需可视化工具) | 何时选择哪种工具?
选择LangChain当:
你需要快速实现标准模式任务可以表示为线性流程不想处理底层状态管理
选择LangGraph当:
需要if-then-else等控制流构建多智能体系统需要精细控制执行流程
- # 例如带审核的工作流defcontent_filter(state):return"敏感词"notin state["draft"]
- workflow.add_conditional_edges("generate_draft",
- content_filter,{True:"publish",False:"reject"})
复制代码 两者结合使用的完整示例:- from langchain_core.prompts import ChatPromptTemplate
- from langchain_openai import ChatOpenAI
- from langgraph.graph import Graph
- # LangChain组件
- prompt = ChatPromptTemplate.from_template("回答关于{topic}的问题")
- llm = ChatOpenAI()
- chain = prompt | llm
- # LangGraph工作流
- workflow = Graph()
- workflow.add_node("generate",lambda x: chain.invoke(x))
- workflow.add_node("review", human_review_func)
- workflow.add_conditional_edges("generate",
- needs_review,{"True":"review","False": END})
复制代码 总结来说,LangChain是"乐高积木",提供预制组件;LangGraph是"蓝图",让你自由设计这些积木的组合方式。根据项目复杂度选择,它们通常协同工作而非二选一。 |