Skip to content

Cotix-AI/Brocade

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

Framework Badge Language Badge Paradigm Badge Stars Badge

Brocade: 为您的 AI 数据流编织无形的水印

在数据洪流中保持清醒,确保每一份AI生成的内容都可追溯、可验证。


Important

核心提示: Brocade 是一个即插即用的反向代理服务器,它在您与大型语言模型(如 OpenAI API)交互时,以静默方式为所有生成的文本嵌入不可见的数字水印,旨在解决 AI 生态系统中的数据溯源和模型近亲繁殖(Inbreeding)问题。

目录



✨ 项目简介

随着大型语言模型(LLM)的普及,一个严峻的问题浮出水面:模型坍塌(Model Collapse)。当模型开始使用由其他AI(甚至其自身)生成的数据进行训练时,其能力会逐渐退化,多样性减少,最终陷入平庸的泥潭。这种“数据近亲繁殖”污染了我们的信息生态,威胁着下一代AI的健康发展。

本项目介绍了 Brocade(织锦),一个旨在应对这一挑战的工具。它通过在 LLM 的输出中嵌入不可见的数字水印,为每一份AI生成的内容打上一个无法轻易移除的“出生证明”。

Brocade 重新定义了我们与 LLM API 的交互方式,将其视为一个可信管道,而非一个简单的请求-响应黑盒。它协同了高性能网络代理的透明性与零宽字符编码的隐蔽性,创造出一个轻量、强大且对用户无感的溯源系统,能够在不影响正常使用的情况下,保护数据生态的纯净。



💡 核心设计理念

Brocade 不仅仅是另一个API工具,它代表了我们保障AI生成内容(AIGC)可追溯性的根本性转变。我们相信,AI生态的长远发展需要一个机制,能够清晰地区分人类原创内容与AI生成内容

"当AI开始吞噬自己的尾巴时,进步便戛然而止。我们的使命是为数据流打上标记,让未来有源可溯。"

本设计旨在无缝集成到现有的工作流中,以最小的侵入性提供最大的保障,确保开发者和用户在享受AI便利的同时,不会无意中成为“数据污染”的传播者。



🧠 架构核心

透明代理与实时注入Brocade 架构的基石,也是整个水印流程的“单一事实来源”。该机制将系统从复杂的客户端改造或SDK依赖中解放出来。

核心功能: 系统通过一个协调的代理服务来工作,该服务扮演着几个关键角色:

  1. 请求监听者: 忠实地接收所有符合 OpenAI API 格式的请求。
  2. 安全转发者: 将用户的请求安全、可靠地转发至上游真实的 LLM 服务。
  3. 实时织锦师: 在收到上游服务的响应(无论是流式还是非流式)后,实时地、逐块地将包含来源信息的水印“编织”进返回的文本中。

因此,用户最终收到的每一个字,都可能携带了关于其来源、生成时间和用户标识的隐形元数据,这一切都在毫秒之间完成,对终端用户完全透明。



🧩 核心组件详解

Brocade 中的不同组件各司其职,通过明确的劳动分工,共同实现一个整体性的智能流程。

组件一:反向代理引擎 (角色:守门人)

  • 目标: 成为用户和上游 LLM 服务之间的可靠中间人,处理所有网络流量。
  • 实现: 基于高性能的 FastAPIHTTPX 库构建。它异步处理所有传入的 /v1/chat/completions 请求,完美支持流式(stream=True)和非流式响应,确保高并发和低延迟。

组件二:水印注入器 (角色:织锦师)

  • 目标: 将结构化的溯源信息(如时间戳、用户ID、签名)转换为不可见的零宽字符,并以特定规律插入到文本中。
  • 实现: WatermarkInjector 类负责此任务。它首先将元数据编码为二进制字符串,再映射为零宽字符。然后,它以可配置的间隔(例如,每5个可见字符)将一个水印字符注入文本流,既保证了水印的鲁棒性,又最大限度地减少了对原文的干扰。

