工具绑定与调用

基本步骤:

在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)
相关推荐
STLearner几秒前
KDD 2026 | (2月轮)时空数据(Spatial-Temporal)论文总结时空(交通)预测,轨迹数据挖掘(表示,生成)
论文阅读·人工智能·python·深度学习·学习·机器学习·数据挖掘
特立独行的猫a7 分钟前
仓颉语言原生 Coding Agent:cjh · 仓颉语言实现的 Harness
ai·agent·harmonyos·仓颉·cangjie·harness
axinawang9 分钟前
ddddocr--识别验证码
python
2601_9621803311 分钟前
python——Django 框架
开发语言·python·django
长江后浪博客11 分钟前
Conda环境下测试Intel NPU:Python版本如何选择?
开发语言·python·conda·openvino·intel npu
陈年老古董34 分钟前
PyTorch 实现 MNIST 手写数字识别学习笔记
笔记·python·深度学习·学习
always_TT35 分钟前
【Python 字符串格式化:format() 方法】
android·开发语言·python
小义_40 分钟前
JDK 深度解析
java·linux·开发语言·python·面试
SendTomo43 分钟前
send.wang:基于浏览器WebRTC实现无客户端文件互传
网络·python·网络协议·webrtc·p2p
whcyhhh1 小时前
头歌实践教学平台:大数据存储2023(十四下答案)
大数据·数据库·python