[开源推广]AI时代,我们如何保护个人隐私数据? 防止地址,密码等个人隐私泄露给AI,我做了通过修改HTTP请求保护隐私的Go库

2026-04-29 08:221阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:

  • 我的帖子已经打上 开源推广 标签:
  • 我的开源项目完整开源,无未开源部分:
  • 我的开源项目已链接认可 LINUX DO 社区:
  • 我帖子内的项目介绍,AI生成、润色内容部分已截图发出:
  • 以上选择我承诺是永久有效的,接受社区和佬友监督:

以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出


首先贴一下项目的地址和效果展示:

Github: GitHub - XyzenSun/llm-privacy-masker: llm-privacy-masker go库 ,以语义变量替换prompt中的隐私数据,通过增量请求生成原始值与语义化变量的双射表提升效率,保护与AI对话时的隐私数据 · GitHub

效果展示2492×1152 219 KB

此外,为了方便快速体验,我用AI糊了个前端页面并且提供了docker部署,( BUG估计是不少,但只是为了能有个前端页面能快速体验一下工作流程)
使用下面的docker run启动后 访问 127.0.0.1/login.html (有点BUG ,直接访问127.0.0.1不会自动跳转登录)使用 APP_AUTHTOKEN登录后,点击左下角的配置,到配置页面设置Trusted LLM 和上游LLM后即可体验

docker run -d \ --name llm-privacy-guard \ -p 19999:19999 \ -e APP_PORT=19999 \ -e APP_AUTHTOKEN=your-token-here \ -e DB_TYPE=sqlite \ -e DB_DSN=/app/data/llm_guard.db \ -e APP_PROJECT_ROOT=/app \ -v llm-privacy-data:/app/data \ ghcr.io/xyzensun/llm-privacy-guard:latest

背景/引言

在现在这个大AI时代,想到一个古老的问题: 很多白嫖的 LLM 按照协议默许共享数据给大模型做训练,很多付费的也训练,一些说不会拿去训练的,还是会偷偷拿去训练,一些API中转站也是可以看到我们和AI对话的内容的。其实拿去训练AI还能接受,最怕的是拿去清洗数据后,拿到我们的隐私数据的,某天正在和家里和AI激情对话的时候,被中转站或者其他平台,拿到自己的银行卡号CVV,短信传来扣款短信还是挺吓人的。

虽然我们可以通过在发消息给AI前手动去除隐私消息,但不是所有人都有这个意识,而且这也很麻烦,并不”优雅“ ,更极致的办法:本地部署AI,但这东西实在门槛太高了,部署个小模型,效果又不好,部署个大模型,太贵了,而且维护也贵,更适合需要极致的数据安全的情况下,同时也有个问题,只能部署开源模型。

既然本地部署模型行不通,那怎么办?

在开发这个项目前,其实我一开始想的和大家看到也差不多,我搞个中间件,拦截和LLM API的请求,我直接一个正则表达式,把常用的隐私数据类型去掉,或者说用 ToolGood.Words这种状态机搞的敏感词词库,把隐私数据去除,换成 * * * * * ,或者直接做哈希加密,或者其他可逆加密再还原,但这两种方法,都有些我不能接受的缺点:

  1. 加密后的数据,AI 还能理解你的意思并实现你的目的吗?

以“生成 SSH 登录命令”为例,对比原始 Prompt 与 MD5 加密后的效果:

  • Prompt:帮我写一个 SSH 登录命令,IP 为 123.123.123.123,密码为 123456。 AI回复:

image1008×191 18.5 KB

  • Prompt:帮我写一个 SSH 登录命令,IP 为 CCDD8D3D940A01B2FB3258C059924C0D,密码为 E10ADC3949BA59ABBE56E057F20F883E。 AI回复

image1015×197 23.3 KB

怎么说呢,确实是保护隐私了,但我的目的也实现不了了,我还是得手动编辑命令,但我只想 Ctrl C V

  1. 识别率问题:一个非常典型的例子了,怎么拿词库,正则去识别一个地址是不是敏感信息? 这个我甚至举不出来一个可行的例子, 总不能正则出现 xx省xx市就算敏感信息

llm-privacy-masker 的解决方案: 可信 LLM + 云端 LLM 我既要又要!

546×186 10.8 KB

在本项目中,定义了两个角色:

  1. 可信 LLM:本地部署的小模型,或你信任的提供商(例如你相信Google Vertex AI的承诺,数据不存储,立即删除),他们不需要做复杂的任务,只需要识别敏感信息,一些小模型做这个任务就非常出色
  2. 云端 LLM:我们平时使用的 LLM API 提供商,明确说明会使用用户数据,或未明确说明是否使用用户数据,或说明不会使用用户数据,但用户无法验证。 他们来干复杂的任务

