LangChain/LangGraph BaseChatOpenAI bind_tools指南

bind_tools 是 LangChain 中与 BaseChatOpenAI 类相关的一个重要方法,用于将工具绑定到语言模型上。我来详细介绍一下这个方法的用法和功能。

bind_tools 方法详解

bind_tools 是 LangChain 框架中提供的一个方法,允许您将一系列工具(tools)直接绑定到 BaseChatOpenAI 实例上,这样模型就可以在需要时调用这些工具。

基本语法

def bind_tools(
    self,
    tools: Sequence[Union[Dict[str, Any], Tool, Callable]],
    *,
    tool_choice: Optional[Union[str, Dict[str, str]]] = None,
    **kwargs,
) -> Runnable:

参数解释

  • tools: 要绑定的工具列表。可以是字典格式的工具定义、LangChain Tool 对象或可调用函数。
  • tool_choice: 控制模型如何选择工具,可以是:
    • "auto": 让模型自动选择是否使用工具
    • "required": 强制模型必须使用工具
    • {"type": "function", "function": {"name": "tool_name"}}: 指定必须使用特定工具
  • **kwargs: 其他传递给基础方法的关键字参数

返回值

返回一个 Runnable 对象,可以像使用原始 LLM 一样使用,但现在具有工具调用能力。

使用示例

from langchain.chat_models import ChatOpenAI
from langchain.tools import tool

# 定义工具函数
@tool
def get_weather(location: str, unit: str = "celsius") -> str:
    """获取指定位置的天气信息"""
    # 这里是示例代码,实际情况下会调用天气API
    if location.lower() == "beijing":
        return "北京今天晴朗,温度25°C"
    elif location.lower() == "shanghai":
        return "上海今天多云,温度28°C"
    else:
        return f"{location}的天气数据暂时无法获取"

@tool
def calculator(expression: str) -> str:
    """计算数学表达式的结果"""
    try:
        return str(eval(expression))
    except Exception as e:
        return f"计算错误: {str(e)}"

# 创建ChatOpenAI实例
chat = ChatOpenAI(temperature=0)

# 绑定工具
chat_with_tools = chat.bind_tools([get_weather, calculator])

# 使用绑定了工具的模型
response = chat_with_tools.invoke("北京今天的天气怎么样?顺便帮我计算一下23*45是多少")
print(response.content)

function_call 的区别

bind_tools 是 LangChain 较新的 API,它与之前的 function_call 方法相比有以下优势:

  1. 更符合 LangChain 的 Runnable 接口设计
  2. 可以将工具作为一个组件绑定到模型上,使代码更简洁
  3. 更容易与 LangChain 的其他组件(如 Chains 和 Agents)集成
  4. 支持 LangChain Tool 对象,而不仅仅是函数定义

在链(Chain)中使用

from langchain.prompts import ChatPromptTemplate
from langchain.schema.runnable import RunnablePassthrough

# 创建一个提示模板
prompt = ChatPromptTemplate.from_template("用户问题: {question}")

# 构建链
chain = (
    {"question": RunnablePassthrough()}
    | prompt
    | chat.bind_tools([get_weather, calculator])
)

# 运行链
result = chain.invoke("请告诉我上海的天气,并计算125除以5")
print(result.content)

在代理(Agent)中使用

from langchain.agents import create_openai_functions_agent
from langchain.agents import AgentExecutor
from langchain.prompts import ChatPromptTemplate

# 创建代理提示
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个有用的助手,可以回答问题并使用工具来获取信息。"),
    ("human", "{input}")
])

# 创建绑定了工具的模型
llm_with_tools = chat.bind_tools([get_weather, calculator])

# 创建代理
agent = create_openai_functions_agent(llm_with_tools, [get_weather, calculator], prompt)

# 创建代理执行器
agent_executor = AgentExecutor(agent=agent, tools=[get_weather, calculator], verbose=True)

# 执行
result = agent_executor.invoke({"input": "北京和上海哪个城市温度更高?同时计算它们温度的平均值。"})
print(result["output"])

bind_tools 方法极大地简化了在 LangChain 中将工具与语言模型集成的过程,使您可以创建更强大、更灵活的应用程序。这是 LangChain 0.1.0 版本后引入的更现代化的 API 设计的一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI Agent首席体验官

您的打赏是我继续创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值