You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于LangChain API实现LLM调用前机密文本自动脱敏的可行性咨询

问题解答

1. 基于LangChain实现机密文档脱敏并保留上下文

完全可以通过LangChain实现这类需求,核心思路是结合实体识别(NER)与文档转换链,在定位敏感实体后进行替换,同时依托LangChain的上下文管理能力最小化语义丢失:

  • 先通过LangChain集成的NER工具(如spaCy、Hugging Face Transformers模型)识别文档中的敏感实体(公司名、员工ID、客户信息等)
  • 自定义DocumentTransformer类,对识别出的实体做统一替换(比如将"XX科技"替换为"Company A"),替换时会为同一类实体分配固定占位符,避免上下文逻辑混乱
  • 将脱敏后的文档传入LLM交互链,LangChain的文档拆分与上下文窗口管理会确保关键语义逻辑不丢失

示例代码片段:

from langchain.document_transformers import BaseDocumentTransformer
from langchain.text_splitter import RecursiveCharacterTextSplitter
import spacy

# 加载中文NER模型
nlp = spacy.load("zh_core_web_sm")

class SensitiveEntityTransformer(BaseDocumentTransformer):
    def transform_documents(self, documents, **kwargs):
        transformed_docs = []
        org_counter = 0
        person_counter = 0
        for doc in documents:
            doc_text = doc.page_content
            doc_nlp = nlp(doc_text)
            replacements = {}
            for ent in doc_nlp.ents:
                if ent.label_ == "ORG" and ent.text not in replacements:
                    replacements[ent.text] = f"Company {chr(ord('A') + org_counter)}"
                    org_counter += 1
                elif ent.label_ == "PERSON" and ent.text not in replacements:
                    replacements[ent.text] = f"Person {chr(ord('A') + person_counter)}"
                    person_counter += 1
            # 执行替换
            for orig, repl in replacements.items():
                doc_text = doc_text.replace(orig, repl)
            doc.page_content = doc_text
            transformed_docs.append(doc)
        return transformed_docs

# 使用示例
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
docs = text_splitter.create_documents(["你的机密文档内容"])
transformer = SensitiveEntityTransformer()
desensitized_docs = transformer.transform_documents(docs)

2. 具备语义理解能力的通用脱敏方法

除LangChain方案外,还有两类基于语义理解的通用脱敏方法:

  • 基于Embedding的敏感实体匹配:将文档文本片段与内部敏感实体库的Embedding做相似度比对,识别同义词、别名形式的敏感内容,再进行统一替换。这种方法能覆盖NER模型未收录的自定义敏感实体
  • 掩码语言模型(MLM)辅助替换:用BERT、RoBERTa等MLM模型,将敏感实体替换为掩码[MASK]后,生成语义连贯的占位符(或直接用固定占位符),确保替换后上下文逻辑通顺。示例代码:
from transformers import pipeline

mlm_pipeline = pipeline("fill-mask", model="bert-base-chinese")
sensitive_text = "XX科技将于2024年发布新一代产品"
# 直接用固定占位符替换,避免模型生成不确定内容
desensitized_text = sensitive_text.replace("XX科技", "Company A")
  • 零样本实体识别+Embedding泛化:用零样本NER模型识别自定义类型的敏感实体,结合Embedding确保同类实体替换的一致性,比如所有客户名称统一替换为"Client X",同时保留实体在句子中的语法角色

内容的提问来源于stack exchange,提问作者R007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:55:30