通过以下的工作流程,达成既要有又要的需求:

  1. 可信 LLM 中,将对话中的隐私数据进行遮蔽,并且是进行语义化遮蔽,例如 13999999999 → {$PHONE_1} ,云端LLM就能理解这是个手机号,但不知道具体的手机号 ,在本地形成一个 敏感信息原始值:敏感信息的语义化变量的映射,同时支持持久化会话,可以指定一个,SessionId,这个映射表会长期存在,此后每次只处理新对话
  2. 将遮蔽后的对话数据发送给云端 LLM
  3. 云端 LLM 返回结果后,根据敏感信息的语义化变量的映射将结果中的敏感信息的语义化变量还原为原始值,返回给用户,用户对话无感(也不完全,会变慢

经过这样的流程,我们的隐私数据基本上是会被保护的差不多了,不能说百分百吧,毕竟这个可信LLM,也有识别能力的差异,还有就是提示词的设计也很关键,目前项目的提示词设计的比较简陋,还需要完善。

好处说完了,坏处呢?

软件工程没有银弹,本项目也一样,下面说一说这个项目目前的劣势,或者说是这种处理方法的劣势吧:

1.理解能力限制:可信 LLM 理解能力有限,替换的语义可能不准确。

2.限制非流式:目前项目是强制使用非流式,我还没有想出流式处理的好办法,把流式响应收集起来再做处理,感觉意义似乎不大?

3.云端 LLM 对语义化变量的疑惑: 云端 LLM 看到 {IP_ADDR} 会认为这是一个变量,可能会在回复中说“我看到你给的 IP 地址是一个变量”。我想到的解决办法是在云端 LLM 的 System Prompt 中进行说明:{$} 为变量,你无需提示我需要对他进行替换处理,在你的输出中,只需要输出对应的变量即可,不用为我解释。” 但,AI的上下文非常关键,我个人是推崇上下文极度的纯净的,我是不太喜欢这种方式的。

4.本地部署,算力有限,处理时间长: 既然要可信任,最佳的方法就是本地部署,但是,我们本地的算力是有限, 上下文,等得越久,这部分我的解决方法是设计的是指定一个SessionId,长期保存敏感信息原始值:敏感信息的语义化变量的映射,此后每次只处理新对话,但这个方式,也只适合自己根据此库再开发网关甚至客户端了,目前三家的协议标准里,请求中并没有指定会话的字段。 此外,小模型指令遵循能力差也是个问题

5.不适合CC等AI工具使用: 虽然项目的设计上做了处理,不会修改system prompt和工具调用,但是这东西在面对超长上下文(CC一次请求可能平均就100K Token了,很多小模型最大上下文都没这么大)时,有很多问题

具体的技术细节与用法:

请参阅 Github-核心实现思路 (还是以前写的,后面会迁到新仓库

Go库(也是未来的主仓库 ):llm-privacy-masker/README.md at main · XyzenSun/llm-privacy-masker · GitHub (应该是一股Java味… 这个在努力习惯go的风格)

项目的未来

其实开发这个项目并且发出来推广,更多的是希望这个思路能对大家有帮助**,希望能有一个好用的成熟的保护与AI对话时的隐私的工具。**

目前这个项目采用的方式是, 直接对HTTP请求和响应做修改,我认为这是最底层的修改方式了。但这样,开发者用起来还是麻烦,用这个项目,就意味着要放弃oai,anthropic等的官方库。目前我设想的是,做一个中间件网关,以后请求AI时,把地址改成 https://本项目.com/上游地址 ,目前我也在做这样一个项目,这样可以继续用官方库。

网友解答:
--【壹】--:

这样也是个好办法,不过这样对可信LLM的要求就更高了,我试一下这种办法


--【贰】--:

没有什么是加一层解决不了的,如果有,就再加一层


--【叁】--:

前排支持一下,果然设计上就没有啥事加一层解决不了的,如果有那就再加一层


--【肆】--:

如果換成一個虛假的呢,比如
你傳的是127.0.0.1:7890,處理後變成192.168.1.1:6844傳給雲端LLM;雲端返回後再解析回127.0.0.1:7890;
對於一些AK、SK啥的,也隨機替換成等長等格式的字符,雲端LLM返回結果以後再替換回來


--【伍】--:

维护一个规则表,不在表内的所有数字、字母都+1位再请求接口(0→1;9→0;a→b;z→a),接口返回结果后再减一位;或者搞一个好计算方便还原的规则,这样好像就不需要很好的模型了,但这没有考虑到会不会有其他风险

问题描述:

本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:

  • 我的帖子已经打上 开源推广 标签:
  • 我的开源项目完整开源,无未开源部分:
  • 我的开源项目已链接认可 LINUX DO 社区:
  • 我帖子内的项目介绍,AI生成、润色内容部分已截图发出:
  • 以上选择我承诺是永久有效的,接受社区和佬友监督:

以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出


首先贴一下项目的地址和效果展示:

Github: GitHub - XyzenSun/llm-privacy-masker: llm-privacy-masker go库 ,以语义变量替换prompt中的隐私数据,通过增量请求生成原始值与语义化变量的双射表提升效率,保护与AI对话时的隐私数据 · GitHub

效果展示2492×1152 219 KB

此外,为了方便快速体验,我用AI糊了个前端页面并且提供了docker部署,( BUG估计是不少,但只是为了能有个前端页面能快速体验一下工作流程)
使用下面的docker run启动后 访问 127.0.0.1/login.html (有点BUG ,直接访问127.0.0.1不会自动跳转登录)使用 APP_AUTHTOKEN登录后,点击左下角的配置,到配置页面设置Trusted LLM 和上游LLM后即可体验

docker run -d \ --name llm-privacy-guard \ -p 19999:19999 \ -e APP_PORT=19999 \ -e APP_AUTHTOKEN=your-token-here \ -e DB_TYPE=sqlite \ -e DB_DSN=/app/data/llm_guard.db \ -e APP_PROJECT_ROOT=/app \ -v llm-privacy-data:/app/data \ ghcr.io/xyzensun/llm-privacy-guard:latest

背景/引言

在现在这个大AI时代,想到一个古老的问题: 很多白嫖的 LLM 按照协议默许共享数据给大模型做训练,很多付费的也训练,一些说不会拿去训练的,还是会偷偷拿去训练,一些API中转站也是可以看到我们和AI对话的内容的。其实拿去训练AI还能接受,最怕的是拿去清洗数据后,拿到我们的隐私数据的,某天正在和家里和AI激情对话的时候,被中转站或者其他平台,拿到自己的银行卡号CVV,短信传来扣款短信还是挺吓人的。

虽然我们可以通过在发消息给AI前手动去除隐私消息,但不是所有人都有这个意识,而且这也很麻烦,并不”优雅“ ,更极致的办法:本地部署AI,但这东西实在门槛太高了,部署个小模型,效果又不好,部署个大模型,太贵了,而且维护也贵,更适合需要极致的数据安全的情况下,同时也有个问题,只能部署开源模型。

既然本地部署模型行不通,那怎么办?

在开发这个项目前,其实我一开始想的和大家看到也差不多,我搞个中间件,拦截和LLM API的请求,我直接一个正则表达式,把常用的隐私数据类型去掉,或者说用 ToolGood.Words这种状态机搞的敏感词词库,把隐私数据去除,换成 * * * * * ,或者直接做哈希加密,或者其他可逆加密再还原,但这两种方法,都有些我不能接受的缺点:

  1. 加密后的数据,AI 还能理解你的意思并实现你的目的吗?

以“生成 SSH 登录命令”为例,对比原始 Prompt 与 MD5 加密后的效果:

  • Prompt:帮我写一个 SSH 登录命令,IP 为 123.123.123.123,密码为 123456。 AI回复:

image1008×191 18.5 KB

  • Prompt:帮我写一个 SSH 登录命令,IP 为 CCDD8D3D940A01B2FB3258C059924C0D,密码为 E10ADC3949BA59ABBE56E057F20F883E。 AI回复

image1015×197 23.3 KB

怎么说呢,确实是保护隐私了,但我的目的也实现不了了,我还是得手动编辑命令,但我只想 Ctrl C V

  1. 识别率问题:一个非常典型的例子了,怎么拿词库,正则去识别一个地址是不是敏感信息? 这个我甚至举不出来一个可行的例子, 总不能正则出现 xx省xx市就算敏感信息

llm-privacy-masker 的解决方案: 可信 LLM + 云端 LLM 我既要又要!

546×186 10.8 KB

在本项目中,定义了两个角色:

  1. 可信 LLM:本地部署的小模型,或你信任的提供商(例如你相信Google Vertex AI的承诺,数据不存储,立即删除),他们不需要做复杂的任务,只需要识别敏感信息,一些小模型做这个任务就非常出色
  2. 云端 LLM:我们平时使用的 LLM API 提供商,明确说明会使用用户数据,或未明确说明是否使用用户数据,或说明不会使用用户数据,但用户无法验证。 他们来干复杂的任务

通过以下的工作流程,达成既要有又要的需求:

  1. 可信 LLM 中,将对话中的隐私数据进行遮蔽,并且是进行语义化遮蔽,例如 13999999999 → {$PHONE_1} ,云端LLM就能理解这是个手机号,但不知道具体的手机号 ,在本地形成一个 敏感信息原始值:敏感信息的语义化变量的映射,同时支持持久化会话,可以指定一个,SessionId,这个映射表会长期存在,此后每次只处理新对话
  2. 将遮蔽后的对话数据发送给云端 LLM
  3. 云端 LLM 返回结果后,根据敏感信息的语义化变量的映射将结果中的敏感信息的语义化变量还原为原始值,返回给用户,用户对话无感(也不完全,会变慢

经过这样的流程,我们的隐私数据基本上是会被保护的差不多了,不能说百分百吧,毕竟这个可信LLM,也有识别能力的差异,还有就是提示词的设计也很关键,目前项目的提示词设计的比较简陋,还需要完善。

好处说完了,坏处呢?

软件工程没有银弹,本项目也一样,下面说一说这个项目目前的劣势,或者说是这种处理方法的劣势吧:

1.理解能力限制:可信 LLM 理解能力有限,替换的语义可能不准确。

2.限制非流式:目前项目是强制使用非流式,我还没有想出流式处理的好办法,把流式响应收集起来再做处理,感觉意义似乎不大?

3.云端 LLM 对语义化变量的疑惑: 云端 LLM 看到 {IP_ADDR} 会认为这是一个变量,可能会在回复中说“我看到你给的 IP 地址是一个变量”。我想到的解决办法是在云端 LLM 的 System Prompt 中进行说明:{$} 为变量,你无需提示我需要对他进行替换处理,在你的输出中,只需要输出对应的变量即可,不用为我解释。” 但,AI的上下文非常关键,我个人是推崇上下文极度的纯净的,我是不太喜欢这种方式的。

4.本地部署,算力有限,处理时间长: 既然要可信任,最佳的方法就是本地部署,但是,我们本地的算力是有限, 上下文,等得越久,这部分我的解决方法是设计的是指定一个SessionId,长期保存敏感信息原始值:敏感信息的语义化变量的映射,此后每次只处理新对话,但这个方式,也只适合自己根据此库再开发网关甚至客户端了,目前三家的协议标准里,请求中并没有指定会话的字段。 此外,小模型指令遵循能力差也是个问题

5.不适合CC等AI工具使用: 虽然项目的设计上做了处理,不会修改system prompt和工具调用,但是这东西在面对超长上下文(CC一次请求可能平均就100K Token了,很多小模型最大上下文都没这么大)时,有很多问题

具体的技术细节与用法:

请参阅 Github-核心实现思路 (还是以前写的,后面会迁到新仓库

Go库(也是未来的主仓库 ):llm-privacy-masker/README.md at main · XyzenSun/llm-privacy-masker · GitHub (应该是一股Java味… 这个在努力习惯go的风格)

项目的未来

其实开发这个项目并且发出来推广,更多的是希望这个思路能对大家有帮助**,希望能有一个好用的成熟的保护与AI对话时的隐私的工具。**

目前这个项目采用的方式是, 直接对HTTP请求和响应做修改,我认为这是最底层的修改方式了。但这样,开发者用起来还是麻烦,用这个项目,就意味着要放弃oai,anthropic等的官方库。目前我设想的是,做一个中间件网关,以后请求AI时,把地址改成 https://本项目.com/上游地址 ,目前我也在做这样一个项目,这样可以继续用官方库。

网友解答:
--【壹】--:

这样也是个好办法,不过这样对可信LLM的要求就更高了,我试一下这种办法


--【贰】--:

没有什么是加一层解决不了的,如果有,就再加一层


--【叁】--:

前排支持一下,果然设计上就没有啥事加一层解决不了的,如果有那就再加一层


--【肆】--:

如果換成一個虛假的呢,比如
你傳的是127.0.0.1:7890,處理後變成192.168.1.1:6844傳給雲端LLM;雲端返回後再解析回127.0.0.1:7890;
對於一些AK、SK啥的,也隨機替換成等長等格式的字符,雲端LLM返回結果以後再替換回來


--【伍】--:

维护一个规则表,不在表内的所有数字、字母都+1位再请求接口(0→1;9→0;a→b;z→a),接口返回结果后再减一位;或者搞一个好计算方便还原的规则,这样好像就不需要很好的模型了,但这没有考虑到会不会有其他风险