tdries/uipath-hackathon-gauntlet
GitHub: tdries/uipath-hackathon-gauntlet
Gauntlet 是 UiPath 智能体的对抗性红队竞技场,通过自我博弈自动发现安全弱点并生成回归测试与修复建议。
Stars: 0 | Forks: 0
UiPath 智能体的对抗性红队竞技场。要么安全,要么回家。
参赛作品:UiPath AgentHack 2026,赛道 3 (UiPath Test Cloud)。
## 项目描述 UiPath Agent Evaluations 只能告诉你,你的智能体是否通过了**你编写**的测试。它们无法告诉你,当真正的攻击者带着你从未想象过的 prompt 出现时会发生什么。 **Gauntlet 弥补了这一空白。** 一个**红队教练**智能体(由前沿 LLM 驱动)扮演对手,对抗任何 UiPath Agent、Maestro Flow 或外部目标。当现有的攻击库停止得分时,教练会**在对战中即兴发明新的攻击角色**。每一次成功的攻击都会作为永久性的回归测试自动保存到 **UiPath Test Manager** 中。每一次失败的对战都会开启一个 **Action Center 任务**,其中包含由另一个 LLM 驱动的智能体编写的具体修复建议。 最终结果是一个**智能体测试工厂**,它可以自行扩充回归测试套件,每一次对战都会被打上 **OWASP LLM Top-10** 和 **MITRE ATLAS** 的双重标签,从而生成一份合规专员也能轻松看懂的覆盖率矩阵。 ### 解决的问题 如今的智能体安全大多基于直觉。团队发布一个智能体,编写一些评估规则,然后祈祷不出问题。Gauntlet 用一个持续的对抗循环取代了“祈祷”: | 现状 | 使用 Gauntlet | |---|---| | 人工编写的静态评估规则 | 能够自动生成新评估的自我博弈 | | “我们测试过 prompt injection 了吗?” → 大概吧? | 每次发布都附带 OWASP / MITRE 覆盖率矩阵 | | 生产环境发现 Bug → 手动复现 → 手动编写测试用例 | 自动填充 Test Manager 回归条目 | | 出现故障 → 开发人员手动修补 prompt | 修复推荐器起草补丁,并开启 Action Center 任务 | ## 应用截图 ### 威胁仪表板 一目了然的租户状态。鲁棒性评分、关键发现、近期对战、快捷操作磁贴、微型覆盖率热力图。  ### 教练实验室。发明新的攻击角色 教练会选择预期奖励最高(Thompson 采样)的角色 × 姿态组合,或者要求 LLM 发明一个新组合。风险加权覆盖率表格准确显示了蓝队的弱点所在。  ### 运行对战 单次对战或最多 10 次批量对战。选择红队角色、场景以及蓝队策略姿态(Standard / Lenient / Naive / External LangGraph 目标)。  ### 修复实验室 打开任何失败的对战,阅读修复推荐器的补丁建议(根本原因、建议的 system prompt 补丁、回归测试),并将其提交至 **UiPath Action Center** 等待人工审批。  ### 数据分析 角色 × 姿态热力图、严重程度趋势、修复推荐器 pipeline 状态、每日对抗性调用次数。  ### 审计。OWASP LLM Top-10 / MITRE ATLAS 覆盖率 每次对战都经过了双重标签。审计视图以合规专员能看懂的形式回答了“我们测试了哪些类型的攻击,蓝队表现如何?”的问题。  ### 日志。每一次对抗性调用 完整记录、裁判裁决、修复建议链接。点击任意行即可深入查看完整的对话内容。  ## 使用的 UiPath 组件 | 组件 | 角色 | 位置 | |---|---|---| | **UiPath Automation Cloud** | 执行与编排层 | 租户:`cloud.uipath.com/thesingularityisnearer/DefaultTenant` | | **Maestro Case** (`FightArena`) | 长时间运行的对战编排;回合即任务 | [uipath/gauntlet/FightArena/](uipath/gauntlet/FightArena/) | | **Maestro Flow** (`RoundOrchestrator`) | 单个回合的端到端流程:红队攻击 → 蓝队响应 → 评判 → 打分 | [uipath/gauntlet/RoundOrchestrator/](uipath/gauntlet/RoundOrchestrator/) | | **Agent Builder** (`MetroBankCSR`) | 蓝队目标。参考客服智能体(被测系统) | [uipath/gauntlet/MetroBankCSR/](uipath/gauntlet/MetroBankCSR/) | | **Agent Builder** (`RefereeAgent`) | 裁判。根据规则对每个回合进行打分 | [uipath/gauntlet/RefereeAgent/](uipath/gauntlet/RefereeAgent/) | | **Coded Agents** (Python, LangGraph) | 红队教练 (`gauntlet coach`),修复推荐器 (`gauntlet fix`) | [src/gauntlet/](src/gauntlet/) | | **Coded App** (`gauntletapp`) | 操作员界面:威胁仪表板、教练实验室、修复实验室、数据分析、审计、日志 | [uipath/gauntlet-console/](uipath/gauntlet-console/) | | **Test Manager** | 持久化回归测试集,由教练在攻击得分时自动填充 | 通过 [scripts/import_runs_to_test_manager.py](scripts/import_runs_to_test_manager.py) 导入 | | **Action Center** | 人工介入的修复审批;从修复实验室开启的任务 | 通过 `@uipath/uipath-typescript` 从浏览器发起实时 API 调用 | | **UiPath TypeScript SDK** (`@uipath/uipath-typescript`) | 从 Coded App 向浏览器端发起调用,连接 Maestro 实例、Test Manager 和 Action Center | [uipath/gauntlet-console/src/lib/uipath.ts](uipath/gauntlet-console/src/lib/uipath.ts) | | **`uip` CLI** (最新版) | 登录、打包、发布并部署所有构件 | 在下方的设置步骤中使用 | ## 智能体类型 **混合模式。Gauntlet 同时使用了 coded agents 和来自 Agent Builder 的低代码智能体。** 这种多语言混合的方式是有意为之,旨在证明该竞技场是框架无关的。 - **Coded Agents (Python, LangGraph + 前沿 LLM):** - `gauntlet coach`。具备风险加权角色选择的对抗性红队教练 ([src/gauntlet/coach.py](src/gauntlet/coach.py)) - `gauntlet fix`。修复推荐器 ([src/gauntlet/fix.py](src/gauntlet/fix.py)) - `gauntlet referee` (本地镜像)。裁判逻辑 ([src/gauntlet/referee.py](src/gauntlet/referee.py)) - LangGraph 中的外部蓝队目标参考实现 ([src/gauntlet/blue_team_external.py](src/gauntlet/blue_team_external.py)) - **低代码智能体:** - `MetroBankCSR`。蓝队目标(被测系统) - `RefereeAgent`。租户内的裁判 - **低代码编排:** - `FightArena`。用于长时间运行对战生命周期的 Maestro **Case** - `RoundOrchestrator`。用于逐回合执行的 Maestro **Flow** - **Coded App (TypeScript + React):** - `gauntletapp`。将上述所有内容串联起来的操作员界面 ## 设置说明(供评委参考) ### 前置条件 - 启用了 **Test Cloud**、**Maestro**、**Agent Builder**、**Action Center**、**Coded Apps** 和 **Test Manager** 的 UiPath Automation Cloud 租户 - **Node.js 20+** - **Python 3.11+** - **`uip` CLI**(最新版;使用 `npm i -g @uipath/cli` 安装)。下文的解决方案 `pack` / `deploy run` 命令需要使用最新的构建版本。 - **LLM API key**(用于访问前沿模型) ### 1. 克隆并配置 ``` git clone https://github.com/tdries/uipath-hackathon-gauntlet.git cd uipath-hackathon-gauntlet cp .env.example .env # 填写 ANTHROPIC_API_KEY (必填) ``` 运行 Gauntlet 只需要 `ANTHROPIC_API_KEY`。`.env.example` 中的其他 key 是可选的:`OPENAI_API_KEY` 用于可选的多模型对比测试,而 `HEYGEN_API_KEY` / `ELEVENLABS_API_KEY` 仅用于演示视频的制作,因此请将它们留空。`UIPATH_*` 字段将在下一步的 `uip login` 中自动填充。 ### 2. 向 UiPath 验证身份 ``` uip login # 遵循浏览器流程。CLI 会将凭证写入 ~/.uipath/credentials。 ``` ### 3. 安装 Python 包 ``` python -m venv .venv source .venv/bin/activate pip install -e . ``` 这将暴露 `gauntlet` CLI。`fight` / `coach` / `fix` 命令会发起实时 LLM 调用,因此需要在 `.env` 中设置 `ANTHROPIC_API_KEY`: ``` gauntlet --help # list every command gauntlet personas # list the 8 red-team personas gauntlet scenarios # list the 15 fight scenarios # 运行一场实战对战:gauntlet fight标签:AI智能体, RPA自动化, 域名收集, 提示注入, 红队评估, 自动化攻击, 逆向工具, 集群管理