组件三:水印验证器 (角色:鉴定师)

  • 目标: 提供一个简单可靠的方式来检测和解码文本中隐藏的水印。
  • 实现: verify_watermark 函数是注入器的逆向操作。它扫描文本,提取所有零宽字符,将其重新组合成二进制数据,解码为原始元数据,并通过校验签名来验证其真实性。这提供了一个独立的端点(/v1/verify-watermark)用于验证。


🔄 工作流程

Brocade 的运作遵循一个清晰、透明的代理流程:

  1. 接收 (Receive): 用户的应用程序将原本发往 OpenAI API 的请求,转而发送到 Brocade 代理服务器。
  2. 生成水印 (Generate): Brocade 收到请求后,立即根据请求信息(如自定义的用户ID)和当前时间戳,生成一个独一无二的签名水印。
  3. 转发 (Forward): Brocade 将原始请求(不含水印)安全地转发给配置好的上游 LLM API 服务。
  4. 注入 (Inject): 当上游服务返回响应时,Brocade 会拦截响应数据。
    • 对于流式响应,它会逐块(chunk-by-chunk)解析 Server-Sent Events (SSE),找到文本内容并实时插入水印字符。
    • 对于非流式响应,它会在完整的 JSON 响应中找到最终文本内容,并一次性注入水印。
  5. 返回 (Return): Brocade 将带有隐形水印的响应数据返回给用户的应用程序。整个过程对用户应用层完全透明,无需修改任何代码逻辑。


🚀 独特优势与创新

尽管一些平台尝试在元数据层面或通过修改模型输出来实现溯源,但这些方法往往要么容易被剥离,要么会影响生成质量。

这正是 Brocade 旨在深入探索和解决的方向。

Brocade 通过其独特的 透明代理与零宽字符注入架构,提供了以下优势:

  • 极高的兼容性: 无需修改客户端代码。只需将请求的域名指向 Brocade 服务器,即可立即启用。
  • 鲁棒且隐蔽: 零宽字符在大多数文本编辑器和网页中都是不可见的,并且在复制粘贴过程中通常会被保留,使得水印难以被无意中移除。
  • 可验证的来源: 内置的签名机制确保了水印的完整性,防止伪造或篡改。任何人都可以使用验证端点来确认文本是否由您的系统生成。
  • 流式原生支持: 专为现代流式对话应用设计,即使在打字机效果的场景下,水印也能平滑、实时地注入。


🛠️ 快速开始

1. 先决条件

  • Python 3.8+
  • Pip
  • 一个可用的 OpenAI 兼容 API 密钥及服务地址

2. 安装

# 克隆仓库
git clone https://github.com/cotix-ai/Brocade.git
cd Brocade

# 安装依赖
pip install -r requirements.txt

3. 配置

  1. 复制 .env.example 文件为 .env
  2. .env 文件中填入你的上游 LLM 服务配置:
    # 你想要代理的目标 OpenAI 兼容服务器地址
    UPSTREAM_URL=https://api.openai.com/v1
    
    # 访问上游服务器所需的 API Key
    UPSTREAM_API_KEY="sk-..."
    

4. 运行代理服务器

uvicorn main:app --host 0.0.0.0 --port 8000 --reload

您的 Brocade 水印代理现在已在 http://localhost:8000 上运行。

5. 使用和验证

将您应用中请求 OpenAI 的地址从 https://api.openai.com 改为 http://localhost:8000。现在所有通过该代理的响应都将自动带有水印。

发送请求示例:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer dummy-key" \
  -H "x-user-id: my-test-user" \
  -d '{
    "model": "gpt-5",
    "messages": [{"role": "user", "content": "你好!"}],
    "stream": false
  }'

验证水印: 复制上述请求返回的文本内容,并通过以下方式验证:

curl http://localhost:8000/v1/verify-watermark \
  -H "Content-Type: application/json" \
  -d '{
    "text": "【这里粘贴带有水印的文本】"
  }'


🤝 如何贡献

我们欢迎并鼓励对 Brocade 项目的贡献!如果您有任何想法、建议或发现错误,请随时提交 Pull Request 或创建 Issue。

About

🤔️ Marking content generated by artificial intelligence

Topics

Resources

License

Stars

Watchers

Forks

Languages