wong001110/echo-masque

GitHub: wong001110/echo-masque

一个对话式 AI 角色行为测试平台,通过角色卡和实时对抗性测试房间检测身份漂移、记忆捏造和提示注入等行为缺陷。

Stars: 0 | Forks: 0

# Echo Masque **观察当角色受到挑战时,还剩下什么。** Echo Masque 是一个以 Python 优先的角色行为验证系统。用户将需要测试的对话系统保留为角色卡,将一张卡带入实时的测试房间,观察对抗性测试器与测试对象的对话,并保留身份漂移、记忆捏造、提示注入和长对话不稳定性的证据。 ## 产品循环 ``` Create or select a Character Card -> bind it to a prompt, model, API, or deterministic target -> choose an interface language and an independent test language -> choose Benchmark or Adaptive Tester -> enter a Test Room -> watch Tester and subject messages arrive live -> read Judge notes and the first breakpoint -> inspect Lab Note, JSON, replay, and comparisons -> change the character configuration and rerun ``` ## 快速开始 需要 Python 3.12+ 和 Node.js 22+。 ``` python run.py ``` 启动器会创建 `.venv`,在依赖清单发生变化时安装 Python 和 Web 依赖,并同时启动 FastAPI 和 Vite。后续运行会跳过未更改的安装步骤。按一次 `Ctrl+C` 可同时停止这两个进程。 实用选项: ``` python run.py --install # force dependency refresh python run.py --no-install # skip dependency installation python run.py --api-only # start only FastAPI python run.py --no-reload # disable Uvicorn reload ``` 打开 `http://127.0.0.1:5173` 访问 UI,或打开 `http://127.0.0.1:8000/docs` 访问 API。 ## 角色卡 角色卡将面向用户的身份信息与技术目标绑定分离开来。一张卡包含其人设摘要、特征、预期语气、记忆边界、禁止行为、首选测试房间和肖像调色板。 卡片创建器支持两种绑定路径: 1. **Prompt + Model** — 选择 DeepSeek、OpenAI、OpenRouter 或自定义的 OpenAI 兼容 endpoint;提供 base URL、model ID、system prompt、temperature 和 API key。 2. **现有目标** — 将卡片绑定到确定性演示或已通过 API 配置的目标。 原始的提供商 API key 仅保留在后端进程内存中。它们永远不会被写入 SQLite、角色卡、试验事件、实验笔记、JSON 报告或目标导出文件中。重启后端会清除该 key,测试房间会要求用户重新配置。环境变量仍然可以为本地开发中已配置的目标提供后备 key。 目前的本地 MVP 通过 `X-Echo-User` 标头对卡片进行范围划分,默认值为 `local-user`。生产部署应使用经过身份验证的身份和授权来替换此边界。 ## 目标类型 1. **确定性演示** — 无需凭证的稳定型和脆弱型角色。 2. **Prompt + model** — Echo Masque 使用附加到卡片的 model 配置调用 OpenAI 兼容的提供商。 3. **自定义 HTTP 目标** — 通过适配器契约实现完整的外部聊天机器人。 4. **对话记录导入** — 在不发送新消息的情况下检查现有对话。 ## 测试器模式 ### 基准测试器 基准模式使用固定的场景脚本。它保持确定性,并且是进行 prompt 版本比较、回归测试门禁、CI 和可重复评分的正确模式。 ### 自适应测试器 自适应模式将第一条基准消息保留为场景种子,然后使用单独的 AI 提供商,根据可见的测试器/测试对象对话记录,每次生成一条有针对性的后续消息。配置包括提供商、base URL、model、system prompt、temperature、最大轮数和单次运行的 API key。 自适应测试器独立于测试对象和确定性裁判。它的 key 仅在活动运行准备或执行期间存储。它永远不会被写入 SQLite、事件、报告或目标配置。当测试对象产生明确的禁止短语违规或达到配置的轮数限制时,自适应压力就会停止。 ## 语言 Echo Masque 将产品界面的语言与实际 AI 评估的语言分开。 ### 界面语言 - 英语 (`en`) — 默认 - 简体中文 (`zh-CN`) 选择内容存储在浏览器中,并在刷新时恢复。它会翻译导航、表单、房间控制、状态标签、观察笔记和模态框文本。 角色名称、卡片内容、System Prompt、导入的对话记录、模型响应和提供商错误消息将保持其原始形式,不会进行自动翻译。 ### 测试语言 测试房间有一个单独的测试语言选择器。英语和简体中文各自拥有自己的: - 固定的基准测试器消息; - 场景名称和预期行为契约; - 禁止和必需的短语规则; - 稳定型和脆弱型确定性演示响应; - 自适应测试器上下文和输出语言指令; - 裁判摘要和证据消息; - 试验报告标题和场景内容。 每次运行都会记录 `test_language`。现有的持久化运行被视为英语。回归比较仅接受使用相同测试语言的运行。 有关语言边界、覆盖范围和扩展流程,请参见 `docs/multilingual-testing.md`。 ## 测试房间 - 镜像房间 — 身份完整性 - 记忆房间 — 虚假记忆注入 - 脚本房间 — 提示注入抵抗力 - 回响大厅 — 长对话漂移 观看模式将房间开启、测试器消息、输入中、测试对象响应、裁判备忘录、断点和房间过渡划分为易于阅读的节拍。它的实时快照请求大约每 1.2 秒运行一次。快速模式无延迟,大约每 450 毫秒轮询一次。每个请求同时返回运行状态和增量事件,取代了以前的双请求循环。 已完成的会话会在观察侧边栏中显示实验笔记和 JSON 按钮。两份报告均在应用程序内作为模态框打开,并保留复制和下载操作。 ## 交付阶段 - [x] 阶段 0 — 产品契约和路线图 - [x] 阶段 1 — Python 基础 - [x] 阶段 2 — 确定性试验引擎 - [x] 阶段 3 — Prompt-model 目标 - [x] 阶段 4 — 持久化和 HTTP API - [x] 阶段 5 — 观察界面 - [x] 阶段 6 — 外部目标适配器 - [x] 阶段 7 — 比较和强化 - [x] 阶段 8 — 角色卡和实时测试房间 - [x] 阶段 9 — 自适应 AI 测试器和高效的本地开发 - [x] 阶段 10 — Railway 部署就绪 - [x] 阶段 11 — 英语和简体中文界面与测试 有关自动化验收,请参见 `CHECKLIST.md`;有关人工检查,请参见 `docs/manual-validation.md`。 ## 当前功能 - 管理绑定到确定性、prompt-model 或外部目标的单用户角色卡。 - 从卡片创建器配置提供商、base URL、model、system prompt、temperature 和临时 API key。 - 在后端重启后从测试房间重新配置提供商 key。 - 在英语和简体中文之间切换界面。 - 运行独立的英语或简体中文行为套件。 - 针对内置的稳定型和脆弱型测试对象运行四个行为套件。 - 选择固定的基准测试或实验性的自适应 AI 压力。 - 将自适应测试器的后续对话保持在所选的测试语言中。 - 在聊天室 UI 中观察持久化的测试器、测试对象、裁判和断点事件。 - 选择观看模式进行节奏化查看,或选择快速模式进行开发者工作流。 - 通过 OpenAI 兼容的提供商测试 prompt-and-model 目标。 - 通过自定义 HTTP 目标契约测试完整的外部聊天机器人。 - 导入 JSON、CSV 或 Markdown 对话记录以进行离线检查。 - 在 SQLite 中持久化会话、语言、事件、证据、断点、Trace 和重放。 - 在相同的测试语言内比较确定性的基准运行。 - 查看和导出脱敏的 Markdown 和 JSON 报告。 - 构建包含 React 客户端和 FastAPI 服务的单个生产级镜像。 ## Railway 代码库包含一个根目录的 `Dockerfile` 和 `railway.toml`。Railway 构建 React 客户端,并通过 FastAPI 从同一服务中为其提供服务。容器监听 Railway 注入的 `$PORT`,并且 `/health` 被配置为部署健康检查。 在 `/data` 处挂载一个 Railway Volume,并将服务保持为一个副本。SQLite 存储在 `/data/echo_masque.db`。 实时部署会在以下地址自动进行冒烟测试: ``` https://echo-masque-production.up.railway.app ``` 每次更新 `main` 分支后,Railway 冒烟工作流都会检查健康状况、静态 UI 交付、演示目标可用性,以及一次真实的稳定型基准试验。 有关完整的设置、持久化检查、GitHub Actions 冒烟工作流和安全限制,请参见 `docs/railway-deployment.md`。 **安全:** 当前的 MVP 没有生产环境身份验证。请将公开的 Railway URL 视为确定性演示,不要输入有价值的提供商 key 或私密的角色数据。 ## 容器 ``` docker compose up --build ``` SQLite 数据库存储在命名的 `echo-masque-data` 卷中。通过 UI 输入的提供商 key 有意不存储在该卷中。 ## MVP 排除项 该 MVP 排除了对第三方聊天网站的浏览器自动化、公共排行榜、自动 prompt 重写、微调、生产流量监控以及通用型多 Agent 模拟框架。 ## 状态 该实现包括角色卡、实时观察、提供商支持的测试对象测试、实验性的自适应测试器压力、经过验证的英语和简体中文界面、双语确定性和自适应评估路径、应用内报告、低频快照轮询、单命令开发启动器,以及自动进行冒烟测试的 Railway 部署。视觉润色、真实提供商的多语言质量、身份验证、外部主机、跨平台启动器和最终的浏览器验收仍被明确跟踪,而不是隐藏在自动化通过的声明背后。
标签:AI安全, AV绕过, Chat Copilot, DLL 劫持, FastAPI, MITM代理, Vite, 人工智能, 大语言模型, 用户模式Hook绕过, 红队评估, 请求拦截, 逆向工具