4. langgraph中的react agent使用 (在react agent添加人机交互)

1. 初始化模型

首先,我们需要初始化要使用的模型。

python 复制代码
# First we initialize the model we want to use.
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    temperature=0,
    model="glm-4-plus",
    openai_api_key="your_api_key",
    openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)

2. 定义自定义工具

我们将使用一个自定义工具来返回预定义的天气信息。

python 复制代码
from typing import Literal
from langchain_core.tools import tool

@tool
def get_weather(location: str):
    """Use this to get weather information from a given location."""
    if location.lower() in ["nyc", "new york"]:
        return "It might be cloudy in nyc"
    elif location.lower() in ["sf", "san francisco"]:
        return "It's always sunny in sf"
    else:
        raise AssertionError("Unknown Location, please try again use different expression")

tools = [get_weather]

3. 设置检查点

为了支持人机交互模式,我们需要一个检查点。

python 复制代码
from langgraph.checkpoint.memory import MemorySaver

memory = MemorySaver()

4. 定义图形

使用LangGraph的预构建功能来创建一个REACT代理。

python 复制代码
from langgraph.prebuilt import create_react_agent

graph = create_react_agent(
    model, tools=tools, interrupt_before=["tools"], checkpointer=memory
)

5. 打印工具流

定义一个工具来美化打印流。

python 复制代码
def print_stream(stream):
    """A utility to pretty print the stream."""
    for s in stream:
        message = s["messages"][-1]
        if isinstance(message, tuple):
            print(message)
        else:
            message.pretty_print()

6. 发送查询并打印结果

发送一个查询并打印结果。

python 复制代码
from langchain_core.messages import HumanMessage

config = {"configurable": {"thread_id": "42"}}
inputs = {"messages": [("user", "what is the weather in SF, CA?")]}

print_stream(graph.stream(inputs, config, stream_mode="values"))

输出示例:

复制代码
================================[1m Human Message [0m=================================
what is the weather in SF, CA?
================================[1m Ai Message [0m==================================
Tool Calls:
  get_weather (call_9208192248525421766)
 Call ID: call_9208192248525421766
  Args:
    location: SF, CA

7. 获取当前状态

获取当前状态以了解下一步操作。

python 复制代码
snapshot = graph.get_state(config)
print("Next step: ", snapshot.next)

输出示例:

复制代码
Next step:  ('tools',)

8. 继续处理流

继续处理流以获取更多结果。

python 复制代码
print_stream(graph.stream(None, config, stream_mode="values"))

输出示例:

复制代码
================================[1m Ai Message [0m==================================
Tool Calls:
  get_weather (call_9208192248525421766)
 Call ID: call_9208192248525421766
  Args:
    location: SF, CA
================================[1m Tool Message [0m=================================
Name: get_weather

Error: AssertionError('Unknown Location, please try again use different expression')
 Please fix your mistakes.
================================[1m Ai Message [0m==================================
Tool Calls:
  get_weather (call_9208192214165585200)
 Call ID: call_9208192214165585200
  Args:
    location: San Francisco, CA

9. 更新状态

根据工具的错误信息更新状态。

python 复制代码
state = graph.get_state(config)

last_message = state.values["messages"][-1]
last_message.tool_calls[0]["args"] = {"location": "San Francisco"}

graph.update_state(config, {"messages": [last_message]})

输出示例:

复制代码
{'configurable': {'thread_id': '42',
  'checkpoint_ns': '',
  'checkpoint_id': '1efa3728-5fb2-6e2f-8004-c28044c43c8b'}}

10. 再次打印流

再次打印流以获取最终结果。

python 复制代码
print_stream(graph.stream(None, config, stream_mode="values"))

输出示例:

复制代码
================================[1m Ai Message [0m==================================
Tool Calls:
  get_weather (call_9208192214165585200)
 Call ID: call_9208192214165585200
  Args:
    location: San Francisco
================================[1m Tool Message [0m=================================
Name: get_weather

It's always sunny in sf
================================[1m Ai Message [0m==================================

The weather in San Francisco is always sunny!

参考链接:https://langchain-ai.github.io/langgraph/how-tos/create-react-agent-hitl/

相关推荐
周名彥8 分钟前
### 基于CP++的天元算盘系统“长度-长“定义及工程实现方案
人工智能·去中心化·知识图谱·量子计算·agi
AMiner:AI科研助手8 分钟前
AI如何重新定义研究?以AMiner沉思为例讲透Deep Research
人工智能·glm·智谱·深度调研
数字孪生家族11 分钟前
以视频孪生融合空间智能,打造智慧城市领域物联感知与 AI 应用标杆案例
人工智能·智慧城市·视频孪生智慧交通·空间智能应用·视频孪生能源·数字乡村建设
Deepoch13 分钟前
智能清洁新纪元:移动式收垃圾机器人如何重塑城市环卫服务体系
人工智能·机器人·具身模型·deepoc·环卫机器人
ZEGO即构开发者14 分钟前
AI降噪,AI打分,AI唱歌?在线KTV+AI,让每一次欢唱“声”机勃勃
人工智能·在线ktv
南山安17 分钟前
Qoder:CLI与IDE,未来编程的双引擎模式
人工智能
其美杰布-富贵-李17 分钟前
TensorBoard 与 WandB 在 PyTorch Lightning 中的完整指南
人工智能·pytorch·python·监控·调优
冬奇Lab19 分钟前
RAG完全指南:从"死记硬背"到"开卷考试"的AI进化之路
人工智能·llm
水境传感 张园园21 分钟前
土壤蒸渗仪:土壤水分动态的“记录仪”
人工智能
啵啵鱼爱吃小猫咪22 分钟前
一个机械臂抓取项目的复现
人工智能·机器人