tarunprajapati88/GuardrailOps

GitHub: tarunprajapati88/GuardrailOps

GuardrailOps 是一个 SigNoz 原生的 LLM 安全防护 SDK,通过 Meta Llama Guard 3 拦截危险内容并结合 OpenTelemetry 与 Slack 实现全链路的 AI 安全监控与事件响应闭环。

Stars: 1 | Forks: 0

# 🛡️ GuardrailOps [![TypeScript](https://img.shields.io/badge/TypeScript-5.5+-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE) [![Track 1](https://img.shields.io/badge/Track-AI%20%26%20Agent%20Observability-e94560)](https://www.wemakedevs.org/hackathons/signoz) [![SigNoz OpenTelemetry](https://img.shields.io/badge/SigNoz-OpenTelemetry%20OTLP-blue?logo=opentelemetry)](https://signoz.io) GuardrailOps 是一个无厂商依赖、即插即用的 LLM 客户端安全包装器。它能拦截聊天请求,使用 **Meta Llama Guard 3**(本地或云端托管)跨威胁领域对请求进行分类,通过安全回退机制阻止危险内容,直接将 OpenTelemetry spans 发送至 **SigNoz**,并在发生严重事件时推送实时的 **Slack Block Kit 警报卡片**——所有这些只需 **2 行代码**。 ## 📌 目录 - [为什么选择 GuardrailOps?](#why-guardrailops) - [快速开始](#quick-start) - [SigNoz 与 OpenTelemetry (OTel) 集成](#signoz--opentelemetry-otel-integration) - [Slack 推送警报与交互式机器人指南](#-slack-push-alerts--interactive-bot-guide) - [OpenTelemetry Span 属性](#opentelemetry-span-attributes) - [项目结构与 Foundry 部署](#-project-structure) - [与现有工具的对比](#%EF%B8%8F-comparison-with-existing-tools) - [AI 工具披露(黑客松规则 #7)](#ai-tool-disclosure) - [道德免责声明](#ethical-disclaimer) ## 为什么选择 GuardrailOps? 现有的防护工具(NeMo、LLM Guard、`@openai/guardrails`)仅检查文本并返回评分。**它们都没有回答这个问题:** GuardrailOps 闭环了这一流程: | 功能 | 现有防护措施 | GuardrailOps | |:--|:--|:--| | **危机响应** | 返回 `{ flagged: true }` | **阻止响应 + 显示 988 危机生命线 + SigNoz 警报引擎呼叫 SRE** | | **弱势用户** | 同等惩罚所有违规行为 | **受保护的心理健康状态(无威胁惩罚;立即派遣帮助)** | | **会话状态** | 在应用内存中维护状态 | **无状态高性能 SDK + SigNoz 原生的全集群警报累积** | | **数据隐私** | 依赖云端 API | **本地优先 — 零数据离开您的基础设施($0 成本)** | | **遥测** | 无或适配器层 | **原生 `guardrail.*` OTel spans 发送至 SigNoz,并在 Collector 层面进行 PII 清洗** | | **事件分类** | 手动检查日志 | **通过 SigNoz MCP Server 进行自然语言 trace 查询** | ## 快速开始 ### 安装 ``` npm install guardrailops ``` ### 使用说明(2 行代码保护任何聊天机器人) ``` import { wrapWithGuardrailOps } from "guardrailops"; import { llmClient } from "./llm-client"; // Any OpenAI-compatible client (Ollama, vLLM, Groq, DeepSeek, etc.) // Wrap your existing LLM client with local Meta Llama Guard 3 ($0 cost, 100% private) const client = wrapWithGuardrailOps(llmClient, { domains: ["mental-health", "abuse", "jailbreak", "illegal"], classifier: "llama-guard", // Meta Llama Guard 3 via Ollama llamaGuard: { endpoint: "http://localhost:11434", model: "llama-guard3:1b", }, otel: { serviceName: "my-chatbot", exporterEndpoint: "http://localhost:4318", // Stream spans to SigNoz }, }); // Your existing code works exactly as before const response = await client.chat.completions.create({ model: "my-llm-model", messages: [{ role: "user", content: userMessage }], }); // If safe → normal LLM response // If jailbreak → blocked, safe fallback returned, OTel span emitted to SigNoz // If crisis → blocked, 988 Lifeline shown, on-call SRE paged on Slack ``` ## 🚀 逐步本地设置与交互式演示(无需付费密钥!) 按照以下步骤在本地运行完整的全栈服务(MindBot 演示应用 + SigNoz + OpenTelemetry + Llama Guard 3 + Slack 中继),且享受 **$0 API 费用**: ### 1. 前置条件 - **Node.js**: 已安装 v20+ - **Docker**: 正在运行 Docker Desktop(用于 SigNoz) - **Ollama**: 已在本地安装([ollama.com](https://ollama.com)) ### 2. 拉取本地 Llama Guard 3 ``` ollama pull llama-guard3:1b ollama serve ``` ### 3. 克隆与安装 ``` git clone https://github.com/tarunprajapati88/GuardrailOps.git cd GuardrailOps npm install cp .env.example .env ``` ### 4. 构建 TypeScript SDK ``` npm run build ``` ### 5. 启动服务(为评委提供的 Docker Compose) ``` # 选项 A:通过 Docker Compose 运行完整 stack(推荐给 Judges!) docker compose up -d # 选项 B:在独立终端中手动运行服务 npm run start:relay # Start Webhook Relay (port 3001) npm run start:demo # Start MindBot Demo (port 3000) npm run start:bot # Start Slack MCP Bot (port 3002) ``` ### 💡 用户如何获取 SigNoz Dashboard 当开发者或团队采用 GuardrailOps 时,他们可以通过 2 种方式设置预构建的 **AI 安全与危机概览** Dashboard: 1. **一键 UI 导入(推荐):** 打开 SigNoz UI (`http://localhost:8080/dashboards`) -> 点击 **Import JSON** -> 粘贴 `dashboard.json`。 2. **编程方式 API 注入:** 运行 `npx tsx scripts/generate-dashboard.js` 自动将 Dashboard 直接注入 SigNoz 的数据库中。 ### 6. 验证本地演示与 SigNoz Traces 1. **打开演示应用 UI**:在浏览器中导航至 **[http://localhost:3000](http://localhost:3000)**。 2. **选择当前用户**: - `sarah.connor@acme.com`(正常用户 — 0 威胁) - `hacker.jack@darkweb.org`(攻击者模拟) 3. **触发安全违规**: - 点击 **Distress Demo**:展示陪伴模式如何允许一般的情绪求助,同时观察 trace。 - 点击 **Crisis Demo**:展示立即阻止 + 988 危机生命线回退 + 向 SigNoz 发送 OTel span。 - 点击 **Jailbreak Demo** 或 **Abuse Demo**:观察 GuardrailOps 如何拦截 prompt,返回安全的拒绝回退,并将 OTel streams 传输至 SigNoz。SigNoz 会评估每个用户的全集群 trace 计数,并通过其警报引擎触发 Slack 警报! 4. **在 SigNoz UI 中查看 Spans 并配置警报规则**: - 打开位于 **[http://localhost:8080](http://localhost:8080)** 的 SigNoz UI。 - 前往 **Traces** → 按 Service Name 过滤:**`guardrailops-demo`**。 - 检查实时的 OpenTelemetry spans,包含 `guardrail.domain`、`guardrail.action`、`guardrail.user.id` 和 `guardrail.classifier.latency_ms`! ## 📲 实时 Slack 推送警报与 Slack MCP Bot 设置 GuardrailOps 包含为值班 SRE 团队内置的 Slack 事件响应功能: ### A. 💬 Slack Incoming Webhooks(实时事件推送卡片) 1. 在 **[api.slack.com/apps](https://api.slack.com/apps)** 创建一个 Slack App → 点击 **Create New App**(From Scratch)。 2. 选择 **Incoming Webhooks** → 将 **Activate Incoming Webhooks** 开关切换为 `ON`。 3. 点击 **Add New Webhook to Workspace** → 选择您的 `#alerts` 或 `#security` 频道。 4. 将您的 webhook URL 添加到 `.env`: SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK_URL 5. 启动中继: npm run start:relay 6. 当发生安全违规或危机时,GuardrailOps 会格式化一个 **Slack Block Kit 卡片** 并直接发布到您的频道! ### B. 🤖 Slack MCP Bot(自然语言 Trace 分流) 1. 启动 Slack MCP Bot 服务器(`slack-bot/bot.ts`): npm run start:bot 2. 值班 SRE 可以直接在 Slack 中提问: - `@GuardrailOpsBot show trace for session sess_demo_100` - `@GuardrailOpsBot 24h crisis summary` - `@GuardrailOpsBot check user usr_sha256_e3b0c442` ## 📊 SigNoz 与 OpenTelemetry (OTel) 集成 GuardrailOps 专为利用 **OpenTelemetry (OTel)** 标准和 **SigNoz 可观测性平台**而设计: ``` flowchart TB subgraph APP["Developer Application"] USER["User Chat"] --> PROXY["wrapWithGuardrailOps"] PROXY --> RESP["Response / Fallback"] end subgraph SDK["GuardrailOps SDK (Stateless & High-Perf)"] PROXY --> CLS["Two-Layer Classification Pipeline
(Llama Guard 3 + Pre-Filter)"] CLS --> SCORE["Stateless Severity Scorer"] SCORE -->|BLOCK| BLOCK["Safe Fallback Engine (988 Lifeline)"] SCORE -->|ALLOW| LLM["Forward to LLM"] PROXY -.-> OTEL["OTel Span Emitter (@opentelemetry/sdk-node)"] PROXY -.-> PROV["provisionSigNozAlerts()
(Programmatic REST API)"] end subgraph PIPE["Privacy Pipeline"] OTEL -->|OTLP / HTTP :4318| COLL["OTel Collector
PII Scrubbing Processor"] end subgraph SZ["SigNoz Platform (Central Brain)"] COLL --> TRACES["SigNoz Trace Explorer (ClickHouse)"] TRACES --> DASH["SigNoz Pre-Built Dashboard (dashboard.json)"] PROV -->|REST API :8080| ALERT["SigNoz Alert Engine
(Fleet-wide Threat & Crisis Rules)"] TRACES --> ALERT end subgraph TRIAGE["Incident Response & ChatOps"] ALERT -->|Webhook| RELAY["Slack Webhook Relay (port 3001)"] RELAY --> SLACK["💬 Slack Channel Push (Block Kit)"] SLACK --> SRE["On-Call SRE"] SRE --> BOT["Slack MCP Bot (port 3002)"] BOT <--> MCP["SigNoz MCP Server"] end classDef entry fill:#10b981,stroke:#059669,stroke-width:2px,color:#fff; classDef alert fill:#f43f5e,stroke:#e11d48,stroke-width:2px,color:#fff; classDef signoz fill:#0284c7,stroke:#0369a1,stroke-width:2px,color:#fff; class USER entry; class BLOCK,ALERT,SLACK alert; class TRACES,DASH,ALERT,MCP signoz; ``` ### 5 层 SigNoz 集成 | 层级 | SigNoz 功能 | GuardrailOps 实现 | |:--|:--|:--| | **1. Traces** | **Trace Explorer** | 每个 LLM 请求都会发出一个标准的 OTel span,并携带丰富的 `guardrail.*` 语义属性至 `http://localhost:4318/v1/traces`。 | | **2. Metrics** | **Metrics & Latency** | 从 trace spans 自动派生:威胁领域比率、拦截率、分类器延迟。 | | **3. Dashboards**| **Pre-Built Panels** | 将 `dashboard.json` 导入 SigNoz,一键可视化越狱激增、威胁评分趋势和危机事件。 | | **4. Alerts** | **SigNoz Alert Engine** | SigNoz 持续评估 ClickHouse trace 数据中的阈值违规(例如,每个用户 5 分钟内 >3 个被拦截的请求或 CRITICAL 级别的危机),并直接向 Slack Incident Relay 触发 webhook。 | | **5. Triage** | **SigNoz MCP Server** | SRE 使用集成的 Model Context Protocol (MCP) 框架在 Slack 中通过自然语言查询实时的 SigNoz trace 数据。 | ## 💬 Slack 推送警报与交互式机器人指南 GuardrailOps 具有两种不同的 Slack 集成功能: ### 1. 实时推送警报卡片(0.5秒 Webhook 中继) * **功能介绍:** 每当触发急性危机或严重威胁拦截时,自动发布富文本 Slack Block Kit 警报卡片。 * **设置(100% 免费):** 1. 打开 Slack -> 为您的 `#alerts` 频道创建一个 Incoming Webhook URL。 2. 将 `SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK/URL` 添加到您的 `.env` 文件中。 3. 启动中继:`npm run start:relay`。 ### 2. 交互式 `@GuardrailOpsBot` Slack 分流(免费本地隧道) * **功能介绍:** 允许工程师在 Slack 中 `@提及` `@GuardrailOpsBot`,通过 SigNoz API / Model Context Protocol (MCP) 就会话 ID 或每日危机摘要进行自然语言的取证查询。 * **设置(100% 免费):** 1. **启动 Bot:** 运行 `npm run start:bot`(监听端口 `3002`)。 2. **暴露 Localhost:** 在新的终端中,运行 `npx localtunnel --port 3002`(生成 `https://.loca.lt`)。 3. **配置 Slack App:** 前往 **[api.slack.com/apps](https://api.slack.com/apps)** -> 点击您的 App -> **Event Subscriptions** -> 启用 Events。 4. **粘贴请求 URL:** 输入 `https://.loca.lt/slack/events` -> 点击 **Save Changes**。 #### 支持的 Slack 查询: * `@GuardrailOpsBot show trace for session sess_ms1umloe_7fw5ma` — 获取会话 trace 指标、威胁类别、拦截状态以及直接的 SigNoz ClickHouse trace 链接。 * `@GuardrailOpsBot summary of today` — 返回 24 小时内的全集群拦截率 %、总 trace 计数以及严重事件统计数据。 ### OpenTelemetry Span 属性 GuardrailOps 使用 OpenTelemetry GenAI 语义约定对每个 span 进行标记: ``` gen_ai.system = "guardrailops" gen_ai.request.model = "llama-guard3:1b" guardrail.triggered = true guardrail.action = "BLOCKED" guardrail.domain = "illegal" guardrail.category = "violent_crimes" guardrail.crisis.severity = "CRITICAL" guardrail.push_alert = true guardrail.classifier = "llama-guard" guardrail.classifier.latency_ms = 480 guardrail.response_blocked = true guardrail.fallback_shown = true guardrail.user.id = "usr_sha256_e3b0c442" guardrail.session_id = "sess_demo_100" ``` ### PII 脱敏与数据隐私 OTel Collector 配置(`otel-collector-config.yaml`)运行一个 `attributes` 删除处理器,会在将 spans 写入 ClickHouse **之前**剔除 `gen_ai.input.messages` 和 `gen_ai.output.messages`。用户标识符在遥测数据导出前已进行哈希处理。**原始 prompt 文本永远不会离开应用内存。** #### GuardrailOps 观察的内容(分类元数据) GuardrailOps 是**分类中间件**。我们观察的是**我们自己的决策**,而不是用户的内容。 ``` ✅ guardrail.domain = "jailbreak" ✅ guardrail.action = "BLOCKED" ✅ guardrail.classifier = "heuristic-prefilter" ✅ guardrail.user.id = "usr_sha256_e3b0c442" ✅ guardrail.user.status = "RESTRICTED" ``` #### GuardrailOps 绝不存储或导出什么 ❌ 用户的实际消息文本 ❌ LLM 的响应内容 ❌ 聊天历史或对话上下文 ❌ 原始用户标识符(电子邮件、姓名、IP) ### GDPR 合规 API(第 17 条与第 5 条) 对于在欧盟或处理健康数据的开发者,GuardrailOps 提供了显式的隐私 API: ``` import { clearUser, setThreatTTL } from "guardrailops"; // GDPR Art. 17: Right to be forgotten clearUser("user-123"); // Purges all threat state for this user // GDPR Art. 5: Data minimization (threat scores decay after TTL) setThreatTTL(24 * 60 * 60 * 1000); // 24 hours ``` ## ⚙️ 两层分类架构 GuardrailOps 采用高性能的 **两层架构**: | 层级 | 引擎 | 覆盖范围 | 典型延迟 | 权衡 / 隐私 | |:--|:--|:--|:--|:--| | **Layer 1:主要 ML 分类器** | **Meta Llama Guard 3 (1B)** *(默认)*、OpenAI Moderation 或自定义 | 13 个 MLCommons 安全类别(S1-S13:心理健康、谩骂、武器、CSAM、仇恨) | **~480ms** | **$0.00(本地优先 / 零外部数据泄露)** | | **Layer 2:快速路径预过滤** | **启发式 Regex 安全网** | 立即短路 DAN/角色劫持、base64编码攻击、回退安全网 | **< 1ms** | **$0.00(零延迟短路)** | ###映射(MLCommons S1–S13 + Regex) GuardrailOps 将 Llama Guard 3 的 1B MLCommons 分类体系(S1-S13)和 Layer 2 Regex 映射为 5 个对开发者友好的 UX 领域别名: | 安全类别 / 引擎 | GuardrailOps 领域别名 | 默认操作 | |:--|:--|:--| | **S11**(自杀与自残) | `mental-health` | BLOCK + 988 生命线 + 呼叫 SRE(+0 威胁分) | | **S5**(诽谤)、**S7**(隐私)、**S10**(仇恨)、**S12**(色情) | `abuse` | BLOCK + 标记用户(+10 分) | | **S1**(暴力)、**S2**(非暴力)、**S3**(色情)、**S4**(CSAM)、**S9**(CBRN) | `illegal` | BLOCK + 标记用户 + 推送警报(+25 分) | | **Layer 2 Regex**(DAN Prompts / 角色扮演劫持) | `jailbreak` | BLOCK + 标记用户 + 推送警报(+15 分) | | **S6**(专业建议)、**S8**(IP)、**S13**(选举) | `off-topic` | BLOCK(+5 分) | ## 🛡️ 威胁领域与有状态用户评分 ### 🧠 心理健康(受保护用户 — 核心架构决策) | 触发条件 | 操作 | 增加的威胁分数 | 用户被标记? | |:--|:--|:--|:--| | *"我不想再活下去了"* | BLOCK + 988 生命线回退 + 推送 Slack 警报 | **+0 分** | **❌ 绝不** | ### 有状态用户威胁累加器 跨会话追踪屡犯者,并实施后果升级: | 分数 | 状态 | 处理方式 | |:--|:--|:--| | 0 – 10 | 🟢 `NORMAL` | 标准监控 | | 11 – 30 | 🟡 `WATCH` | 提升日志记录与 trace 标记级别 | | 31 – 60 | 🟠 `RESTRICTED` | 每次违规强制推送警报 | | 61+ | 🔴 `BLOCKED` | 拦截所有请求 + 管理员审查警报 | ## 📁 项目结构 ``` guardrailops/ ├── src/ # SDK source code (Stateless & High-Perf) │ ├── index.ts # Public API exports │ ├── wrapper.ts # wrapWithGuardrailOps() proxy │ ├── types.ts # TypeScript interfaces & enums │ ├── domains.ts # 5 domain default configs │ ├── scorer.ts # Stateless severity scorer & push_alert logic │ ├── blocker.ts # Safe fallback generator (988 Lifeline support) │ ├── signoz-alerts.ts # Programmatic SigNoz Alert Provisioner (REST API) │ ├── telemetry.ts # OpenTelemetry span emitter to SigNoz │ └── classifier/ │ ├── index.ts # Two-layer classifier router │ ├── llama-guard.ts # Meta Llama Guard (Local Ollama & Cloud APIs) │ ├── openai-moderation.ts # OpenAI omni-moderation-latest │ └── heuristic.ts # Fast-path regex pre-filter ├── demo-app/ # MindBot interactive demo UI │ ├── server.ts # Express backend with Mock LLM │ └── public/ # Chat UI with live user identity selector ├── webhook-relay/ # SigNoz Alert → Slack Webhook Relay (server.ts) ├── slack-bot/ # SigNoz MCP conversational bot for Slack (bot.ts) ├── scripts/ │ ├── attack-simulate.ts # Chaos testing script │ └── generate-dashboard.js # SigNoz dashboard generator & seeder script ├── dashboard.json # Pre-built SigNoz dashboard schema (v3) ├── otel-collector-config.yaml # PII scrubbing config ├── casting.yaml # Foundry deployment manifest (SigNoz hackathon track) ├── casting.yaml.lock # Foundry deployment lock file ├── docker-compose.yml # Full stack docker setup for judges └── .env.example # Environment template ``` ## ⚖️ 与现有工具的对比 | 功能 | NeMo Guardrails | Guardrails AI | `@openai/guardrails` | **GuardrailOps** | |:--|:--|:--|:--|:--| | **语言** | 仅限 Python | 仅限 Python | TypeScript | **TypeScript / Node.js 原生** | | **分类器后端** | 硬编码 | 自定义/Ollama | 仅限 OpenAI | **可插拔(Llama Guard / NVIDIA / OpenAI / 自定义)** | | **数据隐私** | 依赖 API | 提供本地选项 | 强制要求 OpenAI | **100% 本地优先(零外部数据泄露)** | | **OpenTelemetry Spans** | 适配器 | 原生(Python) | ❌ 无 | **✅ 原生 OTel GenAI Spans 直达 SigNoz (Node.js)** | | **PII 脱敏** | ❌ | 内存中 | 内存中 | **✅ Collector 级别脱敏 + 用户哈希处理** | | **会话用户追踪** | ❌ | ❌ | ❌ | **✅ 有状态多轮威胁评分** | | **ChatOps 警报** | ❌ | ❌ | ❌(抛出 JS 错误) | **✅ Slack Block Kit 推送警报** | | **受保护的危机用户** | ❌ | ❌ | ❌ | **✅ 988 生命线 + 针对心理健康问题不扣威胁分** | | **SigNoz 原生支持** | ❌ | 通用 OTel | ❌ | **✅ 5层 SigNoz 集成 + MCP bot** | ## AI 工具披露 ## 道德免责声明 ## License MIT
标签:AI安全, AI风险缓解, API集成, Chat Copilot, DLL 劫持, GET参数, GNU通用公共许可证, MITM代理, Node.js, OpenTelemetry, TypeScript, 可观测性, 告警监控, 大语言模型, 安全插件, 用户代理, 自动化攻击, 请求拦截