[提升LLM的智能:如何使用工具调用功能]

169 阅读2分钟
# 提升LLM的智能:如何使用工具调用功能

## 引言
在许多高级使用场景中,我们希望聊天模型不仅仅处理文本,还能够调用外部工具来执行特定任务。这就是“工具调用”所能带来的强大功能。这篇文章将向您展示如何设置和使用工具调用,从而使大语言模型(LLM)生成结构化输出。

## 主要内容

### 什么是工具调用?
工具调用是一种技术,它允许模型响应特定提示生成工具参数,而实际执行工具的过程由用户控制。这种方法可以用来从非结构化文本中提取信息等。

### 支持的模型
大多数流行的LLM提供商都支持工具调用。LangChain为定义工具、将它们传递给LLM以及表示工具调用实现了标准接口。

### 定义工具模式

#### Python函数
我们可以使用Python函数定义工具模式。这包括函数名称、类型提示及文档字符串。

```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
Pydantic类

工具模式也可以使用Pydantic类来定义。

from pydantic import BaseModel, Field

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

绑定工具到模型

使用.bind_tools()方法将工具模式绑定到聊天模型。

from langchain_openai import ChatOpenAI

# 设置API密钥
import os
os.environ["OPENAI_API_KEY"] = "your_api_key"

llm = ChatOpenAI(model="gpt-4o-mini")
llm_with_tools = llm.bind_tools([add, multiply])

调用工具

一旦工具绑定完成,模型就可以生成工具调用参数。

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

代码示例

以下是一个完整的代码示例,展示了如何通过LangChain绑定工具并调用工具。

# 使用API代理服务提高访问稳定性
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = "your_api_key"

llm = ChatOpenAI(model="gpt-4o-mini")
llm_with_tools = llm.bind_tools([add, multiply])

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

常见问题和解决方案

JSON解析错误

当工具调用输出不符合JSON格式时,可能会出现解析错误。这时,可以使用InvalidToolCall来处理错误。

网络限制

在某些地区,您可能需要使用API代理服务以提高访问稳定性。

总结和进一步学习资源

通过这篇文章,你学会了如何设置和使用工具调用功能。下一步,你可以探索如何传递工具结果回模型或实现更高级的工具调用功能。

进一步学习资源

参考资料

  • LangChain 官方文档
  • Pydantic 官方文档

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

---END---