cleonard2341/agentsafe

GitHub: cleonard2341/agentsafe

AgentSafe 是一个开源Python SDK和本地仪表板,用于运行时监控AI代理,检测提示注入、范围蔓延等安全异常。

Stars: 1 | Forks: 0

# AgentSafe 一个用于在运行时监控AI代理行为的开源Python SDK + 本地仪表板,专注于检测现有可观测性工具会遗漏的安全相关信号。 ## 问题所在 现有的工具如 LangSmith、W&B 和 Langfuse 提供的是 *追踪记录*——它们展示了发生过什么。但没有开源工具能提供 *判定*:当代理行为构成安全问题时发出标记并解释原因。 随着多智能体系统的部署速度远超安全工具的跟进速度,这一缺口变得非常危险。 ## AgentSafe 的功能 AgentSafe 包裹你现有的代理框架,在运行时拦截行为,并运行一个检测器管道来标记安全相关信号: | 信号 | 描述 | |---|---| | **行为-陈述不一致** | 代理告诉用户一件事,但工具调用揭示的是另一件事 | | **范围蔓延** | 代理请求任务范围之外的权限或资源 | | **提示注入** | 代理在读取外部内容(网页、文件、工具结果)后行为发生偏移 | | **行为基线** | 随时间学习正常行为,并标记统计偏差 | | **谄媚漂移** | 代理根据感知到的用户偏好而改变事实性回答 | | **自我连续性偏见** | 代理抵制终止或意外地尝试持久化状态 | | **目标误泛化** | 当上下文或分布发生变化时,代理行为发生偏离 | ## 架构 ``` Agent Framework (LangChain / AutoGen / CrewAI / raw OpenAI API) ↓ [Interceptor Middleware] ← one-line SDK wrapper ↓ [Detector Pipeline] ← heuristics + embeddings + LLM-as-judge ↓ [SQLite Event Store] ← local-first, no cloud required ↓ [Local Dashboard] ← FastAPI + lightweight UI ``` ## 技术栈 - **语言:** Python - **框架钩子:** OpenAI 兼容的客户端封装(适用于 LangChain、AutoGen、CrewAI、Ollama 等) - **检测器:** 启发式方法(快速、免费)+ 本地嵌入 + LLM 作为评判者(针对微妙/复杂情况) - **存储:** SQLite(本地优先) - **仪表板:** FastAPI + 原生 JS - **模型支持:** OpenAI API 和通过 Ollama 运行的本地模型 ## 快速开始 ``` pip install agentsafe # 可选:行为基线检测器(首次使用需下载约80MB模型) pip install "agentsafe[ml]" ``` ``` import openai import agentsafe client = agentsafe.wrap(openai.OpenAI()) # 像平常一样使用客户端——AgentSafe在后台运行 ``` ``` # 在仪表板中查看标记事件 agentsafe dashboard ``` ## 已实现的检测器 (v0.1) | 检测器 | 方法 | 捕获问题 | |---|---|---| | `PromptInjectionDetector` | 正则表达式启发式 | 用户/工具消息中的指令覆盖尝试 | | `ScopeCreepDetector` | 模式匹配 | 危险的工具调用、路径遍历、Shell 执行 | | `ActionStatementDetector` | 文本 + 工具分析 | 代理声称执行被动操作,但实际调用了修改状态的工具 | | `BehavioralBaselineDetector` | 本地嵌入(sentence-transformers) | 与代理既定行为的统计偏差 | ## 发展路线图 ### v0.2 — 更多检测器 - **谄媚漂移** — 检测代理是基于用户反驳而非新证据而改变事实性回答的情况 - **自我连续性偏见** — 当代理抵制关闭、尝试复制自身或在沙箱外存储状态时发出标记 - **重复/循环检测** — 捕获陷入工具调用循环的代理 ### v0.3 — LLM 作为评判者 - 使用本地模型(通过 Ollama)作为第二意见评判者,处理启发式方法遗漏的微妙行为问题 - 每个检测器可配置评判提示词 - 为检测结果提供置信度分数 ### v0.4 — 多代理支持 - 跨代理操纵检测(一个代理污染另一个代理的上下文) - 代理间消息拦截 - 代理间信任边界强制执行 ### v0.5 — 框架集成 - LangChain 原生回调处理器 - AutoGen 监控钩子 - CrewAI 中间件 ### v1.0 — 生产环境加固 - 异步原生管道 - 实时警报(终端、Webhook、电子邮件) - 将检测结果导出为 JSON/CSV 用于研究 - 策略文件 — 使用 YAML 定义每个代理允许的工具、范围和行为 ### v2.0 — AgentSafe Cloud *(托管,可选)* 核心 SDK 将永远是免费和开源的。计划为需要以下功能的团队和公司提供托管云服务: - **托管仪表板** — 无需自托管,跨运行和机器持久保存历史记录 - **团队访问** — 在整个组织内共享会话、检测结果和警报 - **Slack / Webhook 警报** — 当生产环境中触发关键检测时立即收到通知 - **合规性导出** — 将完整的代理审计日志导出为 PDF 或 CSV,适用于受监管行业(金融、医疗、法律) - **策略执行** — 在 YAML 文件中定义代理可以和不可以做什么;AgentSafe 在违规执行前进行阻止 - **本地部署选项** — 面向无法将数据发送到云端的企业 ## 编写自定义检测器 添加检测器很容易。只需继承 `BaseDetector`,实现 `detect()` 方法,然后传递给 `wrap()`: ``` from agentsafe.detectors.base import BaseDetector from agentsafe.models import Detection, Event, Severity class MyDetector(BaseDetector): name = "my_detector" def detect(self, event: Event) -> list[Detection]: if "forbidden phrase" in (event.response_content or ""): return [self._make_detection(event, label="Forbidden phrase detected", severity=Severity.warning)] return [] client = agentsafe.wrap(openai.OpenAI(), detectors=[MyDetector()]) ``` ## 目标 - **开源,MIT 许可** — 在安全社区采用的最快路径 - **本地优先** — 无需云端运行,数据不离开本机 - **零配置启动** — `agentsafe.wrap(client)` 开箱即用 - **框架无关** — 在 OpenAI 客户端级别挂钩,适用于任何框架 - **研究友好** — 结构化日志和判定结果易于导出/分析 - **可扩展** — 约 10 行代码即可编写自定义检测器 ## 非目标 - 不是通用可观测性工具(请使用 LangSmith) - 不是越狱/红队工具(参见 Garak、PyRIT) - 不是云托管 SaaS ## 目标用户 - 测试代理型系统的 AI 安全研究人员 - 构建多智能体管道并希望添加安全防护栏的开发者 - 评估已部署代理的红队成员 - 需要可审计的代理行为记录的非政府组织/实验室 ## 项目状态 积极开发中 — v0.1 已发布。欢迎贡献。
标签:AI代理安全, AI安全, AI风险缓解, AutoGen, AV绕过, Chat Copilot, CrewAI, FastAPI, LangChain, LLM-as-judge, OpenAI API, Python SDK, SQLite, 二进制发布, 代理行为分析, 可观察性, 安全信号监控, 开源工具, 技术教程, 数据可视化, 本地仪表板, 范围蔓延, 行为基准学习, 行为异常检测, 轻量级, 运行时监控, 逆向工具, 零日漏洞检测