背景:公有大模型以其优秀的泛化能力、低廉的价格获得非常多用户的青睐,但在RAG场景下,不可避免的会向大模型提交相关 chunk ,有些企业会担心提交的数据被当成训练数据集被大模型厂商利用、造成数据泄露。这里不讨论这种想法的重要程度和合理性,以工程化的方式来对提交给大模型的 chunk 进行脱敏处理。

方案一:自定义函数替换敏感数据

示例文本
今天的主人公是大清帝国的CEO–乾隆皇帝(身份证号码 123456199001011234)。乾隆皇帝的一大爱好就是在文物字画上题诗,盖章。其实这一举动非常令人厌恶,因为这样就破坏了文物本身的整体美。比如有一幅画《富春山居图》,这幅画的空白都让乾隆皇帝占满了。他在画上写了很多首诗,还盖了很多方他的印,甚至连没有点墨的山也不放过。好在他视为珍宝的《富春山居图》是幅赝品,他的这次看走眼为后世留下了一幅“干净”的名作。乾隆皇帝的印章有八百多个,最大的和手掌一样大,两只手一起握都握不住。想必如果用它在画上盖印的话,肯定会非常影响画的美观。他一生共创作了四万多首诗,其中大部分都是在一些名人的字画上。就犹如现代视频中的弹幕,因为那些字画只要一翻开会发现乾隆皇帝提的字,如同密密麻麻的子弹一样。我们甚至可以称乾隆皇帝为弹幕的鼻祖了。但是,乾隆很多奇珍异宝、名人字画都是从民间搜集来的,有些相当于明抢。虽说这样做很不对,但是也间接得保护住了不少珍贵的文物。乾隆皇帝把文物都集中起来,这对后世的文物鉴赏做出了重大的贡献,也为后来的爱新觉罗·溥仪偷文物维持生计做了一个铺垫。1799年,乾隆皇帝永离开了紫禁城,去往了另外一个世界,享年八十九岁。

函数代码片段

import re
 
def replace_sensitive_data(text):
    # 示例人名和公司名词典(根据需求扩展)
    id_pattern = r"(?<!\d)\d{6}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx](?!\d)"
    name_dict = ["乾隆皇帝", "乾隆"]
    company_dict = ["大清帝国有限公司", "大清"]
    product_dict = ["富春山居图"]
    # 1. 替换身份证号码
    text = re.sub(id_pattern, "[ID]", text)
    # 2. 替换人名
    for name in name_dict:
        text = re.sub(fr"{name}", "[NAME]", text)
    # 3. 替换公司名
    for company in company_dict:
        text = re.sub(fr"{company}", "[COMPANY]", text)
    # 4. 替换产品名
    for product in product_dict:
        text = re.sub(fr"{product}", "[PRODUCT]", text)
    return text

智能体工作流编排示例
在这里插入图片描述
提交给大模型的脱敏数据

今天的主人公是[COMPANY]帝国的CEO–[NAME](身份证号码 [ID])。[NAME]的一大爱好就是在文物字画上题诗,盖章。其实这一举动非常令人厌恶,因为这样就破坏了文物本身的整体美。比如有一幅画《[PRODUCT]》,这幅画的空白都让[NAME]占满了。他在画上写了很多首诗,还盖了很多方他的印,甚至连没有点墨的山也不放过。好在他视为珍宝的《[PRODUCT]》是幅赝品,他的这次看走眼为后世留下了一幅“干净”的名作。[NAME]的印章有八百多个,最大的和手掌一样大,两只手一起握都握不住。想必如果用它在画上盖印的话,肯定会非常影响画的美观。他一生共创作了四万多首诗,其中大部分都是在一些名人的字画上。就犹如现代视频中的弹幕,因为那些字画只要一翻开会发现[NAME]提的字,如同密密麻麻的子弹一样。我们甚至可以称[NAME]为弹幕的鼻祖了。但是,[NAME]很多奇珍异宝、名人字画都是从民间搜集来的,有些相当于明抢。虽说这样做很不对,但是也间接得保护住了不少珍贵的文物。[NAME]把文物都集中起来,这对后世的文物鉴赏做出了重大的贡献,也为后来的爱新觉罗·溥仪偷文物维持生计做了一个铺垫。1799年,[NAME]永离开了紫禁城,去往了另外一个世界,享年八十九岁。

工作流执行详情
在这里插入图片描述
优势:返回速度快,用户体验好,准确度高,成本低

劣势:灵活度不够,需定义字典,维护复杂

方案二:私有小模型替换敏感数据

  • 小模型规模规模推荐大于 Qwen3-8b,不推荐使用深度思考模式,速度太慢,提示词加上 /no_think 标签。

示例文本

