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

embedded/2024/11/20 18:25:18/

1. 初始化模型

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

# First we initialize the model we want to use.
from langchain_openai import ChatOpenAImodel = ChatOpenAI(temperature=0,model="glm-4-plus",openai_api_key="your_api_key",openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)

2. 定义自定义工具

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

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. 设置检查点

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

from langgraph.checkpoint.memory import MemorySavermemory = MemorySaver()

4. 定义图形

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

from langgraph.prebuilt import create_react_agentgraph = create_react_agent(model, tools=tools, interrupt_before=["tools"], checkpointer=memory
)

5. 打印工具流

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

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. 发送查询并打印结果

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

from langchain_core.messages import HumanMessageconfig = {"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_9208192248525421766Args:location: SF, CA

7. 获取当前状态

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

snapshot = graph.get_state(config)
print("Next step: ", snapshot.next)

输出示例:

Next step:  ('tools',)

8. 继续处理流

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

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

输出示例:

================================[1m Ai Message [0m==================================
Tool Calls:get_weather (call_9208192248525421766)Call ID: call_9208192248525421766Args:location: SF, CA
================================[1m Tool Message [0m=================================
Name: get_weatherError: 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_9208192214165585200Args:location: San Francisco, CA

9. 更新状态

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

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. 再次打印流

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

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

输出示例:

================================[1m Ai Message [0m==================================
Tool Calls:get_weather (call_9208192214165585200)Call ID: call_9208192214165585200Args:location: San Francisco
================================[1m Tool Message [0m=================================
Name: get_weatherIt'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/


http://www.ppmy.cn/embedded/139147.html

相关文章

vscode 关闭绑定元素 隐式具有“any”类型这类错误

在vue的项目里面,经常看到any类型的报错,真的很烦的 在tsconfig.json中配置以下参数 “noImplicitAny”: false 就可以了 出现类型“never”上不存在属性“userName”。ts-plugin(2339) 配置该参数 modeuleResolution : node "compilerOptions&qu…

Matlab实现北方苍鹰优化算法优化随机森林算法模型 (NGO-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 北方苍鹰优化算法(Northern Goshawk Optimization, NGO)是一种新颖的群智能优化算法,灵感源自北方苍鹰捕食时的策略。该算法通过模拟苍鹰的搜寻、接近和捕捉猎物的行为模式&am…

React 教程第一节 简介概述 以及 特点

概述: 一个用于构建web与原生交互界面的UI库,无论是独立开发者,还是团队协作,React 都可以轻松的组合由不同人群开发的组件,随写随插随用,方便快捷; 特点: 1、声明式设计&#xf…

11.19 机器学习-梯度下降

# **正规方程求解的缺点** # 最小二乘法的缺点 # 之前利用正规方程求解的W是最优解的原因是MSE这个损失函数是凸函数。 # 但是,机器学习的损失函数并非都是凸函数,设置导数为0会得到很多个极值,不能确定唯一解,MSE还有一个问题,当数据量和…

windows C#-查询表达式基础(二)

查询变量 在 LINQ 中,查询变量是存储查询而不是查询结果的任何变量。 更具体地说,查询变量始终是可枚举类型,在 foreach 语句或对其 IEnumerator.MoveNext() 方法的直接调用中循环访问时会生成元素序列。 本文中的示例使用以下数据源和示例…

PHP大模型深度学习库TransformersPHP 安装体验

TransformersPHP是一个工具包,PHP开发人员可以轻松地将机器学习魔法添加到他们的项目中。 管方地址:TransformersPHP github地址:GitHub - CodeWithKyrian/transformers-php: Transformers PHP is a toolkit for PHP developers to add machi…

2个word内容合并

要在Java中实现将两个Word文档的内容合并,可以使用Apache POI库来操作Word文档。 下面2个word合并包括以下内容的合并和处理: 1、段落、标题合并以及样式处理 2、表格合并以及样式处理 3、单元个内容样式处理 4、带word模板占位符内容处理 步骤&#xff…

go语言中的切片含义和用法详解

Go 语言中的切片(slice)是引用类型,它提供了一种灵活的方式去操作一系列具有相同类型的数据。与数组不同,切片的长度不是固定的,可以动态地增长或缩小。切片在 Go 语言中非常常用,因为它们提供了高效且方便…