AI PLAY玩法更新持续收录
← 回到更新流

2026-09-17 · 原文发布日

提示词先脱敏再调LLM,回复后还原PII

免费n8n模板演示一种隐私保护模式:含姓名、邮箱、电话、病历号、卡号的客服提示词,先发给自托管的Enterprise PII Guardrails服务,把敏感实体替换成替代token并保存映射;LLM只处理脱敏后的文本;最后把模型回复连同映射发回Guardrails还原成原始信息。需要自托管n8n、安装社区节点n8n-nodes-piiguardrails并本地运行Guardrails服务(默认localhost:8000),把示例中的模拟LLM步骤换成真实模型节点即可接入自己的流程。

原文要点

n8n模板库收录的免费模板:手动触发一条含姓名、邮箱、电话、病历号、卡号的客服提示词,先调用Enterprise PII Guardrails把敏感实体替换为替代token并返回token到原值的映射,再经过模拟LLM步骤生成引用token的回复,最后把回复和映射发回Guardrails还原PII。前置条件是自托管n8n、安装社区节点n8n-nodes-piiguardrails、本地运行Guardrails服务(默认http://localhost:8000),并在n8n里配置指向该端点的凭据。

这次做成什么

在自托管n8n里搭一条'脱敏→调LLM→还原'的三段流程:客服文本进LLM前先把姓名、邮箱、电话等换成token,LLM永远看不到真实PII,回复出来后再映射回原文。本站设计一套用模拟LLM节点的练习,跑通后再换成真实模型。

准备什么

  • 自托管的n8n实例(社区节点云版n8n通常装不了,需自托管)
  • 已安装社区节点n8n-nodes-piiguardrails
  • 本地运行Enterprise PII Guardrails服务且API可达(默认http://localhost:8000)
  • n8n中已创建指向Guardrails端点的API凭据
  • 一条用于测试的虚构客服文本(不要用真实客户数据)

具体怎么做

  1. 启动Guardrails服务并验证可达

    在终端按原文给出的方式安装并启动(例如pip install piiguardrails && piiguardrails start),然后用浏览器或curl访问http://localhost:8000确认服务有响应;若端口被占用,改端口并记下新地址,后面凭据要用同一个地址。

  2. 在n8n创建Guardrails凭据

    打开n8n的Credentials页面,新建Enterprise PII Guardrails API凭据,把endpoint填为上一步确认的地址(默认http://localhost:8000),保存后在后续节点里选择它。凭据字段的具体名称以节点界面为准,本站未逐项核对。

  3. 搭第一段:手动触发+构造测试提示词

    拖入Manual Trigger节点,接一个Set或Code节点,写入一条虚构客服文本,字段名例如prompt,内容用下方artifacts里的示例,含姓名、邮箱、电话、病历号、卡号各一个,全部用虚构值。

  4. 搭第二段:脱敏节点

    添加Enterprise PII Guardrails社区节点,操作选mask(脱敏),输入字段绑定上一步的prompt,凭据选第二步创建的。运行一次,确认输出里出现两类内容:替换后的sanitized文本(实体变成token)和token到原值的mapping对象,把mapping整体保留到后续节点。

  5. 搭第三段:模拟LLM+还原

    先用一个Set节点模拟LLM:写一段引用了sanitized文本中token的回复字符串(见示例)。之后再接一个Guardrails节点,操作选unmask(还原),输入为模拟回复+保存的mapping。运行整个流程,最终输出应是token被还原成原始姓名、邮箱等的完整文本。跑通后把Set节点换成真实LLM节点(如任意聊天模型节点),保持mask在LLM之前、unmask在LLM之后的顺序不变。

可直接复制的材料

虚构客服测试文本(Set节点用)

本站独立编写的虚构练习数据,所有姓名、号码均为假值,直接可用

客户王丽(邮箱wangli-demo@example.com,电话138-0000-1234)来电反映:病历号MR-2026-88415对应的住院账单中,尾号为4111 1111 1111 1111的信用卡被重复扣款两次,请核实并回电说明退款进度。

模拟LLM回复的构造规则说明

token具体格式取决于Guardrails服务实际返回,本站未实测,请以运行结果为准

在Set节点里手动写回复时,不要抄原始PII,而是引用脱敏输出中的token。做法:先运行mask节点,查看输出sanitized文本里每个实体被换成什么token(例如形如[NAME_1]、[EMAIL_1]的占位符,具体格式以Guardrails实际输出为准),然后把回复写成引用这些token的句子,再原样保留mapping字段传给unmask节点。

核对清单提示词(自查用)

本站编写,用于人工核对每段输出,可粘贴到任意模型

你是流程自查助手。我给你三段内容:1)原始客服文本;2)脱敏后发给LLM的文本;3)还原后的最终回复。请逐项检查:a. 第2段中是否还残留任何真实姓名、邮箱、电话、病历号、卡号,如有请指出;b. 第3段与第1段的PII是否完全一致地还原,有无错字或错位;c. 第3段是否还残留未还原的token。只输出'通过'或逐项列出问题。

输入与输出示例

本站虚构演示,token格式为示意,非实际运行结果

输入

原始文本:客户王丽(邮箱wangli-demo@example.com,电话138-0000-1234),病历号MR-2026-88415,卡号4111 1111 1111 1111被重复扣款。脱敏后发给LLM的文本形如:客户[NAME_1](邮箱[EMAIL_1],电话[PHONE_1]),病历号[MRN_1],卡号[CARD_1]被重复扣款。模拟LLM回复:已登记[NAME_1]的退款申请,将向[EMAIL_1]发送确认函并回电[PHONE_1]。

对应输出

还原后最终文本:已登记王丽的退款申请,将向wangli-demo@example.com发送确认函并回电138-0000-1234。同时mapping应包含[NAME_1]→王丽、[EMAIL_1]→wangli-demo@example.com、[PHONE_1]→138-0000-1234、[MRN_1]→MR-2026-88415、[CARD_1]→4111 1111 1111 1111共5条对应关系。

做完检查这些

  • mask节点输出的sanitized文本中搜不到原始姓名、邮箱、电话、病历号、卡号中的任何一个
  • mapping对象里token数量与原文中的实体数量一致,且每个token都有对应原值
  • unmask节点输出与原始文本的PII完全一致,且不再含任何token占位符
  • 把Set节点换成真实LLM节点后,流程仍能跑通且LLM输入侧看不到真实PII

容易卡住的地方

  • 社区节点n8n-nodes-piiguardrails需要自托管n8n并允许安装社区节点,n8n Cloud通常不支持
  • Guardrails服务没启动或端口不对时,mask节点会直接报连接错误,先单独验证localhost:8000可达
  • LLM回复如果改写了token(比如加空格、改大小写),unmask将无法还原,提示模型原样保留占位符
  • mapping必须在流程内完整传递,丢失映射就无法还原
  • 不要把真实客户PII放进测试文本,练习只用虚构数据

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Redact and restore PII in OpenAI prompts with Enterprise PII Guardrails
原作者
Vishal Prajapati
原始发布日期
2026-09-16T17:56:13.614Z
来源
https://n8n.io/workflows/19658