如何从工具中访问 RunnableConfig
前置条件
本指南假设您熟悉以下概念:
如果您有一个调用聊天模型、检索器或其他可运行对象的工具,您可能希望访问这些可运行对象的内部事件或使用其他属性对其进行配置。本指南将向您展示如何手动正确传递参数,以便使用astream_events()方法实现这一目标。
工具是 可运行对象,您可以在接口层以与任何其他可运行对象相同的方式处理它们——您可以像往常一样对它们调用 invoke()、batch() 和 stream()。然而,在编写自定义工具时,您可能希望调用其他可运行对象(如聊天模型或检索器)。为了正确追踪和配置这些子调用,您需要手动访问并传入工具的当前 RunnableConfig 对象。本指南将展示一些如何操作的示例。
兼容性
本指南需要 langchain-core>=0.2.16。
根据参数类型推断
要从您的自定义工具中访问和引用活动配置对象,您需要在工具的签名中添加一个参数,其类型标记为RunnableConfig。当您调用该工具时,LangChain 会检查工具的签名,寻找类型为RunnableConfig的参数,如果存在,则将该参数填充为正确的值。
注意:参数的实际名称无关紧要,重要的是其类型。
为了说明这一点,定义一个自定义工具,该工具接受两个参数——一个类型为字符串,另一个类型为 RunnableConfig:
%pip install -qU langchain_core
from langchain_core.runnables import RunnableConfig
from langchain_core.tools import tool
@tool
async def reverse_tool(text: str, special_config_param: RunnableConfig) -> str:
"""A test tool that combines input text with a configurable parameter."""
return (text + special_config_param["configurable"]["additional_field"])[::-1]
然后,如果我们使用包含 configurable 字段的 config 调用该工具,我们可以看到 additional_field 被正确传递:
await reverse_tool.ainvoke(
{"text": "abc"}, config={"configurable": {"additional_field": "123"}}
)
'321cba'
下一步
您现在已了解如何从工具内部配置和流式传输事件。接下来,请查看以下指南以了解更多关于使用工具的内容:
- 从自定义工具内的子运行中流式传输事件
- 将 工具结果 返回给模型
您也可以查看一些更具体的工具调用用途:
- 构建 使用工具的链和智能体
- 从模型获取 结构化输出