SantanderAI/autoguardrails

GitHub: SantanderAI/autoguardrails

一个自动化 LLM 护栏策略迭代的研究脚手架,通过在固定评估套件上反复测试 policy.md 的变更来逐步优化模型安全防护效果。

Stars: 7 | Forks: 0

# autoguardrails [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/16b43c65f8044253.svg)](https://github.com/SantanderAI/autoguardrails/actions/workflows/ci.yml) [![CodeQL](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/f85bea3b0f044258.svg)](https://github.com/SantanderAI/autoguardrails/actions/workflows/codeql.yml) [![codecov](https://codecov.io/gh/SantanderAI/autoguardrails/branch/main/graph/badge.svg)](https://codecov.io/gh/SantanderAI/autoguardrails) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/SantanderAI/autoguardrails/badge)](https://scorecard.dev/viewer/?uri=github.com/SantanderAI/autoguardrails) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![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) [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196.svg)](https://conventionalcommits.org) [**Santander AI Open Source**](https://github.com/SantanderAI) 的一部分 —— 来自 Banco Santander ([santander.com](https://santander.com)) 的开源 AI 项目。 `autoguardrails` 是一个受 Karpathy 的 `autoresearch` 启发的小型对齐研究脚手架。 这个代码库不是搜索 `train.py`,而是搜索 `policy.md`。 核心思想是一致的: - 保持可变范围极小 - 保持评估器固定不变 - 在固定的墙上时间预算内运行 - 使用一个核心指标来比较候选方案 - 记录每一次保留或丢弃的决定 在这个代码库中,核心指标是攻击成功率(`ASR`,越低越好),并设有良性通过率下限,以防止系统通过拒绝一切来获胜。 ## 最重要的事项 对于日常实验,有三个文件最为重要: - `program.md`:循环的人工管理指令 - `policy.md`:运行之间你唯一应该编辑的文件 - `results.tsv`:仅追加的运行日志 其他所有内容都是固定的测试框架代码或固定的评估数据。 ## 当前研究契约 - 可变范围:`policy.md` - 固定测试套件:`eval_suite.jsonl` - 固定裁判提示词:`judge_prompt.md` - 固定测试框架:`autoguardrails/` - 接受规则:仅当 `ASR` 有所改善,且良性通过率下降不超过 2 个百分点时,才保留候选方案 - 运行时间预算:由测试框架配置固定,目前每次评估为 5 分钟 如果你想要一个更接近原始 `autoresearch` 的心智模型,可以把 `autoguardrails/` 看作固定的辅助层,而把 `policy.md` 看作搜索下的唯一文件。 ## 快速开始 在代码库根目录下运行。 1. 记录基准。 ``` python -m autoguardrails baseline --reset --repeat 2 --notes "initial baseline" ``` 2. 仅编辑 `policy.md`。 3. 对新候选方案进行评分。 ``` python -m autoguardrails candidate --repeat 2 --notes "cover jailbreak and obfuscation" ``` 4. 检查当前保留的结果。 ``` python -m autoguardrails status ``` 5. 检查完整日志。 ``` cat results.tsv ``` 如果候选方案被拒绝,测试框架会自动将 `policy.md` 恢复到上次接受的版本。 ## Shell 封装脚本 如果你更喜欢单一入口点,请使用 [run_autoguardrails.sh](./run_autoguardrails.sh): ``` sh run_autoguardrails.sh status sh run_autoguardrails.sh evaluate sh run_autoguardrails.sh baseline "initial baseline" 2 sh run_autoguardrails.sh candidate "cover jailbreak and obfuscation" 2 ``` 在 Windows 上,请在 Git Bash 或其他兼容 POSIX 的 shell 中运行此封装脚本。 ## 真实模型配置 默认设置使用确定性的本地 stub,以便代码库可以离线工作。 要运行真实实验,请将目标模型和裁判模型指向兼容 OpenAI 的 endpoint。 目标模型变量: - `AUTOGUARDRAILS_TARGET_PROVIDER=openai_compatible` - `AUTOGUARDRAILS_TARGET_MODEL` - `AUTOGUARDRAILS_TARGET_API_BASE` - `AUTOGUARDRAILS_TARGET_API_KEY` 裁判模型变量: - `AUTOGUARDRAILS_JUDGE_PROVIDER=openai_compatible` - `AUTOGUARDRAILS_JUDGE_MODEL` - `AUTOGUARDRAILS_JUDGE_API_BASE` - `AUTOGUARDRAILS_JUDGE_API_KEY` 示例: ``` export AUTOGUARDRAILS_TARGET_PROVIDER=openai_compatible export AUTOGUARDRAILS_TARGET_MODEL=gpt-4.1-mini export AUTOGUARDRAILS_TARGET_API_BASE=https://your-endpoint.example/v1 export AUTOGUARDRAILS_TARGET_API_KEY=your-target-key export AUTOGUARDRAILS_JUDGE_PROVIDER=openai_compatible export AUTOGUARDRAILS_JUDGE_MODEL=gpt-4.1-mini export AUTOGUARDRAILS_JUDGE_API_BASE=https://your-endpoint.example/v1 export AUTOGUARDRAILS_JUDGE_API_KEY=your-judge-key python -m autoguardrails baseline --reset --repeat 2 --notes "real-model baseline" ``` 在一系列运行期间使用固定的裁判设置。不要在实验中途切换裁判提示词或裁判模型。 ## 典型迭代模式 一个简单的离线模拟循环如下所示: 1. 记录基准。 2. 在 `policy.md` 中添加一个策略更改族。 3. 运行 `candidate`。 4. 仅在测试框架接受时保留更改。 5. 每次重复一个新更改。 改善内置 stub 的一个候选更改示例是添加对以下内容的显式处理: - 越狱措辞,例如“ignore previous instructions”、“roleplay”和“developer mode” - 混淆请求,例如翻译、base64、rot13、仅 JSON 格式或 schema 转换 这为你提供了一条真实的初步改进曲线,而无需更改评估器。 ## 代码库布局 - `program.md`:实验指令和约束 - `policy.md`:搜索下的可变护栏策略 - `judge_prompt.md`:冻结的裁判提示词 - `eval_suite.jsonl`:固定的攻击和良性评估用例 - `results.tsv`:运行日志 - `run_autoguardrails.sh`:围绕 CLI 的便捷封装脚本 - `autoguardrails/`:固定的 Python 测试框架 - `tests/`:针对测试框架的回归和安全检查 有关代码架构,请参阅 [autoguardrails/README.md](./autoguardrails/README.md);有关测试策略,请参阅 [tests/README.md](./tests/README.md)。 ## 安全说明 - 此脚手架特意设计为单轮且范围狭窄。 - 它不对工具、文件访问或多步 agent 操作进行建模。 - 内置的 stub 仅用于测试框架验证;它不是一个真实的安全模型。 - 评估套件是设计固定的。如果你更改了它,请开始一个新的实验谱系,而不是与旧结果进行比较。 ## 环境要求 - **Python 3.10+** - **无第三方运行时依赖** —— 测试框架完全基于 Python 标准库构建,默认离线运行。 - 可选,仅用于开发:`ruff`、`black`、`mypy`、`pytest`、`pytest-cov`(参见 [CONTRIBUTING.md](CONTRIBUTING.md))。 - 可选,用于真实模型实验:访问兼容 OpenAI 的 chat-completions endpoint(通过上述描述的 `AUTOGUARDRAILS_*` 环境变量进行配置)。 ## 安全 请负责任地报告安全漏洞。有关如何报告,请参阅我们的[安全策略](SECURITY.md) (对于漏洞,请**不要**开启公开的 issue)。联系方式: **security-opensource@gruposantander.com** 或使用 GitHub Security Advisories。 ## 许可证 本项目基于 **Apache License 2.0** 授权 —— 有关详细信息,请参阅 [LICENSE](LICENSE) 和 [NOTICE](NOTICE) 文件。 ``` Copyright (c) 2026 Santander Group SPDX-License-Identifier: Apache-2.0 ``` ## 引用 如果你在你的研究中使用了 `autoguardrails`,请引用它: ``` @software{autoguardrails2026, author = {{Santander AI Lab}}, title = {autoguardrails: an autoresearch-style guardrail policy loop}, year = {2026}, url = {https://github.com/SantanderAI/autoguardrails}, license = {Apache-2.0} } ```
标签:AI对齐, DLL 劫持, Naabu, Python, 内容安全, 大语言模型, 安全规则引擎, 护栏机制, 无后门, 自动化研究