基本信息
- LangGraph创建工具的几种方法及工具的使用
- 模型调用通义千问(阿里Tongyi大模型)
定义简单工具
工具是一种封装函数及其输入模式的方法,可以将其传递给支持工具调用的聊天模型。这使得模型能够通过特定的输入请求执行该函数。
三种定义工具的方法
- 定义简单一个工具函数:可以将原始函数传递给create_react_agent来使用,自动将原始函数转换为LangChain工具。
- 自定义工具:为了更好地控制工具行为,请使用@tool装饰器,自动将原始函数转换为LangChain 工具。
- Pydantic 定义:可以使用 Pydantic 自定义输入模式
运行示例
# # -*- coding: utf-8 -*-
from langgraph.prebuilt import create_react_agent
from langchain_community.chat_models.tongyi import ChatTongyi #dashscope
from pydantic import BaseModel, Field
from langchain_core.tools import tool
#模型初始化
llm = ChatTongyi(
model="qwen-turbo",#qwen-max-latest qwen-plus
temperature=0,
verbose=True,
)
# 可以将原始函数传递给create_react_agent工具来使用,自动将原始函数转换为LangChain工具。
#定义简单一个工具函数
def addition(a: int, b: int) -> int:
"""两数相加"""
return a + b
# 为了更好地控制工具行为,请使用@tool装饰器,自动将原始函数转换为LangChain 工具。
# 自定义工具
@tool("subtract_tool", parse_docstring=True)# parse_docstring=True表示会解析函数的文档字符串以提取信息
def subtraction(a: int, b: int) -> int:
"""
计算两个整数的差。
Args:
a (int): 第一个整数。
b (int): 第二个整数。
Returns:
int: 两个整数的差。
"""
return a - b
# 可以使用 Pydantic 定义自定义输入模式:
class MultiplyInputSchema(BaseModel):
"""两数相乘"""
a: int = Field(description="第一个数")
b: int = Field(description="第二个数")
@tool("multiply_tool", args_schema=MultiplyInputSchema)
def multiply(a: int, b: int) -> int:
return a * b
#构建一个智能体
agent = create_react_agent(
model=llm,
tools=[addition,subtraction,multiply],
)
response = agent.invoke(
{
"messages": [{
"role": "user", "content": "2+4和7-1和2*3分别是多少?"}]}
)
print(response["messages"][-1].content)
#运行结果 2+4的结果是6,7-1的结果是6,2*3的结果也是6。
运行结果截图
隐藏模型中的参数
一些工具需要仅在运行时使用参数(例如,用户id或会话上下文),而这些参数不应受模型控制,同时保护用户隐私。
可以将这些参数放入agent的state状态或config配置中,并在工具内部访问这些信息: