LangGraph学习笔记(六)---LangGraph ReAct应用
文章目录
- [LangGraph学习笔记(六)---LangGraph ReAct应用](#LangGraph学习笔记(六)---LangGraph ReAct应用)
- 一、ReAct
- [二、向 ReAct 代理添加记忆](#二、向 ReAct 代理添加记忆)
- [三、向 ReAct 代理添加系统提示](#三、向 ReAct 代理添加系统提示)
- [四、向 ReAct 代理添加人机交互](#四、向 ReAct 代理添加人机交互)
- 总结
一、ReAct
官方文档地址:https://langchain-ai.github.io/langgraph/how-tos/#prebuilt-react-agent
中文文档地址:https://www.aidoczh.com/langgraph/how-tos/#react
1.本文章目标
创建一个简单的 ReAct 代理应用程序,该应用程序可以检查天气。
该应用程序由一个代理(LLM)和工具组成。当我们与应用程序交互时,我们将首先调用代理(LLM)来决定是否应该使用工具。然后我们将运行一个循环
- 如果代理说要采取行动(即调用工具),我们将运行工具并将结果传递回代理
- 如果代理没有要求运行工具,我们将结束(响应用户)
预构建的代理
这里我们将使用预构建的代理。LangGraph 的一大优势 是你可以轻松创建自己的代理架构。建议你学习如何构建自己的代理,这样就可以充分利用 LangGraph。
2. 安装库
python
%pip install -U langgraph langchain-openai
3.代码
python
#示例:create_react_agent.py
# 首先我们初始化我们想要使用的模型。
from langchain_openai import ChatOpenAI
# 使用 gpt-4o 模型,设定温度为 0(温度控制生成内容的随机性,0 表示确定性输出)
model = ChatOpenAI(model="gpt-4o", temperature=0)
# 对于本教程,我们将使用一个自定义工具,该工具返回两个城市(纽约和旧金山)的预定义天气值
from typing import Literal
from langchain_core.tools import tool
# 定义一个工具函数 get_weather,它根据城市名称返回预定义的天气信息
@tool
def get_weather(city: Literal["nyc", "sf"]):
"""Use this to get weather information."""
if city == "nyc":
return "It might be cloudy in nyc"
elif city == "sf":
return "It's always sunny in sf"
else:
raise AssertionError("Unknown city")
# 将工具放入一个列表中
tools = [get_weather]
# 导入 create_react_agent 函数,用于创建 REACT 代理
from langgraph.prebuilt import create_react_agent
# 使用指定的模型和工具创建 REACT 代理
graph = create_react_agent(model, tools=tools)
4. 使用
① 让我们可视化刚刚创建的图
python
# 将生成的图片保存到文件
graph_png = graph.get_graph().draw_mermaid_png()
with open("create_react_agent.png", "wb") as f:
f.write(graph_png)

② 使用需要工具调用的输入运行应用程序
python
# 定义一个函数用于打印流数据
def print_stream(stream):
for s in stream:
message = s["messages"][-1]
if isinstance(message, tuple):
print(message)
else:
message.pretty_print()
python
# 使用需要工具调用的输入运行应用程序
inputs = {"messages": [("user", "what is the weather in sf")]}
print_stream(graph.stream(inputs, stream_mode="values"))

③ 现在让我们尝试一个不需要工具的问题
python
# 尝试一个不需要工具的问题
inputs = {"messages": [("user", "who built you?")]}
print_stream(graph.stream(inputs, stream_mode="values"))
结果:

二、向 ReAct 代理添加记忆
本教程将展示如何向预构建的 ReAct 代理添加内存。 了解如何开始使用预构建的 ReAct 代理
要启用内存,我们只需要将 checkpointer 传递给 create_react_agents
1.设置
python
%pip install -U langgraph langchain-openai
2.代码
python
#示例:create_react_agent_memory.py
# 首先我们初始化我们想要使用的模型。
from langchain_openai import ChatOpenAI
# 使用 gpt-4o 模型,设定温度为 0(温度控制生成内容的随机性,0 表示确定性输出)
model = ChatOpenAI(model="gpt-4o", temperature=0)
# 对于本教程,我们将使用一个自定义工具,该工具返回两个城市(纽约和旧金山)的预定义天气值
from typing import Literal
# 从 langchain_core.tools 导入 tool 装饰器
from langchain_core.tools import tool
# 定义一个工具函数 get_weather,它根据城市名称返回预定义的天气信息
@tool
def get_weather(city: Literal["nyc", "sf"]):
"""Use this to get weather information."""
if city == "nyc":
return "It might be cloudy in nyc"
elif city == "sf":
return "It's always sunny in sf"
else:
raise AssertionError("Unknown city")
# 将工具放入一个列表中
tools = [get_weather]
# 我们可以使用 LangGraph 的检查点器添加"聊天记忆"到图中,以保留交互之间的聊天上下文
from langgraph.checkpoint.memory import MemorySaver
# 初始化 MemorySaver 实例
memory = MemorySaver()
# 定义图
from langgraph.prebuilt import create_react_agent
# 使用指定的模型、工具和检查点器创建 REACT 代理
graph = create_react_agent(model, tools=tools, checkpointer=memory)
3.用法
让我们与它进行多次交互,以表明它可以记住
python
# 定义一个函数用于打印流数据
def print_stream(stream):
for s in stream:
message = s["messages"][-1]
if isinstance(message, tuple):
print(message)
else:
message.pretty_print()
python
# 配置参数
config = {"configurable": {"thread_id": "1"}}
# 输入参数,包含用户消息
inputs = {"messages": [("user", "What's the weather in NYC?")]}
# 打印流输出
print_stream(graph.stream(inputs, config=config, stream_mode="values"))

请注意,当我们传递相同的线程 ID 时,聊天历史记录会保留
python
# 再次输入参数,包含用户消息
inputs = {"messages": [("user", "What's it known for?")]}
# 打印流输出
print_stream(graph.stream(inputs, config=config, stream_mode="values"))

三、向 ReAct 代理添加系统提示
本教程将展示如何向预构建的 ReAct 代理添加自定义系统提示。了解如何开始使用预构建的 ReAct 代理
可以通过将字符串传递给state_modifier参数来添加自定义系统提示。
1.设置
python
%pip install -U langgraph langchain-openai
2.代码
python
#示例:create_react_agent_system_prompt.py
# 首先我们初始化我们想要使用的模型。
from langchain_openai import ChatOpenAI
# 使用 gpt-4o 模型,设定温度为 0(温度控制生成内容的随机性,0 表示确定性输出)
model = ChatOpenAI(model="gpt-4o", temperature=0)
# 对于本教程,我们将使用一个自定义工具,该工具返回两个城市(纽约和旧金山)的预定义天气值
from typing import Literal
# 从 langchain_core.tools 导入 tool 装饰器
from langchain_core.tools import tool
# 定义一个工具函数 get_weather,它根据城市名称返回预定义的天气信息
@tool
def get_weather(city: Literal["nyc", "sf"]):
"""Use this to get weather information."""
if city == "nyc":
return "It might be cloudy in nyc"
elif city == "sf":
return "It's always sunny in sf"
else:
raise AssertionError("Unknown city")
# 将工具放入一个列表中
tools = [get_weather]
# 我们可以在这里添加系统提示
prompt = "Respond in Chinese"
# 定义图
from langgraph.prebuilt import create_react_agent
# 使用指定的模型、工具和状态修改器(系统提示)创建 REACT 代理
graph = create_react_agent(model, tools=tools, state_modifier=prompt)
3.使用
python
# 定义一个函数用于打印流数据
def print_stream(stream):
for s in stream:
message = s["messages"][-1]
if isinstance(message, tuple):
print(message)
else:
message.pretty_print()
python
# 输入参数,包含用户消息
inputs = {"messages": [("user", "What's the weather in NYC?")]}
# 打印流输出
print_stream(graph.stream(inputs, stream_mode="values"))

四、向 ReAct 代理添加人机交互
本教程将演示如何向预构建的 ReAct 代理添加人机交互环过程。有关如何开始使用预构建的 ReAct 代理,请参阅本教程
通过将interrupt_before=["tools"]传递给create_react_agent,可以在调用工具之前添加断点。请注意,您需要使用检查点才能使其正常工作。
1.设置
python
%pip install -U langgraph langchain-openai
2.代码
python
#示例:create_react_agent-hitl.py
# 首先我们初始化我们想要使用的模型。
from langchain_openai import ChatOpenAI
# 使用 gpt-4o 模型,设定温度为 0(温度控制生成内容的随机性,0 表示确定性输出)
model = ChatOpenAI(model="gpt-4o", temperature=0)
# 对于本教程,我们将使用一个自定义工具,该工具返回两个城市(纽约和旧金山)的预定义天气值
from typing import Literal
# 从 langchain_core.tools 导入 tool 装饰器
from langchain_core.tools import tool
# 定义一个工具函数 get_weather,它根据城市名称返回预定义的天气信息
@tool
def get_weather(city: Literal["nyc", "sf"]):
"""Use this to get weather information."""
if city == "nyc":
return "It might be cloudy in nyc"
elif city == "sf":
return "It's always sunny in sf"
else:
raise AssertionError("Unknown city")
# 将工具放入一个列表中
tools = [get_weather]
# 我们需要一个检查点器来启用人机交互模式
from langgraph.checkpoint.memory import MemorySaver
# 初始化 MemorySaver 实例
memory = MemorySaver()
# 定义图
from langgraph.prebuilt import create_react_agent
# 使用指定的模型、工具和检查点器创建 REACT 代理
graph = create_react_agent(
model, tools=tools, interrupt_before=["tools"], checkpointer=memory
)
3.使用
python
# 定义一个函数用于打印流数据
def print_stream(stream):
for s in stream:
message = s["messages"][-1]
if isinstance(message, tuple):
print(message)
else:
message.pretty_print()
python
# 配置参数
config = {"configurable": {"thread_id": "42"}}
# 输入参数,包含用户消息
inputs = {"messages": [("user", "What's the weather in SF?")]}
# 打印流输出
print_stream(graph.stream(inputs, config, stream_mode="values"))

python
# 获取图的状态快照
snapshot = graph.get_state(config)
# 打印下一步信息
print("Next step: ", snapshot.next)
python
Next step: ('tools',)
python
# 打印后续流输出
print_stream(graph.stream(None, config, stream_mode="values"))

总结
记得关注么么叽