czarflix/voicegauntlet
GitHub: czarflix/voicegauntlet
VoiceGauntlet 是一个基于 Kiro 规范的语音代理 QA 与红队测试实验室,自动生成对抗场景、运行 ElevenLabs 代理测试、最小化失败复现并导出修复任务。
Stars: 0 | Forks: 0
# VoiceGauntlet
VoiceGauntlet 是一个 **基于 Kiro 构建** 的 QA 与红队测试实验室,专为 ElevenLabs 语音代理设计。它可以读取 Kiro 规范,生成对抗性客户场景,运行真实的 ElevenLabs 代理测试,将失败结果映射到需求 ID,生成可听的测试证据,对失败用例进行最小化复现,并导出 Kiro 加固任务。
## 功能说明
普通的语音代理演示只能证明正常路径的可用性。VoiceGauntlet 专门攻击那些会导致生产环境代理崩溃的边缘路径:愤怒的退款要求、重复扣款、prompt 注入、隐私边界、工具中断、双语呼叫者以及升级转接压力。
最终的产品闭环如下:
```
Kiro spec -> 20 adversarial scenarios -> Live Monitor audio -> ElevenLabs simulation
-> red failure -> Forensic Replay -> shrink failure -> export Kiro task -> rerun green
```
## 真相模型
VoiceGauntlet 确保运行时的标签准确无误:
- **ElevenLabs simulation** 表示 `simulate-conversation`:包含文本对话记录、工具调用和分析的真实代理测试。这并非真实的语音通话。
- **Live agent stream** 表示在已通过身份验证的浏览器中,在本地播放合成呼叫者语音的同时,接收并播放 ElevenLabs Agent WebSocket 音频数据块。
- **Recorded ElevenLabs call** 表示存在真实的对话音频,且有 ElevenLabs 的对话/音频元数据作为支撑。
- **Generated replay** 表示根据真实对话记录生成的双说话人音频。当配置了有效的 API key 时,实时回放路径会使用 ElevenLabs 的 Text to Dialogue 功能。这是可听的证据,但并非录制下来的真实通话。
- **Demo fixture** 表示为评委准备的预先验证过的公开证明制品,而非实时的服务商调用。
在最终的提交界面中,绝对不包含虚假的运行按钮、虚假的音频波形,也不会将服务商的失败伪装成成功。
## Kiro 用法
此代码库使用 Kiro 为 ElevenHacks Hack #5 构建。根目录下的 `.kiro` 目录是产品本身的一部分,而非用于装饰:
- `.kiro/specs/voicegauntlet`:产品需求、设计以及实现任务。
- `.kiro/specs/refundbot-demo`:用于生成对抗性场景的演示代理需求。
- `.kiro/specs/agent-hardening`:从失败运行中导出的修复任务。
- `.kiro/steering`:产品、技术、安全性、UI、演示以及 ElevenLabs API 指南。
- `.kiro/hooks`:规范保存触发的场景重新生成、代理配置冒烟测试、安全扫描以及提交材料打包。
- `.kiro/settings/mcp.json`:Kiro 的本地 MCP server 配置。
- **ElevenLabs Kiro Power**:用作 Kiro 侧的 API 指导层,涵盖模拟、Text to Dialogue、Agent WebSockets 以及对话音频行为。
## 本地 MCP 设置
MCP 包是此代码库的专属私有包,因此 README 不会指向未发布的 `npx @voicegauntlet/mcp` 包。请改用本地工作区的 server:
```
pnpm install
pnpm --silent mcp
```
Kiro 可以使用已提交的 `.kiro/settings/mcp.json`,它会运行:
```
pnpm --silent mcp
```
可用的 MCP 工具:
- `voicegauntlet.generate_suite_from_spec`
- `voicegauntlet.run_smoke_suite`
- `voicegauntlet.shrink_failure`
- `voicegauntlet.export_fix_tasks`
- `voicegauntlet.get_run`
## 快速开始
```
pnpm install
cp .env.example .env.local
pnpm dev
```
打开 `http://localhost:3000/demo` 查看面向评委的公开演示,访问 `http://localhost:3000/app` 进行已通过身份验证的实时运行。实时工作区支持输入 ElevenLabs agent ID,导入 Kiro 需求,启动 Live Monitor 音频,运行 `simulate-conversation`,生成取证回放音频,在 WebSocket 关闭后检查录制通话的元数据,将证据持久化到 Supabase,导出 Kiro 任务,并重新运行选定的实时场景。
## 环境变量
在由真实服务商支撑的实时运行中,必须配置以下变量:
- `ELEVENLABS_API_KEY`
- `ELEVENLABS_AGENT_ID`
- `GROQ_API_KEY`
- `NEXT_PUBLIC_SUPABASE_URL`
- `NEXT_PUBLIC_SUPABASE_ANON_KEY`
- `SUPABASE_SERVICE_ROLE_KEY`
- `SUPABASE_DB_URL`
ElevenLabs 的 key 必须包含执行工作区/用户检查、voices/TTS、Text to Dialogue 以及 Conversational AI 代理读取/运行所需的权限。至少,实时代理流程需要 `convai_read` 以及生成权限。
我们谨慎使用 Groq,因为免费层级的限制可能会触发速率限制。场景优化必须按 spec hash 进行缓存,以并发数 `1` 运行,在有重试元数据时对 `429` 重试一次,并回退到确定性模板。
OpenAI 仅作为可选的遗留后备方案。在最终的演示路径中请勿依赖它。
## 命令
```
pnpm typecheck
pnpm test
pnpm build
pnpm agent:ensure
pnpm demo:audio
pnpm smoke:elevenlabs
pnpm smoke:elevenlabs:ws
pnpm security:scan
pnpm --silent mcp
```
`pnpm agent:ensure` 会创建或复用一个名为 `VoiceGauntlet RefundBot` 的真实 ElevenLabs 代理,并将其 agent ID 写入 `apps/web/.env.local`。`pnpm demo:audio` 会使用 ElevenLabs Text to Dialogue 重新生成公开的验证回放,并在 MP3 旁边写入一份服务商证明清单。`pnpm smoke:elevenlabs:ws` 用于验证签名 URL 的创建、实时的 WebSocket 会话、代理响应音频数据块以及对话元数据的获取。
## 生产环境验证
生产环境 URL:[https://kiro-x-elevent.vercel.app](https://kiro-x-elevent.vercel.app)
于 2026-04-22 IST 验证通过:
- `/api/health` 报告 ElevenLabs、Groq 和 Supabase 已配置完毕。
- 公开的 `/demo` 通过了桌面端和移动端的 Playwright 检查,包括生成的音频回放元数据。
- 公开演示音频以 `audio/mpeg` 格式提供,并返回非零字节数据。
- 已通过身份验证的生产环境 API 验证通过,使用了一个临时的 Supabase 用户:包含签名 URL 创建、合成呼叫者 PCM、ElevenLabs WebSocket 代理音频数据块、实时模拟、Supabase 运行持久化、生成的回放音频以及持久化的 Kiro 任务导出。
- 本地服务商冒烟测试通过:`pnpm smoke:elevenlabs` 和 `pnpm smoke:elevenlabs:ws`。
- 本地门控检查通过:`pnpm typecheck`、`pnpm test`、`pnpm build`、`pnpm security:scan` 以及 `CI=1 pnpm --filter @voicegauntlet/web test:e2e`。
## 演示脚本
目标时长:60-90 秒。
1. 在前五秒内抛出吸引点(Hook)。
2. 展示 `.kiro/specs/refundbot-demo/requirements.md`。
3. 展示 20 个场景的覆盖图。
4. 在 `/app` 中,启动 Live Monitor,让观众听到合成呼叫者音频以及 ElevenLabs 代理音频数据块。
5. 运行严苛测试(gauntlet),并展示一个红色的失败结果。
6. 打开 Forensic Replay(取证回放),展示这是录制的通话还是生成的回放。
7. 展示最小化的失败对话记录和缩减置信度。
8. 导出 `.kiro/specs/agent-hardening/tasks.md`。
9. 重新运行直到变绿(通过),并展示 VoiceGauntlet Certified。
## 社交媒体文案
```
I built VoiceGauntlet for #ElevenHacks #CodeWithKiro.
20 angry AI customers attack your ElevenLabs voice agent before real users do.
It reads your Kiro spec, generates adversarial calls, runs ElevenLabs tests, plays audio evidence, shrinks failures, and exports Kiro fix tasks.
@kirodotdev @elevenlabsio
```
发布到 X、LinkedIn、Instagram 和 TikTok。
## 提交清单
- 采用 MIT 许可证的公开代码库。
- 根目录的 `.kiro` 已被纳入版本控制。
- 公开演示无需登录即可使用。
- 实时模式在配置了服务商的 key 后可以正常工作。
- 至少有一个失败的运行具备可听的双向证据。
- 通过身份验证的 `/app` Live Monitor 能够播放合成呼叫者音频和 ElevenLabs 代理流音频。
- 音频标签真实准确:simulation、recorded call、generated replay 或 demo fixture。
- 生成的回放绝不会被混淆为录制的通话。
- 变绿(通过)的重新运行确实通过了评估程序。
- 没有 secrets 被提交、记录、截屏或打包到浏览器代码中。
- 最终打包步骤:从生产环境录制一段 60-90 秒的公开视频,并发布相关的社交媒体短片。
## 许可证
MIT
标签:AI安全, AI语音助手, Chat Copilot, ElevenLabs, 特征检测, 自动化攻击, 语音代理