工具绑定与调用

基本步骤:

在Agent当中,当我们需要调用自己写好的工具时,我们需要分三步来构建Message:

  1. HumanMessage(提出问题)
  2. AIMessage(由ai来帮我们选择该调用哪个工具,以及每个工具传什么参数)
  3. ToolMessage (工具调用的结果)

例:

绑定工具:

python 复制代码
@tool
def add(
        a: Annotated[int, Field(description="first number")],
        b: Annotated[int, Field(description="second number")]
)->tuple[str, list[int]]:
    """Add two numbers together."""
    nums = [a, b]
    result = f'{nums}等于{a + b}'
    return result, nums

@tool
def multiply(
        a: Annotated[int, Field(description="first number")],
        b: Annotated[int, Field(description="second number")]
)->tuple[str, list[int]]:
    """Multiply two numbers together."""
    nums = [a, b]
    result = f'{nums}等于{a * b}'
    return result, nums

from langchain_openai import ChatOpenAI
chat = ChatOpenAI(model="deepseek-chat",
                  api_key=os.getenv("DEEPSEEK_API_KEY"),
                  base_url="https://api.deepseek.com")

tools = [add, multiply]
chat_with_tools = chat.bind_tools(tools)

HumanMessage:

python 复制代码
messages = [
    HumanMessage(content="56加5223,6乘以6")
]

AIMessage:

python 复制代码
ai_message=chat_with_tools.invoke(messages)

messages.append(ai_message)

AIMessage是工具调用过程中重要的一环,该环节我们知道调用哪个工具,以及参数,在该例子当中,返回的ai_message中包含的tool_calls是最为关键的,内容如下:

tool_calls=[

{

'name': 'add',

'args': {'a': 56, 'b': 5223},

'id': 'call_00_...'

},

{

'name': 'multiply',

'args': {'a': 6, 'b': 6},

'id': 'call_01_...'

}

]

通过以上参数,让我们下一步能够直接去调用tool并将tool_calls中的内容作为参数传递调用。

ToolMessage:

python 复制代码
for tool_call in ai_message.tool_calls:
    selected_tool = {"add":add, "multiply":multiply}[tool_call["name"].lower()]
    tool_message = selected_tool.invoke(tool_call)
    messages.append(tool_message)
相关推荐
苏灿烤鱼1 小时前
AI Agent 深拆 | 图能让 AI 决策可追责吗?Semantica 登顶拆解
python·github·agent
Sirius.z9 小时前
第R6周:LSTM实现糖尿病探索与预测
python
名字还没想好☜9 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
IvanCodes9 小时前
RAG 实战教程(一):RAG 工作原理与完整流程——分片、索引、召回、重排和生成
人工智能·后端·agent
·薯条大王10 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
飞哥数智坊10 小时前
在夏令营带学生从0到1做 Agent,我更确定了三件事
agent
Dxy123931021611 小时前
Python 如何使用 MySQL 的事务
python·mysql
怕浪猫13 小时前
用 TRAE Work 来写这篇关于 TRAE Work 的征文
aigc·agent·ai编程
今儿敲了吗15 小时前
Python ——第三方包
笔记·python