从传统 LangChain 代理迁移到 LangGraph 的指南

在本指南中,我们将展示如何从传统的 LangChain 代理迁移到更为灵活的 LangGraph 代理。LangChain的 `AgentExecutor` 有多种配置参数。在这里,我们将展示这些参数如何映射到 LangGraph 的 ReAct 代理执行器,并使用 `create_react_agent` 预建方法进行帮助。

## 技术背景介绍

随着 AI 技术的进步,开发人员对工具调用代理的需求也越来越复杂。LangChain 提供的传统代理已成为许多开发者的首选,然而其灵活性受到一定限制。为了解决这一问题,LangGraph 提供了更强大的扩展功能,支持更多的配置选项和状态管理。

## 核心原理解析

LangGraph 的 ReAct 代理执行器通过状态管理消息列表来实现。在整个执行过程中,它会继续处理列表,直到代理的输出中不再有工具调用。通过输入一个消息列表来启动代理,输出将包含整个会话历史。

## 代码实现演示

### 环境准备

使用 OpenAI 作为语言模型。
```python
import os
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = "sk-..."
model = ChatOpenAI(model="gpt-4o")

基本用法

从工具调用的 ReAct 风格代理的基本创建和使用开始。首先定义模型和工具,然后使用它们来创建代理。

from langgraph.prebuilt import create_react_agent
from langchain_core.tools import tool

@tool
def magic_function(input: int) -> int:
    """Applies a magic function to an input."""
    return input + 2

tools = [magic_function]
app = create_react_agent(model, tools)

query = "what is the value of magic_function(3)?"

messages = app.invoke({"messages": [("human", query)]})
print({"input": query, "output": messages["messages"][-1].content})

输出结果:

{'input': 'what is the value of magic_function(3)?', 'output': 'The value of magic_function(3) is 5.'}

自定义提示模板

在这里,我们可以通过传递自定义系统消息或使用函数来实现对代理行为的控制。例如,指示代理仅用西班牙语回复。

system_message = "You are a helpful assistant. Respond only in Spanish."
app = create_react_agent(model, tools, state_modifier=system_message)

query = "what is the value of magic_function(3)?"

messages = app.invoke({"messages": [("user", query)]})
print({"input": query, "output": messages["messages"][-1].content})

输出结果:

{'input': 'what is the value of magic_function(3)?', 'output': 'El valor de magic_function(3) es 5.'}

应用场景分析

LangGraph 提供更为复杂的状态管理,能够支持长时间运行及多轮对话的场景,非常适合需要复杂逻辑处理的应用场景,如多工具链的调用,自动化任务执行等。

实践建议

迁移到 LangGraph 后,可以充分利用其灵活的状态管理和扩展功能。建议结合具体应用场景进行参数调节,使代理能够更好地满足业务需求。对于复杂的工具使用场景,可以利用状态修饰器来实现复杂的消息处理逻辑。

如果遇到问题欢迎在评论区交流。

---END---
### 关于LangChainLangGraph在语言模型和NLP框架中的应用 #### LangChain的应用 LangChain是一种新兴的方法论,强调构建模块化的自然语言处理(NLP)流水线,在这些流水线中,不同的组件可以被轻松替换或更新而不影响整个系统的性能。这种方法使得开发者能够在不改变整体结构的情况下试验不同类型的算法和技术。通过这种方式,LangChain促进了快速迭代和发展高效的解决方案[^1]。 对于具体的实现而言,采用LangChain方法的系统通常会设计成一系列相互连接的任务链,其中每个任务负责完成特定的语言处理功能。例如,一个典型的流程可能包括文本清理、分词、标注以及最终的理解层分析等阶段。这样的架构不仅简化了开发过程,还提高了维护性和可扩展性。 #### LangGraph的作用 另一方面,LangGraph专注于利用图形表示来增强传统基于序列的语言模型的表现力。在这种模式下,句子不再仅仅被视为单词列表;相反,它们会被转换为复杂的网络结构——节点代表词语或其他语义单元,边则捕捉实体间的关系。这种转变带来了两个主要优势: - **更深层次的理解**:相比于简单的一维向量空间,图谱能更好地表达上下文依赖关系和其他形式的知识关联。 - **跨领域迁移能力更强**:因为很多现实世界的现象本质上都是网状而非线性的,所以以图为载体的数据更容易迁移到其他应用场景当中去[^2]。 结合上述两种技术,即LangChain所提供的灵活管道机制加上由LangGraph带来的高级抽象层次,可以使现代NLP应用程序更加智能高效地应对多样化的挑战。 ```python import langchain as lc from langgraph import GraphBuilder, NodeAnalyzer # 创建一个基本的langchain实例用于处理输入文本流 processor = lc.Chain([ "text_cleaner", # 清理噪声字符 "tokenizer", # 将字符串分割成语素单位 "tagger", # 对各部分打标签以便后续操作 ]) # 使用langgraph建立概念之间的联系并提取特征 analyzer = NodeAnalyzer() graph_builder = GraphBuilder(analyzer) input_text = "Your input sentence here." processed_data = processor.process(input_text) semantic_network = graph_builder.build(processed_data) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值