LangChain 83 LangGraph 从入门到精通五

本文介绍了LangChain系列文章中涉及的LangChain表达式语言的多个方面,包括链透传参数、代理、生成代码、审查机制、搜索工具集成等。文章详细展示了如何使用预构建组件如ToolExecutor和创建聊天模型、Agent的图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LangChain系列文章

  1. LangChain 60 深入理解LangChain 表达式语言23 multiple chains链透传参数 LangChain Expression Language (LCEL)
  2. LangChain 61 深入理解LangChain 表达式语言24 multiple chains链透传参数 LangChain Expression Language (LCEL)
  3. LangChain 62 深入理解LangChain 表达式语言25 agents代理 LangChain Expression Language (LCEL)
  4. LangChain 63 深入理解LangChain 表达式语言26 生成代码code并执行 LangChain Expression Language (LCEL)
  5. LangChain 64 深入理解LangChain 表达式语言27 添加审查 Moderation LangChain Expression Language (LCEL)
  6. LangChain 65 深入理解LangChain 表达式语言28 余弦相似度Router Moderation LangChain Expression Language (LCEL)
  7. LangChain 66 深入理解LangChain 表达式语言29 管理prompt提示窗口大小 LangChain Expression Language (LCEL)
  8. LangChain 67 深入理解LangChain 表达式语言30 调用tools搜索引擎 LangChain Expression Language (LCEL)
  9. LangChain 68 LLM Deployment大语言模型部署方案
  10. LangChain 69 向量数据库Pinecone入门
  11. LangChain 70 Evaluation 评估、衡量在多样化数据上的性能和完整性
  12. LangChain 71 字符串评估器String Evaluation衡量在多样化数据上的性能和完整性
  13. LangChain 72 reference改变结果 字符串评估器String Evaluation
  14. LangChain 73 给结果和参考评分 Scoring Evaluator
  15. LangChain 74 有用的或者有害的helpful or harmful Scoring Evaluator
  16. LangChain 75 打造你自己的OpenAI + LangChain网页应用
  17. LangChain 76 LangSmith 从入门到精通一
  18. LangChain 77 LangSmith 从入门到精通二
  19. LangChain 78 LangSmith 从入门到精通三
  20. LangChain 79 LangGraph 从入门到精通一
  21. LangChain 80 LangGraph 从入门到精通二
  22. LangChain 81 LangGraph 从入门到精通三
  23. LangChain 82 LangGraph 从入门到精通四

在这里插入图片描述

1. Graph

from langgraph.graph import Graph

graph = Graph()

这个接口和 StateGraph 一样,唯一的区别是它不会随着时间更新状态对象,而是依赖于在每一步传递完整的状态。这意味着从一个节点返回的任何东西都是下一个节点的输入。

2. END

from langgraph.graph import END

这是表示图结束的特殊节点。这意味着传递到这个节点的任何内容都将成为图的最终输出。它可以在两个地方使用:

  • 作为add_edge中的end_key
  • 作为传递给add_conditional_edgesconditional_edge_mapping中的一个值

3. 预先构建的示例

我们还添加了一些方法,以便轻松使用常见的、预先构建的图形和组件。

3.1 ToolExecutor

from langgraph.prebuilt import ToolExecutor

这是一个简单的帮助类,用于调用工具。它是由一系列工具的参数化的:

tools = [...]
tool_executor = ToolExecutor(tools)

然后它暴露一个可运行的接口 runnable interface。它可以用来调用工具:您可以传入一个AgentAction,它将查找相关工具并使用适当的输入调用它。

3.2 chat_agent_executor.create_function_calling_executor

from langgraph.prebuilt import chat_agent_executor

这是一个用于创建与利用函数调用的聊天模型配合工作的图表的辅助函数。可以通过传入一个模型和一个工具列表来创建。模型必须是支持OpenAI函数调用的模型。

from langchain_openai import ChatOpenAI
from langchain_community.tools.tavily_search import TavilySearchResults
from langgraph.prebuilt import chat_agent_executor
from langchain_core.messages import HumanMessage

tools = [TavilySearchResults(max_results=1)]
model = ChatOpenAI()

