LangChain 80 LangGraph 从入门到精通二

本文详细介绍了LangChain表达式语言在LangGraph中的应用,特别是如何处理流式输入、生成LLM令牌以及在节点间传递参数。文章展示了如何在LangGraph中创建流媒体输出和使用循环结构,同时提到了LangSmith部署方案和性能评估的相关内容。

摘要生成于 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 从入门到精通一

在这里插入图片描述

1. Streaming 流媒体

LangGraph支持几种不同类型的流媒体。

1.1. Streaming Node Output 流媒体节点输出

使用LangGraph的好处之一是很容易将每个节点产生的输出作为流媒体进行传输。

inputs = {"messages": [HumanMessage(content="what is the weather in sf")]}
for output in app.stream(inputs):
    # stream() yields dictionaries with output keyed by node name
    for key, value in output.items():
        print(f"Output from node '{key}':")
        print("---")
        print(value)
    print("\n---\n")
Output from node 'agent':
---
{'messages': [AIMessage(content='', additional_kwargs={'function_call': {'arguments': '{\n  "query": "weather in San Francisco"\n}', 'name': 'tavily_search_results_json'}})]}

---

Output from node 'action':
---
{'messages': [FunctionMessage(content="[{'url': 'https://weatherspark.com/h/m/557/2024/1/Historical-Weather-in-January-2024-in-San-Francisco-California-United-States', 'content': 'January 2024 Weather History in San Francisco California, United States  Daily Precipitation in January 2024 in San Francisco Observed Weather in January 2024 in San Francisco  San Francisco Temperature History January 2024 Hourly Temperature in January 2024 in San Francisco  Hours of Daylight and Twilight in January 2024 in San FranciscoThis report shows the past weather for San Francisco, providing a weather history for January 2024. It features all historical weather data series we have available, including the San Francisco temperature history for January 2024. You can drill down from year to month and even day level reports by clicking on the graphs.'}]", name='tavily_search_results_json')]}

---

Output from node 'agent':
---
{'messages': [AIMessage(content="I couldn't find the current weather in San Francisco. However, you can visit [WeatherSpark](https://weatherspark.com/h/m/557/2024/1/Historical-Weather-in-January-2024-in-San-Francisco-California-United-States) to check the historical weather data for January 2024 in San Francisco.")]}

---

Output from node '__end__':
---
{'messages': [HumanMessage(content='what is the weather in sf'), AIMessage(content='', additional_kwargs={'function_call': {'arguments': '{\n  "query": "weather in San Francisco"\n}', 'name': 'tavily_search_results_json'}}), FunctionMessage(content="[{'url': 'https://weatherspark.com/h/m/557/2024/1/Historical-Weather-in-January-2024-in-San-Francisco-California-United-States', 'content': 'January 2024 Weather History in San Francisco California, United States  Daily Precipitation in January 2024 in San Francisco Observed Weather in January 2024 in San Francisco  San Francisco Temperature History January 2024 Hourly Temperature in January 2024 in San Francisco  Hours of Daylight and Twilight in January 2024 in San FranciscoThis report shows the past weather for San Francisco, providing a weather history for January 2024. It features all historical weather data series we have available, including the San Francisco temperature history for January 2024. You can drill down from year to month and even day level reports by clicking on the graphs.'}]", name='tavily_search_results_json'), AIMessage(content="I couldn't find the current weather in San Francisco. However, you can visit [WeatherSpark](https://weatherspark.com/h/m/557/2024/1/Historical-Weather-in-January-2024-in-San-Francisco-California-United-States) to check the historical weather data for January 2024 in San Francisco.")]}

---

1.2 Streaming LLM Tokens 流式LLM令牌

您也可以在每个节点生成LLM令牌时访问这些LLM令牌。在这种情况下,只有"agent"节点会生成LLM令牌。为了使其正常工作,您必须使用一个支持流式传输的LLM,并在构建LLM时设置它(例如ChatOpenAI(model="gpt-3.5-turbo-1106", streaming=True))。

inputs = {"messages": [HumanMessage(content="what is the weather in sf")]}
async for output in app.astream_log(inputs, include_types=["llm"]):
    # astream_log() yields the requested logs (here LLMs) in JSONPatch format
    for op in output.ops:
        if op["path"] == "/streamed_output/-":
            # this is the output from .stream()
            ...
        elif op["path"].startswith("/logs/") and op["path"].endswith(
            "/streamed_output/-"
        ):
            # because we chose to only include LLMs, these are LLM tokens
            print(op["value"])
content='' additional_kwargs={'function_call': {'arguments': '', 'name': 'tavily_search_results_json'}}
content='' additional_kwargs={'function_call': {'arguments': '{\n', 'name': ''}}
content='' additional_kwargs={'function_call': {'arguments': ' ', 'name': ''}}
content='' additional_kwargs={'function_call': {'arguments': ' "', 'name': ''}}
content='' additional_kwargs={'function_call': {'arguments': 'query', 'name': ''}}
content='' additional_kwargs={'function_call': {'arguments': '":', 'name': ''}}
content='' additional_kwargs={'function_call': {'arguments': ' "', 'name': ''}}
content='' additional_kwargs={'function_call': {'arguments': 'weather', 'name': ''}}
content='' additional_kwargs={'function_call': {'arguments': ' in', 'name': ''}}
content='' additional_kwargs={'function_call': {'arguments': ' San', 'name': ''}}
content='' additional_kwargs={'function_call': {'arguments': ' Francisco', 'name': ''}}
content='' additional_kwargs={'function_call': {'arguments': '"\n', 'name': ''}}
content='' additional_kwargs={'function_call': {'arguments': '}', 'name': ''}}
content=''
content=''
content='I'
content="'m"
content=' sorry'
content=','
content=' but'
content=' I'
content=' couldn'
content="'t"
content=' find'
content=' the'
content=' current'
content=' weather'
content=' in'
content=' San'
content=' Francisco'
content='.'
content=' However'
content=','
content=' you'
content=' can'
content=' check'
content=' the'
content=' historical'
content=' weather'
content=' data'
content=' for'
content=' January'
content=' '
content='202'
content='4'
content=' in'
content=' San'
content=' Francisco'
content=' ['
content='here'
content=']('
content='https'
content='://'
content='we'
content='athers'
content='park'
content='.com'
content='/h'
content='/m'
content='/'
content='557'
content='/'
content='202'
content='4'
content='/'
content='1'
content='/H'
content='istorical'
content='-'
content='Weather'
content='-in'
content='-Jan'
content='uary'
content='-'
content='202'
content='4'
content='-in'
content='-S'
content='an'
content='-F'
content='r'
content='anc'
content='isco'
content='-Cal'
content='ifornia'
content='-'
content='United'
content='-'
content='States'
content=').'
content=''

2. 当使用

何时应该使用这个而不是LangChain表达语言

如果你需要循环。

Langchain表达语言允许您轻松定义链 (DAGs),但没有很好的机制来添加循环。langgraph添加了这个语法。

代码

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、付费专栏及课程。

余额充值