编者按:这篇博文是与 Opaque 团队合作撰写的。随着越来越多的应用程序投入生产,我们听到越来越多的团队谈论数据隐私解决方案。Opaque 与 LangChain 的无缝集成确保您用户提示中的个人信息将对 LLM 提供商隐藏,只需几行代码即可实现。
我们一直收到用户越来越多的反馈,他们希望对 LLM 提供商(无论是 OpenAI、Anthropic、Cohere 还是其他提供商)保持数据私密性,原因有很多:
- 对数据保留的担忧
- 对 LLM 提供商查看输入数据的担忧
- 对提供商使用用户输入来持续训练 LLM 的担忧
- 对 LLM 泄露模型训练数据的担忧
对于各种规模的公司(从企业到小型初创公司)以及各个垂直领域的 LLM 应用程序构建者来说,情况也是如此。我们交谈过的一家初创公司正在构建一个知识管理解决方案,用于总结存储的文档,但一个潜在客户,一家律师事务所,不信任第三方提供商处理他们的法律文件。另一家公司正在构建一个应用程序,根据用户数据生成有针对性的广告,但必须严格控制个人用户信息如何被第三方提供商共享和使用。一家大型银行希望实现风险评估自动化,这在其手动形式中,需要对敏感文档进行细致的分析,而这些文档的内容不能以明文形式与第三方提供商共享。
所有这些用例以及更多用例都有一个共同的主题:LLM 应用程序开发人员希望利用 LLM 来操作敏感数据,但由于担心或限制 LLM 提供商查看、处理和存储敏感数据的能力而无法做到这一点。这就是 OpaquePrompts 的用武之地。
OpaquePrompts 简介
OpaquePrompts 充当您选择的 LLM 周围的隐私层。借助 OpaquePrompts,您可以:
- 使用基于自然语言处理 (NLP) 的机器学习自动识别提示中的敏感令牌
- 预处理 LLM 输入,通过清理机制在提示中向 LLM 提供商隐藏敏感输入
- 例如,在提示中,每次出现的名称
John Smith
都将被确定性地替换为PERSON_1
。 - 后处理 LLM 响应,以将所有清理后的实例替换为原始敏感信息
- 例如,在 LLM 响应中,所有
PERSON_1
的实例都将被替换为John Smith
。 - 利用机密计算的力量,以确保即使 OpaquePrompts 服务也看不到底层提示
- OpaquePrompts 在可证明的 可信执行环境中运行,这意味着您可以加密验证即使 Opaque 也看不到 OpaquePrompts 的任何输入。
- 有关 OpaquePrompts 架构和安全保证的更多信息,请参见文档。
- 只需修改 LangChain 应用程序中的一行代码,即可使您的应用程序具有隐私保护功能
- 请参阅此处的示例。
使用 OpaquePrompts 构建的应用程序的工作方式如下:
- OpaquePrompts 服务接收构造的提示。
- OpaquePrompts 使用最先进的模型识别提示中的敏感信息。
- OpaquePrompts 通过加密所有已识别的个人信息来清理提示,然后再将清理后的提示返回给 LLM 应用程序。
- LLM 应用程序将其选择的清理后的提示发送给 LLM 提供商。
- LLM 应用程序从 LLM 提供商处收到响应,其中包含后清理标识符。
- LLM 应用程序将响应发送给 OpaquePrompts,后者通过解密先前加密的个人信息来对响应进行反清理。
- LLM 应用程序将反清理后的响应返回给用户。从用户的角度来看,响应看起来好像原始提示直接发送到了 LLM。
我们使用 GIF 比较了使用和不使用 OpaquePrompts 的 LLM 应用程序工作流程。不使用 OpaquePrompts,提示直接从 LLM 应用程序发送到模型提供商,所有内容都是明文的。

使用 OpaquePrompts,提示首先由 OpaquePrompts 服务安全地清理(并且该服务看不到提示的内容),然后再发送给 LLM 提供商以获得响应。

修改使用 LangChain 构建的聊天机器人以集成 OpaquePrompts
下面,我们将逐步介绍如何修改使用 LangChain 构建的现有基于 GPT 的聊天应用程序,以隐藏发送给 OpenAI 的提示中的敏感信息。
带有 /chat
端点的 vanilla 聊天应用程序的服务器端代码如下所示。
# Full source code can be found here: <https://github.com/opaque-systems/opaqueprompts-chat-server>
class ChatRequest(BaseModel):
history: Optional[list[str]]
prompt: str
class ChatResponse(BaseModel):
response: str
async def chat(
chat_request: ChatRequest,
) -> ChatResponse:
"""
Defines an endpoint that takes in a prompt and sends it to
GPT
Parameters
----------
chat_request : ChatRequest
The request body, which contains the history of the conversation
and the prompt to be completed.
Returns
-------
ChatResponse
The response body, which contains GPT's response to the prompt.
"""
# Actual template and build_memory logic are omitted and can be found in the
# repo linked below
prompt = PromptTemplate.from_template(CHAT_TEMPLATE)
memory = build_memory(chat_request.history)
chain = LLMChain(
prompt=prompt,
llm=OpenAI(),
memory=memory,
)
return ChatResponse(response=chain.run(chat_request.prompt))
要使用 OpaquePrompts,一旦我们从 OpaquePrompts 网站检索到 API 令牌,我们所要做的就是使用 OpaquePrompts
包装传递到 LLMChain
中的 llm
chain = LLMChain(
prompt=prompt,
# llm=OpenAI(),
llm=OpaquePrompts(base_llm=OpenAI()),
memory=memory,
)
您可以在 OpaquePrompts 网站上试用使用 LangChain 和 OpaquePrompts 构建的聊天机器人的工作实现,并在 GitHub 上找到我们从中派生出上述示例的完整源代码。请注意,源代码还包括用于身份验证和显示中间步骤(即,清理后的提示和清理后的响应)的逻辑。
结论
借助 OpaquePrompts,您可以引导启动现有的基于 LangChain 的应用程序,为您的用户增加隐私保护。借助您的 OpaquePrompts + LangChain 应用程序,您用户提示中的任何个人信息都将对 LLM 提供商隐藏,确保您作为 LLM 应用程序开发人员,不必担心提供商的数据保留或处理策略。请查看文档或立即试用 OpaquePrompts Chat!