如何在保护数据的同时不破坏大语言模型:护栏过滤器内部原理
OpenAI
Anthropic
本文详细介绍了构建护栏过滤器(一种用于大语言模型请求的数据保护层)所面临的工程挑战。文章强调了在流式响应中屏蔽和取消屏蔽个人数据、处理工具调用以及支持多种API格式的复杂性。作者分享了在为聊天补全和消息API实现过滤器的过程中获得的见解。
文章讨论了一种防护栏过滤器的开发,该过滤器旨在保护与大型语言模型交互中的个人数据。虽然使用正则表达式查找个人数据相对简单,但真正的挑战在于如何在应用程序与模型之间集成该过滤器,同时不破坏交互。过滤器必须处理普通请求、流式传输、工具调用,保持消息结构,并保留元数据。为了处理同一数据类型出现的多个实例,过滤器使用映射表,为每个不同的值分配唯一的占位符,如<PHONE_1>。由于大语言模型是无状态的,过滤器必须在每次请求时重新处理整个对话历史。在流式模式下,响应以数据块的形式到达,占位符可能在多个数据块之间被拆分;过滤器使用缓冲区来累积足够的数据后再尝试解除遮盖。它还会处理响应中的各个字段,包括内容、推理和工具调用参数,确保在所有字段中正确还原数据。仅针对聊天补全(Chat Completions)的流式处理,实现就增长到了约1500行代码。此外,由于消息API(Messages API)采用基于事件的格式,支持它需要单独的实现,这使得总测试代码超过了4000行。
来源: Habr — хаб ИИ —
原文
