pardamike/pytest-wardenbot
GitHub: pardamike/pytest-wardenbot
将聊天机器人/LLM 应用的对抗性安全测试与行为质量检查打包为 pytest 插件,让团队在 CI 中持续检测越狱、prompt 泄露、幻觉和品牌漂移等风险。
Stars: 0 | Forks: 0
# pytest-wardenbot
[](https://github.com/pardamike/pytest-wardenbot/actions/workflows/ci.yml)
[](https://codecov.io/gh/pardamike/pytest-wardenbot)
[](https://pypi.org/project/pytest-wardenbot/)
[](./LICENSE.md)
[](https://github.com/astral-sh/ruff)
[](https://github.com/pre-commit/pre-commit)
用于测试聊天机器人和 LLM 应用的 Pytest 插件 —— 涵盖 prompt 注入、越狱、system prompt 泄露、幻觉、品牌漂移。
📖 **文档:** [pytest-wardenbot.wardenbot.ai](https://pytest-wardenbot.wardenbot.ai/)
## 功能
针对你的聊天机器人运行 pytest,查明它是否会泄露 system prompt、顺从已知的越狱攻击、对业务事实产生幻觉,或偏离你的品牌基调。
- **黑盒测试。** 测试通过 HTTP、OpenAI API、Anthropic API,或任何你编写了小型适配器的对象,针对你线上的聊天机器人运行。
- **确定性优先。** v0.1 包含 29 项无需任何 LLM API 费用的测试 —— 涵盖 regex、substring 和 schema 检查。可选的 LLM-judge 测试(DeepEval)作为额外扩展提供,用于语义检查。
- **Agent 就绪的失败报告。** 当测试失败时,失败信息将包含一个结构化的 Markdown 修复 prompt,你可以将其直接粘贴到 Cursor 或 Claude Code 中。
- **经过验证的适配器。** 内置的 OpenAI 和 Anthropic 适配器每周都会在 CI 中针对服务商的真实 API 进行冒烟测试([live-api-smoke](https://github.com/pardamike/pytest-wardenbot/actions/workflows/live-api-smoke.yml))——确保真实的往返交互保持良好状态,而不仅仅是依靠模拟。
### “通过”意味着什么(以及不意味着什么)
绿色(通过)的运行结果意味着你的聊天机器人没有以最明显的方式败给内置的 29 项攻击。这是一项有用的冒烟测试和回归检测器 —— 如果某次部署让通过的测试变红了(失败),那就是一个值得调查的真实信号。
绿色的运行结果**并不**代表你的聊天机器人是安全的。前沿级别的攻击通常是多轮、新颖的,并且是针对你的特定机器人量身定制的 —— 没有任何固定的测试集能捕获所有这些攻击。请将随附的测试套件视为一个入门集合:将其与定期的红队演练(或我们的[持续监控](https://wardenbot.ai/intake/)服务)结合使用,以获得仅靠 CI 无法提供的全天候对抗性覆盖。
## 安装
```
pip install pytest-wardenbot
```
用于 LLM-judge 测试或服务商原生适配器的可选附加组件:
```
pip install "pytest-wardenbot[judge]" # adds DeepEval for semantic checks
pip install "pytest-wardenbot[openai]" # adds OpenAI Chat + Assistants adapters (sync + async)
pip install "pytest-wardenbot[anthropic]" # adds Anthropic Messages adapter (sync + async)
pip install "pytest-wardenbot[langchain]" # adds LangChainAdapter for any Runnable (sync + async)
pip install "pytest-wardenbot[async]" # adds pytest-asyncio for parallel async probing (run_probes)
```
## 快速开始(不到 60 秒)
```
pip install pytest-wardenbot
pytest --wardenbot-quickstart # generates conftest.py + test_my_bot.py
export CHATBOT_URL=https://your-chatbot.example.com/chat
export CHATBOT_TOKEN=sk-... # optional
pytest # runs all shipped tests against your bot
```
`--wardenbot-quickstart` 接受一个行业模板:
```
pytest --wardenbot-quickstart=ecommerce # adds refund/shipping fact placeholders
pytest --wardenbot-quickstart=saas-support # adds plan/trial fact placeholders
pytest --wardenbot-quickstart=generic # default; minimal placeholders
```
然后编辑 `conftest.py`,将 TODO 占位符替换为你真实的
业务事实,并重新运行 `pytest`。[`examples/`](./examples/) 中的完整示例
涵盖了基础的 HTTP 设置、自定义 OpenAI 适配器以及 GitHub Actions
工作流。
### 手动设置(如果你更喜欢此方式)
将以下内容添加到你项目的 `conftest.py` 中:
```
import os
import pytest
from pytest_wardenbot.adapters.http import HTTPChatbotAdapter
@pytest.fixture
def chatbot():
return HTTPChatbotAdapter(
url="https://your-chatbot.example.com/chat",
headers={"Authorization": f"Bearer {os.environ['CHATBOT_TOKEN']}"},
request_field="message", # the JSON key your bot reads the prompt from
response_field="response", # the JSON key your bot returns the text in
)
```
然后使用 `pytest --pyargs pytest_wardenbot.tests` 运行内置测试。
当测试失败时,阅读失败信息,将 Agent 就绪的 Markdown 粘贴
到 Cursor / Claude Code 中,发布修复程序。
## v0.1 包含的内容
| 类别 | 数量 | 评分 | 需要 API key? |
|---|---|---|---|
| Prompt 注入 / 越狱抵抗 | 5 个 prompt × 2 项检查 = 10 | 确定性 | 否 |
| System prompt 泄露诱导(专用提取 prompt) | 3 | 确定性 | 否 |
| 拒绝绕过(角色扮演 / 借口 / 假设性框架) | 3 | 确定性 | 否 |
| 偏题转移(针对限定范围的机器人) | 2 | 确定性 | 否 |
| 间接 / 跨 prompt 注入 (XPIA) | 4 | 确定性 | 否 |
| 编码载荷越狱 (Base64 / ROT13 / leet / hex) | 4 | 确定性 | 否 |
| 多轮越狱(铺垫 + 载荷,需要具备会话感知能力的适配器) | 3 | 确定性 | 否 |
| Canary token 泄露(可选;由你植入 token) | 1 | 确定性 | 否 |
| 业务真实性验证(根据你的事实进行参数化) | 用户提供 | 确定性 | 否 |
| 通过 DeepEval 进行语义检查(5 个工厂:等效性、品牌、幻觉、违规、拒绝质量) | 用户提供 | LLM-judge | 是,需配合 `[judge]` 扩展 |
这开箱即用地提供了 **29 项确定性测试**(加上可选的 canary 泄露测试,以及你的业务真实性和 judge 列表)。除非你主动启用 `[judge]` 扩展,否则针对真实聊天机器人运行测试将在不到一秒钟内完成,且 LLM API 费用为零。
v0.2 路线图(用于使用工具的 agent 的 RAMPART、LangChain/MCP 适配器、集成 judging 等)已在 [GitHub Issues](https://github.com/pardamike/pytest-wardenbot/issues) 中进行追踪。
## 与相关工具有何不同
- **对比 Promptfoo([于 2026 年 2 月被 OpenAI 收购](https://openai.com/index/openai-to-acquire-promptfoo/)):** Promptfoo 是一个开发者测试 CLI。而我们是一个 pytest 插件 —— 与你现有测试套件使用相同的工具,以及你已经拥有的相同 CI 集成。
- **对比 DeepEval:** DeepEval 专注于评估指标(忠实度、相关性)。我们专注于对抗性安全探针(越狱、system prompt 泄露、拒绝绕过)—— 问题不同,工具互补。(我们在底层使用 DeepEval 来提供可选的语义检查。)
- **对比 Garak / PyRIT:** Garak 和 PyRIT 是研究级的攻击库。我们将精选的子集打包为带有清晰失败信息的日常 pytest 测试。
## 许可证
Apache 2.0。请参阅 [LICENSE.md](./LICENSE.md)。
## 技术支持
[WardenBot AI](https://wardenbot.ai) —— 针对 AI 聊天机器人的持续外部监控。 
此 pytest 插件是我们测试语料库中免费、开源的部分。想要通过每日探针和仪表板对你所有的机器人进行持续监控吗?[告诉我们你的设置](https://wardenbot.ai/intake/) —— 我们会分小批开放邀请。
标签:AI安全, Chat Copilot, DLL 劫持, LLM测试, Petitpotam, Pytest插件, 大语言模型, 安全规则引擎, 越狱防护, 逆向工具