智能体把用户身份证号写进了日志:链路脱敏怎么做 一位用户通过智能客服反映订单异常在描述过程中把身份证号和银行卡号一并发了过去。智能体正确理解了问题给出了处理方案对话顺利结束。但一个月后的合规审计发现这段对话的原始记录被完整写进了请求日志、对话历史表和检索缓存——身份证号、银行卡号全部以明文形式存储。日志随后被同步到数据仓库用于运营分析敏感信息随之扩散到多个下游系统。审计给出的结论不是模型泄露了隐私而是日志链路没有做脱敏。排查时开发团队发现系统的日志写入分散在多个环节。请求进入时记录一次原始输入知识库检索时把用户问题写入检索日志工具调用时把请求参数写入调用日志对话结束时把完整对话写入历史表。每个环节各自决定记录什么内容没有任何环节在写入前对敏感信息做识别和脱敏。模型在生成回答时确实没有回显身份证号但日志里早就存了好几份。很多团队遇到这类问题习惯从模型侧找原因反复调整系统指令要求模型不要输出敏感信息。这当然必要但它解决的是回答里有没有敏感信息的问题而不是日志里有没有敏感信息的问题。模型处理是瞬时的回答一旦生成就过去了但日志是持久的——写入磁盘、同步到仓库、保留数月甚至数年。也有团队在最终输出环节加了一道过滤把回答里的身份证号替换成星号但这道过滤只作用于给用户看的回复日志里的原始数据纹丝未动。还有团队依赖人工定期审查日志但对话量一大人工审查覆盖不过来等发现问题时敏感信息往往已经流转了很久。问题可以从三个方面拆解。一类是日志默认记录完整请求和响应缺少数据最小化策略。系统的日志写入以完整记录为默认行为——请求日志保存完整的用户输入对话历史表存储完整的多轮对话工具调用日志记录完整的请求参数和返回结果。这种全量记录的出发点是排查问题方便但它假设了所有日志内容都不包含敏感信息。当用户输入中包含身份证号、银行卡号时这些信息随着完整记录的策略被原样写入了多个日志存储点。数据最小化的原则是日志默认只记录排查问题所必需的结构化字段——请求标识、时间戳、会话标识、调用的工具名称、响应状态码、处理耗时、异常类型——而不是默认保存完整的请求体和响应体。完整内容只在明确标记为业务会话记录的存储点保留且保留前必须经过脱敏处理。另一类是日志写入分散在各业务环节缺少集中出口。每个业务环节自己决定记什么、怎么记、往哪里写没有任何环节在写入前对敏感信息做识别和脱敏。请求日志、检索日志、工具调用日志、对话历史表各自写入不同的存储互不协调。日志链路是一条单向管道一旦写入就很难追溯清理。缺少集中日志出口意味着脱敏处理只能在每个写入点各自实现——有的做了有的没做有的做了但规则不一致。业务代码可以直接调用存储接口把原始内容落盘绕过任何脱敏处理。还有一类是日志转存与下游消费未阻断。日志不仅留在本系统还会被同步到数据仓库、报表系统、模型训练数据采样、应用性能监控、消息队列、备份归档甚至外部对接平台。同步任务通常按整表搬运不会逐条检查内容。原始日志里的敏感信息一旦进入下游系统就会随报表导出、分析样本、监控查询等途径继续扩散。下游系统的访问权限和保留策略往往比源系统更宽松敏感信息在下游更难控制。针对用户敏感信息在请求、检索、工具、对话存储和下游分析系统中扩散的问题青山不语AI工作室采用「敏感信息识别与日志链路脱敏」框架通过数据最小化、集中日志出口、入口令牌化、写入前脱敏、下游出口校验和持续审计控制敏感数据的持久化范围。起始环节是数据最小化与集中日志出口。日志默认只记录排查问题所必需的结构化字段——请求标识、时间戳、会话标识、调用的工具名称、响应状态码、处理耗时、异常类型。完整的请求体和响应体不作为默认记录项只有在业务会话记录这类明确需要保留对话内容的存储点才写入且写入前必须经过脱敏处理。所有日志写入统一通过集中日志组件业务代码不能直接调用存储接口落盘必须通过日志组件的统一出口。日志组件在出口处执行脱敏处理确保任何写入存储的日志都经过脱敏链路不存在绕过出口直接写原始数据的旁路。第二环节是入口令牌化与受控视图。用户输入进入处理链路时系统通过正则规则和模式匹配识别各类敏感信息身份证号、手机号、银行卡号、护照号、统一社会信用代码等。识别完成后系统不只是生成字符位置标记而是在内存中生成两份视图一份是原始受控视图包含完整的原始内容只交给确实需要原值的授权业务组件——比如需要用身份证号调用外部身份核验接口的组件——用完即销毁模型推理、知识库检索、对话状态管理和普通工具调用默认使用另一份脱敏链路视图不接触原始值。脱敏链路视图中敏感信息已被令牌化——身份证号替换为受控令牌原始值与令牌的映射关系存入独立的加密令牌库。令牌还原只允许预先批准的业务用途和安全审计用途——比如身份核验组件按批准用途通过令牌库还原原值后立即调用外部接口安全审计角色在调查泄露事件时按审计流程还原——普通日志查询、运营分析和模型推理不能解析令牌。令牌库设置用途限定、权限限定和保留时间限定到期自动销毁。脱敏链路视图随输入在后续环节中传递日志、缓存、追踪标签、消息队列中流转的都是这份脱敏后的版本。对于规则无法覆盖的敏感信息系统结合命名实体识别做补充检测。第三个环节是写入前扫描与分层治理。入口令牌化在链路入口处理了用户输入中的敏感信息但链路中后段仍有新增敏感信息的来源——工具返回结果中可能包含用户档案信息检索结果中可能召回包含敏感字段的文档片段多个非敏感片段拼接后可能重新组成完整的敏感记录。写入前扫描作为入口令牌化之后的二次防线在每个日志写入点对即将落盘的内容做敏感信息扫描检测入口令牌化未覆盖的新增字段、工具返回内容和拼接产物。脱敏策略按日志类型分层运营日志——请求日志、检索日志、工具调用日志——原则上不可还原敏感信息直接用类型标签替换比如身份证号替换为身份证号已脱敏字样不可逆业务会话记录——对话历史表——需要保留对话上下文用于排查采用受控令牌化敏感信息替换为令牌需要还原时通过令牌库按权限访问但令牌库的保留时间和访问权限有严格限制。两类日志分开治理不能混用同一套脱敏策略。扫描和脱敏处理发生在日志写入动作之前确保落盘的数据已经是脱敏后的内容。第四个环节是缓存键与追踪标签隔离。用户输入中的敏感信息不仅出现在日志里还会进入检索缓存键、分布式追踪标签和消息队列消息键。如果缓存键直接包含用户的身份证号缓存键本身就成了一条明文敏感信息记录。系统规定敏感字段不能直接进入缓存键、追踪标签和消息键——缓存键使用脱敏链路视图中的令牌或请求标识生成追踪标签使用会话标识和环节名称生成消息键使用业务标识生成。对于检索结果和工具返回内容中包含的敏感信息系统在写入缓存时执行与日志相同的脱敏处理。这一环节的关键在于脱敏不只作用于对话日志而是覆盖所有可能持久化敏感信息的存储点包括容易被忽略的键值位置。第五个环节是下游出口校验与删除传播。日志同步到下游系统前系统在每个出口增加校验数据仓库同步前对同步内容做敏感信息扫描报表查询接口在返回结果前做脱敏处理模型训练数据采样前对样本做敏感信息检测确认无残留才进入训练集应用性能监控中记录的请求和响应片段做脱敏处理消息队列中流转的日志消息在发布前做脱敏备份归档的日志在压缩存储前做脱敏外部对接平台的数据导出前做敏感信息检测和脱敏。下游出口校验的目的是防止源系统脱敏后、下游消费时再次引入敏感信息——比如报表查询关联了多张表关联结果可能重新拼出完整的敏感记录。同步建立数据血缘追踪——每条日志同步到哪些下游系统、在各系统的存储位置和派生关系都有记录便于追溯扩散范围。各下游系统按数据分类设置保留期限到期自动清理。源数据删除时触发删除传播——源系统删除一条日志记录后数据仓库中对应的同步行、报表中基于该记录生成的派生数据、训练样本中包含该记录的样本、备份中该记录的副本同步标记删除或失效避免源系统已清理但下游副本长期残留。第六个环节是失败安全与持续审计。脱敏系统本身可能失败——识别规则未覆盖某种格式、令牌库不可用、集中日志组件异常。失败时系统的默认行为是只记录非敏感元数据请求标识、时间戳、失败原因禁止降级为明文落盘——宁可这条日志信息不全也不能让敏感信息以明文形式写入存储。系统定期扫描已存储的日志数据用与入口侧相同的识别规则检测是否有敏感信息漏网扫描发现的疑似泄露记录生成告警工单安全团队确认后决定是清理还是补充脱敏规则。审计日志记录每次脱敏处理的执行情况——哪个环节处理了多少条记录、采用了哪种脱敏策略、有没有处理失败的异常——不包含敏感信息内容只记录处理动作的元数据。敏感信息脱敏的核心矛盾是排查问题需要完整上下文和合规要求敏感信息不落盘之间的冲突。完全不脱敏的日志链路会显著增加泄露和合规风险——敏感信息一旦随日志同步到下游系统扩散范围往往超出源系统的控制能力。数据最小化让日志默认只记录必需字段集中日志出口让所有写入经过统一脱敏链路入口令牌化让敏感信息在进入链路时就被替换为受控令牌写入前扫描作为二次防线检测入口未覆盖的新增内容分层治理让运营日志和会话记录按各自需求脱敏下游出口校验与删除传播防止脱敏后的数据在下游被重新拼接或长期残留失败安全确保脱敏系统异常时不会降级为明文。所有面向用户的智能体——不论对话话题是否明显涉及个人信息——都应具备这套基础防线因为用户在自由输入中携带敏感信息的可能性始终存在缺少防线的链路在用户输入敏感信息时会显著增加泄露和合规风险。