工具绑定与调用

基本步骤:

在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)
相关推荐
reasonsummer5 小时前
【办公类-04-05】20261030整理手机照片(华为手机助手导出照片到日期文件夹+批量添加四级文件夹+手动转移照片更名+更改三级文件夹合并汉字名称)
python·智能手机
阿里云基础软件6 小时前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
BD_Marathon6 小时前
【Python】初识迭代器
python
虎鲸不是鱼6 小时前
【虎鲸养殖手册 B007】命令执行的安全细节:白名单不是防弹衣
人工智能·安全·agent·智能体·自进化agent
gz927cool7 小时前
Python 全栈应用最佳实践完整指南
开发语言·python·ai
ZhengEnCi7 小时前
为什么别人的 Skill 不适合你:从「拿来就能用」到「改成自己的流程」的适配方法
人工智能·agent
Liaiyang667 小时前
六家大模型体检卡:六个 ∅_safe(安全兜底态)的藏身之处(或显影处),就是下一次翻车的地方
系统架构·agent·rlhf·ai安全·容错设计·大模型评测·ai幻觉
智购科技智能售货柜7 小时前
顾客已经关门,视觉售货柜还在处理旧画面:延迟积压怎么查?~YH
python·单片机·嵌入式硬件·物联网·eclipse
梯度下降者7 小时前
Python从0到100(三):Python中的变量介绍
python·作用域·变量·数据类型·计算机常识
AIFQuant7 小时前
Python期货行情API接入:股指、黄金、原油多品种数据管道实战
开发语言·python·金融·区块链·量化开发