OpaquePrompts x LangChain: Enhance the privacy of your LangChain application with just one code change

OpaquePrompts x LangChain: 只需一行代码更改,即可增强 LangChain 应用程序的隐私性

4 分钟阅读

编者按:这篇博文是与 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 构建的应用程序的工作方式如下:

  1. OpaquePrompts 服务接收构造的提示。
  2. OpaquePrompts 使用最先进的模型识别提示中的敏感信息。
  3. OpaquePrompts 通过加密所有已识别的个人信息来清理提示,然后再将清理后的提示返回给 LLM 应用程序。
  4. LLM 应用程序将其选择的清理后的提示发送给 LLM 提供商。
  5. LLM 应用程序从 LLM 提供商处收到响应,其中包含后清理标识符。
  6. LLM 应用程序将响应发送给 OpaquePrompts,后者通过解密先前加密的个人信息来对响应进行反清理。
  7. 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