AI创想
标题:
LangGraph 和 LangChain 的区别
[打印本页]
作者:
米落枫
时间:
2025-9-7 23:36
标题:
LangGraph 和 LangChain 的区别
节点自由组合:
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是"蓝图",让你自由设计这些积木的组合方式。根据项目复杂度选择,它们通常协同工作而非二选一。
欢迎光临 AI创想 (http://llms-ai.com/)
Powered by Discuz! X3.4