app = chat_agent_executor.create_function_calling_executor(model, tools)

inputs = {"messages": [HumanMessage(content="what is the weather in sf")]}
for s in app.stream(inputs):
    print(list(s.values())[0])
    print("----")

3.3 create_agent_executor

from langgraph.prebuilt import create_agent_executor

这是一个用于创建与LangChain Agents一起工作的图表的辅助函数。可以通过传入一个代理和一个工具列表来创建。

from langgraph.prebuilt import create_agent_executor
from langchain_openai import ChatOpenAI
from langchain import hub
from langchain.agents import create_openai_functions_agent
from langchain_community.tools.tavily_search import TavilySearchResults

tools = [TavilySearchResults(max_results=1)]

# Get the prompt to use - you can modify this!
prompt = hub.pull("hwchase17/openai-functions-agent")

# Choose the LLM that will drive the agent
llm = ChatOpenAI(model="gpt-3.5-turbo-1106")

# Construct the OpenAI Functions agent
agent_runnable = create_openai_functions_agent(llm, tools, prompt)

app = create_agent_executor(agent_runnable, tools)

inputs = {"input": "what is the weather in sf", "chat_history": []}
for s in app.stream(inputs):
    print(list(s.values())[0])
    print("----")

代码

https://github.com/zgpeace/pets-name-langchain/tree/develop

参考

https://python.langchain.com/docs/langsmith/walkthrough

