LangGraph框架中怎样定义工具tools

基本信息

  • LangGraph创建工具的几种方法及工具的使用
  • 模型调用通义千问(阿里Tongyi大模型)

定义简单工具

工具是一种封装函数及其输入模式的方法,可以将其传递给支持工具调用的聊天模型。这使得模型能够通过特定的输入请求执行该函数。

三种定义工具的方法

  1. 定义简单一个工具函数:可以将原始函数传递给create_react_agent来使用,自动将原始函数转换为LangChain工具。
  2. 自定义工具:为了更好地控制工具行为,请使用@tool装饰器,自动将原始函数转换为LangChain 工具。
  3. 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配置中,并在工具内部访问这些信息:

### 使用 LangGraph Agent 创建或绘制折线图 LangGraph 是一种用于构建多代理系统的框架,它允许开发者通过多个代理(agents)协同工作来完成复杂任务。以下是关于如何使用 LangGraph 的 Agent 来生成折线图的具体说明。 #### 1. 初始化检索 Agent 并调用大模型 当用户请求生成折线图时,首先会触发检索 Agent。此 Agent 调用大型语言模型 (LLM),分析输入数据并决定后续操作路径[^1]。这一步的核心目标是解析用户的意图以及所需的数据源。 ```python from langchain.agents import initialize_agent, Tool from langchain.llms import OpenAI llm = OpenAI(temperature=0) tools = [ # 定义工具列表... ] retrieval_agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True) result = retrieval_agent.run("Generate a line chart based on the given data.") ``` #### 2. 数据检索与传递 如果 LLM 判断需要进一步获取数据,则检索 Agent 将调用相应的检索工具以收集必要的信息,并将这些数据返回至原始 Agent 进行处理[^1]。这一过程通常涉及数据库查询或其他外部 API 请求。 #### 3. 图表生成逻辑 一旦数据准备就绪,流程会被导向负责图表生成的特定 Agent。该 Agent 同样依赖于 LLM 对接收到的信息进行评估,并最终选择合适的绘图库(如 Matplotlib 或 Plotly)实现可视化效果[^1]。 ```python import matplotlib.pyplot as plt def generate_line_chart(data): """ Generate and save a line chart from provided dataset. Parameters: data (dict): A dictionary containing 'x' values and corresponding 'y'. Returns: str: Path to saved image file of generated plot. """ x_values = list(map(str, range(len(data['y'])))) if not isinstance(data.get('x'), list) else data['x'] y_values = data['y'] plt.figure(figsize=(8, 6)) plt.plot(x_values, y_values, marker='o', linestyle='-') plt.title("Line Chart Example") plt.xlabel("X-Axis Label") plt.ylabel("Y-Axis Label") output_path = "./line_chart.png" plt.savefig(output_path) return output_path ``` 在此阶段,`generate_line_chart()` 函数接受结构化的字典作为参数,其中键分别为 `x` 和 `y` 表示坐标轴上的数值序列。函数内部利用 Python 中广泛使用的 Matplotlib 库渲染图形,并保存为本地文件形式以便后续展示或者分享给用户端查看[^1]。 #### 4. 结果反馈循环 生成完毕之后,图表生成 Agent 把成果连同任何附加元数据一并发回至上层调用者即初始检索 Agent 处理。此时后者再次激活其内置的大规模预训练神经网络组件重新审视当前状态是否满足终止条件——亦即是说整个作业链条已经圆满达成预期目的可以安全退出;否则将继续探索新的行动方向直至成功为止[^1]。 --- ### 总结 综上所述,在基于 LangGraph 构建的应用场景下制作一条简单的线条状统计图像大致遵循以上几个主要环节:启动搜索节点询问下一步动作指南→必要时候提取关联素材资源→切换到专门从事制图工作的子模块执行具体业务功能→最后回到起点确认整体进展状况进而做出适当安排决策。期间总计需至少四轮交互式对话机制驱动下的智能化运算支持才能顺利完成全部预定程序设定要求[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小何慢行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值