今天的主人公是大清帝国的CEO–乾隆皇帝(身份证号码 123456199001011234)。乾隆皇帝的一大爱好就是在文物字画上题诗,盖章。其实这一举动非常令人厌恶,因为这样就破坏了文物本身的整体美。比如有一幅画《富春山居图》,这幅画的空白都让乾隆皇帝占满了。他在画上写了很多首诗,还盖了很多方他的印,甚至连没有点墨的山也不放过。好在他视为珍宝的《富春山居图》是幅赝品,他的这次看走眼为后世留下了一幅“干净”的名作。乾隆皇帝的印章有八百多个,最大的和手掌一样大,两只手一起握都握不住。想必如果用它在画上盖印的话,肯定会非常影响画的美观。他一生共创作了四万多首诗,其中大部分都是在一些名人的字画上。就犹如现代视频中的弹幕,因为那些字画只要一翻开会发现乾隆皇帝提的字,如同密密麻麻的子弹一样。我们甚至可以称乾隆皇帝为弹幕的鼻祖了。但是,乾隆很多奇珍异宝、名人字画都是从民间搜集来的,有些相当于明抢。虽说这样做很不对,但是也间接得保护住了不少珍贵的文物。乾隆皇帝把文物都集中起来,这对后世的文物鉴赏做出了重大的贡献,也为后来的爱新觉罗·溥仪偷文物维持生计做了一个铺垫。1799年,乾隆皇帝永离开了紫禁城,去往了另外一个世界,享年八十九岁。

工作流编排示例

在这里插入图片描述
简化图

在这里插入图片描述
提交给大模型的脱敏数据

今天的主人公是COMPANY的CEO–NAME(身份证号码 ID)。NAME的一大爱好就是在文物字画上题诗,盖章。其实这一举动非常令人厌恶,因为这样就破坏了文物本身的整体美。比如有一幅画《PRODUCT》,这幅画的空白都让NAME占满了。他在画上写了很多首诗,还盖了很多方他的印,甚至连没有点墨的山也不放过。好在他视为珍宝的《PRODUCT》是幅赝品,他的这次看走眼为后世留下了一幅“干净”的名作。NAME的印章有八百多个,最大的和手掌一样大,两只手一起握都握不住。想必如果用它在画上盖印的话,肯定会非常影响画的美观。他一生共创作了四万多首诗,其中大部分都是在一些名人的字画上。就犹如现代视频中的弹幕,因为那些字画只要一翻开会发现NAME提的字,如同密密麻麻的子弹一样。我们甚至可以称NAME为弹幕的鼻祖了。但是,NAME很多奇珍异宝、名人字画都是从民间搜集来的,有些相当于明抢。虽说这样做很不对,但是也间接得保护住了不少珍贵的文物。NAME把文物都集中起来,这对后世的文物鉴赏做出了重大的贡献,也为后来的爱新觉罗·溥仪偷文物维持生计做了一个铺垫。1799年,NAME永离开了紫禁城,去往了另外一个世界,享年八十九岁。

提示词示例

敏感词替换(小模型)

已知信息:
{{知识库检索.data}}
 
回答要求:
- 请替换所有身份证号码为"ID",如把“123456199001011234”替换成"ID"
- 请替换所有人物名为"NAME",如把“乾隆皇帝”替换成"NAME"
- 请替换所有朝代名为"COMPANY",如把“大清帝国”替换成"COMPANY"
- 请替换所有商品名为"PRODUCT",如把“富春山居图”替换成"PRODUCT"
- 你只需替换 身份证号码、皇帝名、朝代名 和 画名,替换好后根据已知信息原样返回即可,不要展示推理过程

提取关系字典(小模型)

已知信息:
{{知识库检索.data}}
 
工作要求:
- 请替换所有身份证号码为"{ID}",如把“123456199001011234”替换成"{ID}"
- 请替换所有人物名为"{NAME}",如把“乾隆皇帝”替换成"{NAME}"
- 请替换所有朝代名为"{COMPANY}",如把“大清帝国”替换成"{COMPANY}"
- 请替换所有商品名为"{PRODUCT}",如把“富春山居图”替换成"{PRODUCT}"
 
回答要求:
- 不要展示推理过程
- 仅返回替换对应关系字典

公有大模型

已知信息:
{{敏感词替换(小模型).answer}}
 
问题:
{{开始.question}}

封装答案(小模型)

回答要求:
- 请不要返回推理过程
- 直接返回最终答案即可
 
已知信息:
{{公有大模型.answer}}
 
关系字典:
{{提取关系字典(小模型).answer}}
 
问题:
请根据关系字典的对应关系,变量替换成实际值

问答效果

在这里插入图片描述
工作流执行详情

在这里插入图片描述
优势:灵活性高,适应性强

劣势:准确度中,搭配小模型使用,返回速度慢

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