如何从工具访问 RunnableConfig
先决条件
本指南假定您熟悉以下概念
如果您有一个调用聊天模型、检索器或其他 runnables 的工具,您可能希望访问这些 runnables 的内部事件或使用其他属性配置它们。本指南向您展示如何正确手动传递参数,以便您可以使用 astream_events()
方法执行此操作。
工具是 runnables,您可以像对待任何其他 runnable 一样对待它们 - 您可以像往常一样在它们上面调用 invoke()
、batch()
和 stream()
。但是,在编写自定义工具时,您可能希望调用其他 runnables,如聊天模型或检索器。为了正确跟踪和配置这些子调用,您需要手动访问并传入工具当前的 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]
API 参考:RunnableConfig | tool
然后,如果我们使用包含 configurable
字段的 config
调用该工具,我们可以看到 additional_field
被正确地传递
await reverse_tool.ainvoke(
{"text": "abc"}, config={"configurable": {"additional_field": "123"}}
)
'321cba'
下一步
您现在已经了解了如何在工具中配置和流式传输事件。接下来,查看以下指南,了解有关使用工具的更多信息
您还可以查看一些更具体的工具调用用法
- 构建使用工具的链和 Agents
- 从模型获取结构化输出