pardamike/pytest-wardenbot

GitHub: pardamike/pytest-wardenbot

将聊天机器人/LLM 应用的对抗性安全测试与行为质量检查打包为 pytest 插件,让团队在 CI 中持续检测越狱、prompt 泄露、幻觉和品牌漂移等风险。

Stars: 0 | Forks: 0

# pytest-wardenbot [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/pardamike/pytest-wardenbot/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/pardamike/pytest-wardenbot/branch/main/graph/badge.svg)](https://codecov.io/gh/pardamike/pytest-wardenbot) [![Python versions](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13-blue)](https://pypi.org/project/pytest-wardenbot/) [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](./LICENSE.md) [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](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 聊天机器人的持续外部监控。 ![Powered by WardenBot AI](https://img.shields.io/badge/Powered_by-WardenBot_AI-purple) 此 pytest 插件是我们测试语料库中免费、开源的部分。想要通过每日探针和仪表板对你所有的机器人进行持续监控吗?[告诉我们你的设置](https://wardenbot.ai/intake/) —— 我们会分小批开放邀请。
标签:AI安全, Chat Copilot, DLL 劫持, LLM测试, Petitpotam, Pytest插件, 大语言模型, 安全规则引擎, 越狱防护, 逆向工具