解锁工具调用的潜力:函数调用在AI中的应用

155 阅读2分钟

引言

在现代AI应用中,工具调用(Tool Calling)或函数调用(Function Calling)正在成为重要的功能。它允许模型响应指定的提示,通过生成符合用户定义的模式的输出来调用工具。尽管看似模型正在执行动作,但实际上模型只是生成工具的参数,实际调用工具则由用户决定。本篇文章将深入探讨这一技术,并提供一些实用的代码示例。

什么是工具调用?

工具调用涉及模型生成一个包括名称、参数字典和可选标识符的结构。这里的参数字典结构为 {argument_name: argument_value}。许多领先的LLM提供商,如Anthropic、Cohere、Google、Mistral和OpenAI,都支持工具调用的变体功能。

使用Python实现工具调用

在Python中,我们可以使用LangChain库来定义和绑定自定义工具。这里我们简要展示如何用 @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]

我们也可以使用Pydantic定义工具:

from langchain_core.pydantic_v1 import BaseModel, Field

class Add(BaseModel):
    """Add two integers together."""
    a: int = Field(..., description="First integer")
    b: int = Field(..., description="Second integer")

class Multiply(BaseModel):
    """Multiply two integers together."""
    a: int = Field(..., description="First integer")
    b: int = Field(..., description="Second integer")

tools = [Add, Multiply]

代码示例

以下是使用LangChain绑定工具并调用的完整示例:

import os
from langchain_openai import ChatOpenAI

# 使用API代理服务提高访问稳定性
os.environ["OPENAI_API_KEY"] = "your_api_key"

llm = ChatOpenAI(model="gpt-4o-mini")
llm_with_tools = llm.bind_tools(tools)

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

常见问题和解决方案

问题1:工具调用返回错误格式

一些模型提供商可能输出格式错误的工具调用。在这种情况下,可以使用 InvalidToolCall 机制来记录这些错误调用。

问题2:网络访问不稳定

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问稳定性。

总结和进一步学习资源

工具调用是构建复杂AI应用的一项重要技术,它可以帮助实现工具使用链与代理。要进一步深入学习,可以参考以下资源:

参考资料

  • LangChain官方文档
  • OpenAI API文档
  • Pydantic使用指南

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

---END---