Newshot
Account

用本地代理把姓名、邮箱和电话挡在 LLM 提示词之外

AI summary

有开发者提出用本地代理在请求发往 LLM 前拦截并处理提示词中的个人信息。该方案的目标是让姓名、邮箱和电话号码不进入模型提示词。

Translation(model translation, not the source's own text)

swapback

你的数据始终属于你。一个本地代理,在提示词到达 LLM 提供商之前,将姓名、邮箱、电话和密钥替换为占位符,并在回复中将其还原。

终端:pip install swapback,然后 swapback demo。应用发送一个虚构的姓名、邮箱和电话;模型收到 PERSON_1、EMAIL_1 和 PHONE_1 占位符;应用取回原始值。PASS。
终端:pip install swapback,然后 swapback demo。应用发送一个虚构的姓名、邮箱和电话;模型收到 PERSON_1、EMAIL_1 和 PHONE_1 占位符;应用取回原始值。PASS。

快速开始


        pip install swapback
swapback demo
swapback init && swapback-proxy
      

需要 Python 3.11 或更高版本。swapback demo 使用虚构数据运行一个假模型:无需密钥,无需网络。代理监听 127.0.0.1:8787;将你的客户端指向它,其他什么都不用改:


        from openai import OpenAI
client = OpenAI(
    base_url="http://127.0.0.1:8787/v1")
      

为真实提供商进行配置

swapback init 会写入 swapback.yaml 和 known.yaml。将绝不能到达提供商的姓名、邮箱、电话和 ID 放入 known.yaml(或使用 swapback known init --vcf contacts.vcf 从联系人导出文件构建),在 swapback.yaml 中设置 upstream:,运行 swapback check-config,然后启动 swapback-proxy。完整步骤(包括 OpenRouter 和 Anthropic 的 base URL)见指南。

兼容

  • OpenClaw:已通过一个提供商配置块完成端到端测试(2026.10.7);其 exec、web_fetch、web_search、browser 和 message 工具默认保留占位符。配置。
  • Hermes Agent:每天运行在维护者自己的 Hermes agent 之前,处理真实的邮件和日历流量。
  • 任何 OpenAI 兼容客户端:OpenAI Chat Completions 和 Responses(官方 SDK、OpenRouter、LiteLLM 客户端)。设置 base URL,其他什么都不用改。
  • Anthropic Messages:Anthropic SDK,普通和流式,包括 tool_use。
  • Claude Code 和 Codex CLI 的工具策略配方:框架配方。

工作原理


        flowchart LR
    A["Your app or agent"] -- "Email Jane Q Doe" --> S["swapback (127.0.0.1:8787)"]
    S -- "Email «PERSON_1»" --> P["LLM provider"]
    P -- "Hi «PERSON_1» ..." --> S
    S -- "Hi Jane Q Doe ..." --> A
      
  • 替换。你自己列表中的值会按其常见拼写形式进行匹配(大小写、分隔符、转义、嵌套 JSON);检测器会捕获你未列出的电话、邮箱、卡号、IBAN 和 API 密钥。每一项都会变成一个带类型的占位符。
  • 检查。出口复检会再次扫描出站请求。如果列表中任何内容仍然存在,或清洗失败,请求将被阻止(503)。它采用失败关闭策略。
  • 还原。回复中的占位符会被逐字节精确还原,包括普通回复、流式回复以及工具调用参数。网络、shell 和发送类工具调用会保留占位符,除非你允许该工具,因此被提示注入的 web_fetch 无法将你的邮箱带出去。

无需下载模型,也没有任何概率性成分:精确匹配加模式,约 5,900 行 Python,3 个依赖。你可以用 swapback selftest 自行重新运行泄漏测试(虚构数据,7 条请求路径,约 12 秒)。

文档

主题位置
为什么选择 swapback、安装、代理、工具调用、配置、钩子docs/guide.md
它无法捕获的内容,以及安全说明docs/limits.md
泄漏测试、性能、检测评分docs/testing.md
与 PasteGuard、Maskit、Veil、piighost 和 Kiji 的比较docs/comparison.md
每个版本的变更CHANGELOG.md
报告漏洞SECURITY.md

项目事实:Python 3.11+,约 5,900 行(302 KB),3 个依赖(PyYAML、phonenumbers、pyahocorasick),stdlib HTTP 服务器,MIT。

开发


        pip install -e ".[test]"
pytest -q                      # the full suite, including the holdout score as a regression floor
python evals/run_holdout.py    # the detection score table in docs/testing.md (--misses lists the cases not caught)
python examples/smoke.py       # end-to-end: mock upstream + proxy, plain and streamed
      

写成 {{NAME_ab12cd34}} 形式的值是真实值的占位符。请完全按照书写形式使用它们,无论是在回复中还是在工具调用中:它们会在任何内容运行之前被填入真实值。不要要求验证它们,也不要用示例替换它们。

内置规则集位于 swapback/vendor(见 THIRD_PARTY_NOTICES.md);tools/build_vendor.py 会重新生成 Presidio 模式。

见 CONTRIBUTING.md 和变更日志。

Roadmap

  • 恢复 Anthropic Messages 流式响应。已在 0.1.1 完成。
  • 将所列值的分隔符与大小写变体(NBSP、.、_、-、%20、全大写)归并到同一个占位符下。已在 0.1.1 完成。
  • 恢复 OpenAI Responses API 流式响应。已在 0.3.0 完成。
  • 在可能外发数据的工具调用中保留占位符。已在 0.3.0 完成。
  • 从联系人导出文件构建已知值文件。已在 0.3.0 完成(swapback known init)。
  • 可选的、可插拔的 NER,用于识别从未列出的姓名,默认关闭。
  • 更多国家身份证件与地址模式,附带基于合成数据的测试。
  • 发布到 PyPI。已完成:pip install swapback。
  • 用于支出上限、本地回退和用量统计的钩子。已在 0.4.0 完成。
  • 公开的、可重复运行的泄漏测试。已在 0.4.2 完成(swapback selftest)。

欢迎提出想法和 pull request;对于较大的改动,请先开 issue。

License

MIT,见 LICENSE。内置规则数据:gitleaks(MIT)和 Microsoft Presidio(MIT),见 THIRD_PARTY_NOTICES.md。

The translation is machine-generated and individual terms may be off. Nothing is rewritten or cut; the original is authoritative.

Published by HN AI
This site only summarises and aggregates; copyright stays with the original author. Headlines and summaries follow the source — where they differ, the original wins.
Read the original ↗