<think>我们正在讨论LangChainLangGraph之间的关系。根据引用[1]和引用[2]的内容,我们可以总结如下:1.**LangGraph是建立在LangChain之上的**:引用[1]明确指出“LangGraph建立在LangChain的基础上”,这意味着LangGraph利用LangChain的组件(如模型、提示、工具等)来构建更复杂的Agent系统。2.**设计目标不同**:-**LangChain**:专注于链式结构(Chains),适合线性任务流程,例如文档摘要、问答系统等[^2]。-**LangGraph**:专注于图结构(Graph),支持非线性、多路径的控制流,包括条件判断、循环、分支和中断,适合复杂的多智能体协作任务[^2]。3.**核心能力差异**:-**LangChain**:提供模块化组件(模型、提示、索引、记忆、链、工具等),通过组合这些组件构建应用程序[^1]。-**LangGraph**:在LangChain的基础上增加了图计算能力,支持定义多个智能体节点,并通过边来协调它们的交互,实现动态路由和条件执行[^2]。4.**适用场景**:-简单线性任务:使用LangChain(例如:LLMChain顺序调用)[^2]。-复杂非线性任务:使用LangGraph(例如:智能客服系统需要根据用户输入动态切换工具或调用多个Agent)[^2]。5.**可视化支持**:LangGraph提供LangGraphStudio,为开发Agent提供可视化环境[^1]。**关系总结**:-**继承关系**:LangGraphLangChain的扩展,两者共享基础组件(如模型、工具等)。-**互补性**:LangChain解决基础任务编排,LangGraph解决高阶Agent协作问题。-**演进关系**:LangGraph解决了LangChain在处理循环、分支等复杂控制流时的局限性[^1]。**数学表达**:-LangChain链式结构可表示为函数组合:$$\text{Chain}=f_n\circ\cdots\circf_1$$其中$f_i$代表一个处理步骤(如提示模板、模型调用)。-LangGraph图结构可表示为状态机:$$\text{Graph}=(V,E)\quad\text{其中}\quadV=\{\text{节点}\},E=\{\text{边}\}$$节点对应处理函数,边由条件函数$c:\text{state}\rightarrow\text{next\_node}$决定[^2]。**架构对比**:|**特性**|LangChain|LangGraph||----------------|-------------------|---------------------||**结构**|链式结构|图结构||**控制流**|线性顺序|非线性(循环/分支)||**智能体支持**|单智能体|多智能体协作||**复杂度**|低至中等|高||**基础依赖**|无|LangChain组件|>**关键结论**:LangGraph不是替代LangChain,而是为其复杂Agent场景提供增强层。两者共同构成从简单到复杂应用的完整解决方案[^1][^2]。---###相关问题1.在LangGraph中如何定义条件分支来控制任务流程?2.LangChainLangGraph在实时数据处理方面的性能差异?3.如何将现有的LangChain链迁移到LangGraph图结构?4.LangGraph的多智能体协作机制具体如何实现?5.使用LangGraphStudio进行可视化开发有哪些最佳实践?</think>### LangChainLangGraph 的关系详解 LangChainLangGraph 是紧密关联但定位不同的框架,核心区别在于**架构范式**和**适用场景**。以下是关键对比: --- #### 一、核心联系:继承与互补 1. **基础依赖** - LangGraph **直接构建在 LangChain 之上**,复用其核心组件(模型、提示、工具、记忆等)[^1]。 - 两者共享生态系统,例如 LangGraph 可直接调用 LangChain 的 `AgentExecutor` 或 `Runnable` 接口[^2]。 2. **目标一致性** 均致力于**简化大语言模型(LLM)应用的开发流程**,提供模块化工具链,但解决不同层级的复杂度问题。 --- #### 二、核心区别:架构与能力 | **维度** | **LangChain** | **LangGraph** | |----------------|------------------------------|------------------------------| | **架构范式** | 链式结构(Chain) | 图结构(Graph) | | **控制流** | 线性顺序执行 | 非线性流程(循环/分支/中断) | | **任务复杂度** | 简单到中等(如问答、摘要) | 高复杂度(如多智能体协作) | | **节点关系** | 固定顺序调用 | 动态路由(条件边权重决策) | | **典型场景** | `LLMChain`、`SequentialChain` | 客服系统、多Agent决策引擎 | ##### 数学表达差异 - **LangChain 链式结构**: $$ \text{Output} = f_n \circ \cdots \circ f_2 \circ f_1(\text{Input}) $$ 其中 $f_i$ 代表固定步骤(如模型调用、工具执行)[^1]。 - **LangGraph 图结构**: $$ \text{Graph} = (V, E), \quad V=\{\text{节点}\}, \quad E=\{\text{边}| \ \text{条件函数 } c: \text{state} \rightarrow \text{next\_node}\} $$ 节点代表任务单元,边由状态机条件动态激活[^2]。 --- #### 三、LangGraphLangChain 的增强 1. **突破链式局限** - 解决 LangChain 难以处理的**循环、中断、并行分支**问题(如用户中途修改需求)[^1]。 - 示例场景: ```mermaid graph LR A[用户提问] --> B{是否需要查数据库?} B -->|是| C[调用SQL工具] B -->|否| D[直接生成答案] C --> E{结果可信?} E -->|否| F[调用搜索引擎] E -->|是| D ``` 2. **多智能体协作** - LangGraph 可定义多个独立 Agent 节点,通过**消息传递机制**协调工作流[^2]。 - 例如:客服系统中路由节点将“技术问题”分配给专用 Agent。 3. **可视化开发** 提供 **LangGraph Studio** 可视化编辑图节点和调试状态流,降低复杂逻辑的实现门槛[^1]。 --- #### 四、如何选择? | **场景** | **推荐框架** | **原因** | |------------------------------|--------------|------------------------------| | 文档摘要/简单问答 | LangChain | 链式结构足够高效 | | 需动态调整流程的客服系统 | LangGraph | 处理分支、循环和异常中断 | | 多Agent协作(如自动决策团队)| LangGraph | 协调多个智能体的输入/输出 | > **关键结论**: > - LangChain 是**基础框架**,适合大多数常规 LLM 应用; > - LangGraph 是**进阶工具**,专为复杂控制流和多智能体系统设计[^1][^2]。 --- ### 相关问题 1. 如何在 LangGraph 中实现“当工具调用失败时自动切换备用工具”的分支逻辑? 2. LangGraph 的多智能体协作机制具体如何降低任务延迟? 3. 能否将现有的 LangChain 链式工作流迁移到 LangGraph?需要哪些改造? 4. LangGraph Studio 在调试复杂状态机时有哪些独特优势? 5. 对比 LangGraph 与传统工作流引擎(如 Airflow)在处理 LLM 任务时的差异?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值