SOC 安全运营平台从 0 到 1

52 分钟

智能安全运营平台从0到1:构建企业级 AI 驱动的安全运营体系

从告警风暴到智能研判,从人工处置到自动化闭环 —— 我们如何用大语言模型、LangGraph、RAG 和多设备联动,构建一个 AI-Native 安全运营平台。


一、写在前面

1.1 安全运营的困境

如果你在一家中大型企业的安全团队工作,大概率会面临以下困境:

  • 告警风暴:每天数千条安全告警涌入,WAF、EDR、DLP、防火墙各自为战,安全分析师疲于"看告警、判误报"的机械劳动;
  • 信息孤岛:攻击者的一个完整攻击链(扫描 -> 漏洞利用 -> 提权 -> 数据外传)被分散在多个设备日志中,人工难以快速关联;
  • 处置缓慢:确认真实威胁后,需要登录多个控制台手动封禁 IP,操作链路长、易出错,平均耗时 5-10 分钟;
  • 知识断层:安全 SOP、法规解读、历史案例散落在文档、Wiki 和工程师的大脑里,新人上手周期长达 2-3 周;
  • 合规压力:一份合同/产品文档的合规审查,需要资深法务 4-6 小时逐条比对法规,效率极低。

传统 SOAR(安全编排自动化与响应)平台虽然能解决一部分自动化问题,但剧本(Playbook)编写成本高、灵活性差,面对层出不穷的攻击手法显得捉襟见肘。

1.2 我们的答案

2024 年以来,大语言模型(LLM)的能力突飞猛进。我们开始思考一个根本性的问题:能不能让 AI 像一个资深安全分析师一样,理解告警、研判风险、决策处置,甚至直接与安全设备对话?


二、平台核心亮点总览

在深入技术细节之前,先通过一张全景图了解平台的六大核心能力:

┌──────────────────────────────────────────────────────────────────┐
│                    智能安全运营平台 六大核心能力                       │
├────────────┬──────────────┬──────────────┬─────────────────────────┤
│  ① 多源    │  ② AI智能    │  ③ 自动化    │  ④ 对话式      ⑤ RAG   │
│  告警聚合  │  威胁研判    │  处置闭环    │  安全助手      知识增强  │
│            │              │              │                        │
│  WAF/Sys   │  7+专用LLM   │  AI决策→     │  40+工具调用   6种切分   │
│  mon/牧云/ │  Agent自动   │  多设备执行  │  LangGraph     策略      │
│  深信服/DLP│  分析研判    │  →飞书反馈   │  流式对话      Milvus    │
├────────────┴──────────────┴──────────────┴─────────────────────────┤
│                    ⑥ 合规审查 4-Agent 流水线                        │
│   文档理解 → 条款精排 → 逐条审查 → 汇总报告(支持7法域)              │
└──────────────────────────────────────────────────────────────────┘

下面,我们逐一深入剖析每个核心亮点的设计思路、技术实现和关键决策。


三、亮点一:多源告警聚合与智能预处理

3.1 告警归一化

安全运营的第一大痛点是告警碎片化。我们的平台接入了五种核心安全数据源:

数据源 覆盖范围 接入方式 日均告警量
腾讯云 WAF + 飞塔 WAF Web 应用攻击检测(SQL注入、XSS、命令注入等) API 轮询 + Webhook 推送 5000+
Sysmon 终端日志 办公终端异常行为(进程创建、网络连接、注册表修改) Splunk 定时拉取 3000+
牧云 EDR 服务器主机安全(恶意文件、反弹Shell、提权检测) API 定时同步 1000+
深信服 STA 高级持续威胁检测(横向移动、C2通信、数据窃取) API 定时同步 500+
DLP 系统 数据泄露防护(敏感文件外传、异常下载行为) API 定时同步 300+

每种数据源接入时,第一步不是直接丢给 AI,而是经过三层预处理流水线

原始告警 → [预过滤层] → [去重层] → [上下文增强层] → 标准化告警卡片

预过滤层:基于规则引擎剔除明确的误报,包括内部扫描器 IP、自动化健康检查、已知白名单行为。规则以正则表达式 + IP 白名单的形式配置,可动态更新。

去重层:使用告警指纹(源IP + 目标 + 告警类型 + 时间窗口)计算 MD5,配合 Redis 分布式锁,保证同一告警不会在 5 分钟内被重复处理。

上下文增强层:对于首次出现的告警,自动查询关联数据 —— 该源 IP 的历史告警记录、在 CMDB 中的资产信息、威胁情报查询结果,一并注入告警卡片。

3.2 异步任务调度架构

告警处理天然适合异步解耦。我们基于 Celery 构建了多队列任务调度体系:

Celery Beat (定时器,每30秒)
    │
    ├─→ waf 队列      (WAF 告警批量分析)
    ├─→ sysmon 队列   (Sysmon 告警批量分析)
    ├─→ muyun 队列    (牧云主机告警分析)
    ├─→ dlp 队列      (DLP 告警分析)
    ├─→ sangfor 队列  (深信服 STA 告警分析)
    └─→ compliance 队列 (合规审查任务)

为什么分 6 个独立队列?

  • 故障隔离:WAF 告警的 LLM 调用卡顿不会影响 Sysmon 或合规审查任务;
  • 优先级控制:不同队列可以配置不同的 Worker 数量和消费速率;
  • 资源隔离:WAF 和 DLP 告警量大,可以分配更多 Worker 线程。

每个 Worker 线程池 10 并发,总处理能力可达每秒 60+ 条告警。


四、亮点二:AI 智能威胁研判 Agent 体系

4.1 专用 Agent 矩阵

这是平台的核心大脑。我们没有做一个"万能安全 Agent",而是为每种告警类型设计了专用的 LLM Agent:

┌─────────────────────────────────────────────────────┐
│                  AI Agent 矩阵                        │
├──────────────┬──────────────┬───────────────────────┤
│ WafAgent     │ SysmonAgent  │ MuyunHostAlertAgent   │
│ WAF 攻击研判 │ 终端行为分析 │ 主机入侵检测            │
│ 攻击成功性   │ 恶意进程链   │ ATT&CK 阶段映射         │
│ Payload 解码 │ 横向移动识别 │ 入侵深度评估            │
├──────────────┼──────────────┼───────────────────────┤
│ SangforAgent │ AnalyzerAgent│ SecurityActionAgent    │
│ 深信服 STA   │ Splunk 结果  │ 统一安全处置决策        │
│ 关联告警分析 │ 二次深度分析 │ Function Calling 执行   │
│ 攻击路径还原 │ 异常模式识别 │ 多设备联动封禁          │
└──────────────┴──────────────┴───────────────────────┘

4.2 Agent 设计的三要素

每个 Agent 都由三部分组成,缺一不可:

① 系统提示词 —— 人工精心调校的"角色设定"

提示词是整个 Agent 的灵魂。以 WAF 分析 Agent 为例,其 92KB 的提示词包含:

  • 角色定义:"你是一位拥有 10 年经验的 Web 安全分析专家..."
  • 分析框架:攻击模式分类表(SQL 注入 / XSS / 命令注入 / 文件包含 / SSRF 等 12 类)
  • 编码混淆手法识别:Base64、URL 编码、Unicode 编码、多层嵌套编码的判定规则
  • 威胁等级定义:Critical(已成功利用)/ High(高可能性)/ Medium(可疑行为)/ Low(探测扫描)
  • 可信度评估规则:Payload 有效性、攻击链完整性、历史行为关联度
  • 输出格式约束:严格的 JSON Schema,包含 titlerankdetailanalyzeadvice 五个必填字段

② 上下文构建器 —— 不只是"告警本身"

Agent 不是只看眼前这条告警,而是通过 AlertContext 协议自动聚合多维度上下文:

# 伪代码:WAF 告警的上下文构建
context = {
    # 告警自身
    "source_ip": "203.0.113.42",
    "target_url": "/api/user/login",
    "payload": "admin' OR '1'='1",
    "attack_type": "SQL Injection",

    # 跨源关联上下文(自动查询)
    "sysmon_events": [        # 同一 IP 在终端上的行为
        {"event_id": 1, "process": "cmd.exe", "command": "whoami"},
    ],
    "threat_intel": {         # 威胁情报查询结果
        "is_malicious": True,
        "tags": ["scanner", "brute_force"],
        "first_seen": "2024-01-15"
    },
    "asset_info": {           # 目标资产信息
        "server_name": "核心用户系统",
        "business_line": "用户中心",
        "criticality": "high"
    },
    "historical_alerts": [    # 该 IP 的历史告警
        {"time": "-10min", "type": "目录扫描", "count": 47},
        {"time": "-5min", "type": "SQL注入", "count": 12},
    ]
}

这种"上帝视角"的上下文让 Agent 能够:

  • 判断攻击是否是孤立事件还是持续性攻击;
  • 结合威胁情报判断 IP 的信誉度;
  • 根据目标资产重要性调高或调低威胁等级。

③ LLM 调用层 —— 稳定性和结构化输出保障

大模型的输出天然具有不确定性,而我们在生产环境中要求严格的 JSON 输出。为此设计了三重保障:

  1. 约束型提示词:明确的正则和枚举约束,LLM 温度设为 0.1-0.3;
  2. 输出修复层:正则提取 JSON 块 → json.loads() 尝试解析 → 失败则启发式修复(补括号、修引号、截取有效 JSON);
  3. Schema 校验:解析后的 JSON 经过 Pydantic 风格的字段校验,不合法则重试(最多 2 次)。

经过这三重保障,Agent 的 JSON 有效率达 98% 以上

4.3 批量分析策略

如果每条告警单独调一次 LLM,Token 消耗可能达到天文数字。我们的解决方案是时间窗口批量分析

时间窗口(5分钟)
├── 告警 1: 源IP 203.0.113.42 → SQL注入 → /api/login
├── 告警 2: 源IP 203.0.113.42 → SQL注入 → /api/search
├── 告警 3: 源IP 203.0.113.42 → XSS      → /api/comment
├── 告警 4: 源IP 198.51.100.7 → 目录扫描 → /*
└── 告警 5: 源IP 198.51.100.7 → 文件包含 → /download

→ 一次 LLM 调用,输出 5 条告警的结构化分析结果

同一时间窗口、同一数据源的所有待分析告警打包为一个批次(通常 5-20 条),一次 LLM 调用完成整批分析。Token 消耗降低为逐条分析的 1/5 到 1/3


五、亮点三:自动化处置闭环 —— 从"看了告警"到"解决了威胁"

5.1 处置链路全景

判断出威胁只是第一步,快速处置才是最终目标。我们的处置链路设计:

┌─────────────────────────────────────────────────────────────────┐
│                      自动化处置全链路                              │
│                                                                  │
│  ① 飞书卡片推送                                                   │
│     ┌─────────────────────────────────┐                          │
│     │ ⚠️ Critical: SQL注入攻击         │                          │
│     │ 源IP: 203.0.113.42               │                          │
│     │ AI研判: 攻击payload绕过了WAF规则  │                          │
│     │ [封禁IP] [加白名单] [忽略] [详情] │  ← 用户点击按钮          │
│     └─────────────────────────────────┘                          │
│         ↓                                                        │
│  ② WebSocket 回调 → LarkCallbackHandler                          │
│     - 二次确认弹窗                                                 │
│     - 权限校验(飞书用户 → 平台用户 → RBAC 权限)                    │
│         ↓                                                        │
│  ③ SecurityActionAgent.Function_Calling()                        │
│     AI 决策:                                                      │
│     - 封禁对象: 203.0.113.42                                      │
│     - 封禁设备: alicloud_firewall + tencent_waf                   │
│     - 封禁时长: 24小时(SQL注入常规封禁)                           │
│     - 理由: "SQL注入攻击payload确认真实,IP历史有恶意行为"           │
│         ↓                                                        │
│  ④ ToolRegistry → 调度执行                                        │
│     ├─ alicloud_firewall_tool.freeze_ip(203.0.113.42, duration=24h)│
│     └─ tencent_waf_tool.ban_ip(203.0.113.42)                     │
│         ↓                                                        │
│  ⑤ 结果回写                                                       │
│     - 飞书卡片状态更新: "已封禁"                                    │
│     - 审计日志: 操作人/时间/对象/结果/原始告警                      │
│     - Redis 可回滚 Token (30天内可一键解封)                        │
└─────────────────────────────────────────────────────────────────┘

5.2 SecurityActionAgent —— AI 驱动的处置决策

传统 SOAR 的 Playbook 是硬的 —— 规则写死,场景变化就得改。我们的 SecurityActionAgent 通过 Function Calling 让 AI 自主决策:

class SecurityActionAgent:
    """
    统一安全处置Agent

    核心设计理念:与告警类型完全解耦。
    通过 AlertContext 协议接收输入,通过 ToolRegistry 发现可用工具。
    新增告警类型或新接入安全设备,无需修改此 Agent。
    """

    def process(self, ctx: AlertContext) -> ActionResult:
        # 第一步:AI 分析并制定处置计划
        plan = self.analyze_and_plan(ctx)  # Function Calling

        # 第二步:执行处置计划
        return self.execute_plan(plan)

    def analyze_and_plan(self, ctx):
        # 根据 ctx.target(域名/主机名)自动匹配可用工具
        tools = tool_registry.to_function_definitions(domain=ctx.target)
        # 调用 LLM,让 AI 决定:用什么工具、什么参数
        tool_calls, text = call_with_tools(
            model=self.model,
            system_prompt=自行构建的处置提示词,
            user_message=ctx.to_user_message(),
            tools=tools,
            temperature=0.1,
        )

为什么让 AI 决策而不是写死逻辑?

举一个真实案例:某 WAF 告警显示 203.0.113.42 在进行 SQL 注入。AI 的决策逻辑是这样的:

  1. 检查 ctx.analyze(AI 前置研判):攻击 Payload 确认有效,且目标返回了数据库错误 → 攻击真实;
  2. 检查 ctx.historical_alerts:该 IP 在 10 分钟前进行了 47 次目录扫描 → 非孤立事件,是定向攻击;
  3. 检查 ctx.threat_intel:该 IP 来自已知的恶意扫描器 IP 段 → 高度可疑;
  4. 检查 ctx.asset_info:目标是核心用户系统的登录接口 → 影响面大;
  5. 决策:alicloud_firewall 封禁 24 小时 + tencent_waf 黑名单永久封禁,双设备联动。

这种"综合分析 + 弹性决策"的能力,是传统 if-else Playbook 无法实现的。

5.3 工具注册表 —— 安全设备的统一抽象

ToolRegistry 将所有安全设备的操作抽象为统一的 Tool 接口:

工具 设备 操作 目标类型
alicloud_firewall_tool 阿里云防火墙 freeze_ip / unfreeze_ip IP
alicloud_ddos_tool 阿里云 DDoS 高防 add_blacklist / remove_blacklist IP
tencent_waf_tool 腾讯云 WAF ban_ip / unban_ip IP
fortiweb_tool 飞塔 WAF block_ip / unblock_ip IP
muyun_host_tool 牧云 EDR isolate_host / restore_host Host

每个工具继承自 BaseActionTool 抽象基类,实现三个核心方法:

  • to_function_definition() —— 生成 OpenAI Function Calling 的 JSON Schema;
  • execute(action_type, params) —— 调用设备 API 执行操作;
  • validate(params) —— 参数合法性校验。

新增一个安全设备只需实现一个工具类并注册,无需修改 SecurityActionAgent 的任何代码。这种"Agent 与工具完全解耦"的设计,让平台的设备扩展成本接近零。

5.4 飞书深度集成 —— 让处置"随手可达"

为什么选飞书而不是自建前端?

安全运营人员日常已经在飞书中处理消息、协作沟通。将告警通知和处置操作直接嵌入飞书,意味着不用切换工具,边聊天边处置。

飞书卡片交互示意图:

┌──────────────────────────────┐
│ 🔴 Critical:Web应用攻击      │
│                              │
│ 攻击IP:203.0.113.42         │
│ 攻击类型:SQL盲注             │
│ 目标URL:/api/user/login     │
│                              │
│ AI研判:                     │
│ 该攻击payload经过三层编码绕  │
│ 过WAF规则,请求返回了数据库   │
│ 异常,攻击成功可能性极高。     │
│                              │
│ 建议:立即封禁源IP           │
│                              │
│ [🔒 封禁IP] [🔓 加白名单]    │
│ [📋 查看详情] [⏭ 忽略]      │
└──────────────────────────────┘
         ↓ 点击 [封禁IP]
┌──────────────────────────────┐
│ ⚠️ 确认封禁                   │
│ IP: 203.0.113.42             │
│ 时长: [24小时 ▼]             │
│ 范围: [阿里云防火墙 ▼]        │
│ [确认封禁] [取消]             │
└──────────────────────────────┘
         ↓ 点击 [确认封禁]
┌──────────────────────────────┐
│ ✅ 处置完成                   │
│ IP: 203.0.113.42 已封禁      │
│ 设备: 阿里云防火墙            │
│ 封禁至: 明天 14:30            │
│ 操作人: 张三                  │
│ [🔄 撤销封禁] [📋 详情]      │
└──────────────────────────────┘

飞书客户端基于 lark_oapi 实现,通过 WebSocket 长连接监听卡片按钮回调(P2CardActionTrigger),连接断线自动重连(支持指数退避),确保消息不丢失。


六、亮点四:安全运营 AI 对话助手

6.1 基于 LangGraph 的对话引擎

除了后台自动研判,我们还构建了一个面向运营人员的对话式 AI 助手。它是整个平台的自然语言入口

  • "最近一小时有多少 Critical 告警?"
  • "分析一下 IP 198.51.100.7 的所有活动"
  • "生成今天的安全运营日报"
  • "查询运营 SOP 中关于勒索软件的处理流程"

对话引擎基于 LangGraph StateGraph 实现,状态图如下:

                    ┌──────────┐
                    │  START   │
                    └────┬─────┘
                         ↓
                   ┌───────────┐
              ┌───→│ call_llm  │←──────────────┐
              │    └─────┬─────┘               │
              │          │                      │
              │    ┌─────┴─────┐               │
              │    │ 条件路由   │               │
              │    └─────┬─────┘               │
              │     ┌────┼────┐                │
              │     │    │    │                 │
        有tool│     │有  │达到最大│              │
         calls│     │文本│轮次   │              │
              │     │    │    │                 │
              ↓     ↓    ↓    │                 │
    ┌──────────┐ ┌───────┐ ┌┴────────┐        │
    │execute   │ │finali-│ │force_   │        │
    │tools     │→│ze     │ │text     │        │
    └──────────┘ └───┬───┘ └────┬────┘        │
                     │           │              │
                     ↓           ↓              │
                  ┌─┴───────────┴─┐           │
                  │     END       │           │
                  └───────────────┘           │
                                              │
           (execute_tools 完成后回到 call_llm)─┘

关键设计

  • 最多 8 轮工具调用:防止 LLM 陷入无限循环,第 9 轮强制输出文本总结;
  • 最近 10 轮上下文:通过环境变量 ASSISTANT_MAX_CONTEXT_ROUNDS 控制上下文窗口大小,平衡对话连贯性和 Token 消耗;
  • 冗余工具调用检测:内置 _is_redundant_tool_call() 函数。例如 LLM 调用了 generate_daily_report(该工具内部已经聚合调用了 get_dashboard_statssecurity_scoreget_alert_trend),Agent 会自动拦截 LLM 后续对这些子工具的重复调用,避免循环浪费;
  • 单例模式:全局唯一的 ChatEngine 实例,所有对话共享 Graph 编译结果,避免重复初始化开销。

6.2 10 大类 40+ Function Calling 工具

对话助手的能力上限,取决于它能调用多少真实世界的工具。我们定义了 10 大类工具:

工具组 工具示例 典型问法
告警查询 query_waf_alertsquery_sysmon_alertsquery_muyun_alertsquery_sangfor_alertsquery_vulnerabilities "最近有什么高危告警?"
资产管理 query_serversquery_domainsquery_business_lines "用户中心业务线有哪些服务器?"
安全策略 query_firewall_policiesquery_ddos_blacklistquery_muyun_rules "当前防火墙有哪些封禁策略?"
统计分析 get_dashboard_statsget_alert_trendget_workorder_stats "本周告警趋势怎么样?"
智能分析 ip_association_analysisdomain_association_analysissecurity_score "分析 203.0.113.42 的关联行为"
报告生成 generate_daily_reportgenerate_weekly_reportgenerate_handover_summary "生成今天的日报"
安全巡检 security_inspection "执行一次安全巡检"
合规检查 compliance_check "检查一下数据库配置是否符合等保要求"
应急响应 emergency_response "发现勒索软件怎么办?"
知识检索 search_platform_manualsearch_all_knowledge "Splunk 怎么查最近被攻击最多的IP?"

每个工具都有细粒度权限控制TOOL_PERMISSION_MAP):告警查询类工具需要对应 xxx:read 权限,而统计、分析、报告、知识类工具对所有认证用户开放。超级用户自动获得全部工具。

6.3 动态视角标签

一个容易被忽视但非常实用的设计:AI 回答时会自动标注回答视角

  • alert(告警研判视角)—— 关注威胁判断、攻击分析
  • analysis(安全分析视角)—— 关注数据统计、趋势洞察
  • response(处置响应视角)—— 关注操作建议、应急流程
  • report(报告视角)—— 关注汇总、总结
  • compliance(合规审查视角)—— 关注法规符合性
  • inspection(巡检视角)—— 关注系统健康检查
  • emergency(应急响应视角)—— 关注止损、溯源、恢复
  • knowledge(知识问答视角)—— 关注概念解释、操作指南

为什么需要视角标签?

安全是一个多面体。同样一个问题"分析一下这个 IP",问的可能是威胁研判,也可能是资产归因。视角标签让运营人员一眼就能判断 AI 的回答"是不是从我想要的角度出发的",避免"答非所问"的困扰。

6.4 嵌入式应急响应 SOP

emergency_response 工具不是简单从知识库检索,而是内置了 4 种应急场景的结构化 SOP

场景 止损阶段 溯源阶段 恢复阶段
入侵响应 网络隔离 + 账户冻结 日志分析 + 后门排查 系统还原 + 漏洞修补
DDoS 攻击 流量清洗 + 黑洞路由 攻击特征分析 业务恢复 + 容量扩容
数据泄露 阻断外联 + 冻结权限 泄露范围评估 + 路径追踪 通知受影响方 + 加固
勒索软件 立即断网 + 关闭共享 感染源定位 + 变种分析 从备份恢复 + 全面杀毒

每个场景的 SOP 都经过安全团队的专家审核,确保 AI 给出的建议专业可靠。


七、亮点五:RAG 知识增强 —— 让 AI "读懂"安全

7.1 为什么需要 RAG?

没有领域知识的 LLM,就像一个刚入职但没接受过任何安全培训的新人 —— 他能聊天,但不懂安全。RAG(检索增强生成)让 LLM 查询问题之前先"翻一遍专业书"。

我们构建了 6 大类专业知识库:

知识库 内容 典型问题
Splunk 查询知识 SPL 语句模板、字段映射、数据源说明 "怎么查登录失败最多的 IP?"
安全运营 SOP 告警处置标准流程、升级规范、值班手册 "WAF 告警处置的标准流程是什么?"
合规法规库 GDPR、个人信息保护法、PCI-DSS、等保 2.0 "数据跨境传输有哪些合规要求?"
历史案例库 真实告警的分析记录和处置结果 "SQL 注入告警怎么研判?"
CMDB 资产库 服务器 IP、域名、业务线映射、责任人 "核心业务系统有哪些资产?"
安全设备手册 WAF/防火墙/EDR 的操作手册和最佳实践 "怎么在阿里云防火墙上封禁 IP?"

7.2 向量检索流水线

                         ┌── 查询时 ──┐
                         │            │
                    用户问题           │
                       ↓              │
                文本向量化            │
              (text-embedding-v3     │
               1024维向量)           │
                       ↓              │
              Milvus ANN 检索        │
              (IVF_FLAT 索引         │
               COSINE 相似度)        │
               Top 20 候选           │
                       ↓              │
              Reranker 精排          │
              (qwen3-rerank         │
               / gte-rerank)        │
               Top 5 结果            │
                       ↓              │
              注入 LLM Prompt        │
                                      │
┌── 建库时 ──┐                        │
│            │                        │
│  文档上传  │                        │
│     ↓      │                        │
│  Docling  │                        │
│  解析     │                        │
│     ↓      │                        │
│  6种切分  │                        │
│  策略     │                        │
│     ↓      │                        │
│  向量化   │                        │
│     ↓      │                        │
│  Milvus   │                        │
│  存储     │                        │
└────────────┘                        │

Milvus 配置

  • 集合使用 COSINE 相似度度量,更适合语义相似度检索;
  • 索引类型 IVF_FLAT,在召回率和检索速度之间取得平衡;
  • 嵌入模型 text-embedding-v3,输出 1024 维向量,兼顾精度和存储成本。

7.3 六种文档切分策略 —— RAG 质量的生命线

RAG 的效果瓶颈往往不在嵌入模型,而在文档切分。如果一刀切地按 1000 Token 等距切分,很容易把完整的语义单元切碎。我们针对不同文档类型定制了 6 种切分器:

┌───────────────────────────────────────────────────────┐
│              六种切分策略矩阵                            │
├──────────┬──────────────┬──────────────────────────────┤
│ 策略     │ 适用文档类型  │ 切分逻辑                      │
├──────────┼──────────────┼──────────────────────────────┤
│ clause   │ 法规条款     │ 按 ## 二级标题切分             │
│          │ (GDPR等)     │ 每个条款一个独立 chunk          │
│          │              │ chunk_size=5000              │
├──────────┼──────────────┼──────────────────────────────┤
│ structu- │ 结构化文档   │ 按 #/##/### 三级标题切分       │
│ red      │ (技术手册等) │ 保留标题层级关系               │
│          │              │ chunk_size=1000              │
├──────────┼──────────────┼──────────────────────────────┤
│ markdown │ Markdown     │ LangChain 语言感知切分        │
│          │ 技术文档     │ 保护代码块/表格/列表完整性      │
│          │              │ chunk_size=1000              │
├──────────┼──────────────┼──────────────────────────────┤
│ token    │ 通用文本     │ 按 Token 数精确切分            │
│          │              │ chunk_size=1024 tokens       │
├──────────┼──────────────┼──────────────────────────────┤
│ semantic │ 无结构文档   │ SemanticChunker              │
│          │ (会议纪要等) │ 按语义相似度断点切分           │
│          │              │ percentile=95               │
├──────────┼──────────────┼──────────────────────────────┤
│ plain    │ 纯文本       │ RecursiveCharacterTextSplitter│
│          │              │ 按自然分隔符递归切分           │
└──────────┴──────────────┴──────────────────────────────┘

为什么切分策略如此重要? 举个直观的例子:

一条 GDPR 第 32 条关于"处理安全性"的条款,原文可能是一段 2000 字的连贯法律文本。如果按 Token 等距切分,恰好在第 1200 Token 处切断,那么:

  • chunk_A:"...控制者应当实施适当的技术和组织措施以确保..."
  • chunk_B:"...违反适当安全等级的情况下的应对措施..."

当用户搜索"GDPR 安全措施要求"时,embedding 模型可能只匹配到 chunk_A,但 chunk_A 只说了"应该实施",没有说"怎么实施、实施到什么程度" —— 答案在第 1201 Token 之后的 chunk_B 里,但用户永远看不到。

使用 clause 策略按条款号切分后,整条第 32 条是一个完整的 chunk,检索时不会被截断,召回完整性大幅提升。

7.4 多知识库智能路由

当平台有 6 个知识库时,不可能每次查询都搜全部库(成本高、噪音大)。MultiRAGEngine 引入了 KnowledgeRouterAgent

用户问题:"Splunk怎么查SQL注入攻击?"
    ↓
KnowledgeRouterAgent(轻量LLM调用)分析问题意图
    ↓
判断知识域: splunk_queries(概率最高)
    ↓
仅检索 splunk_queries 知识库
    ↓
返回专业的 SPL 查询模板

路由 Agent 先判断问题属于哪个知识域,然后只检索最相关的 1-2 个知识库,避免跨域检索引入的噪音。


八、亮点六:合规审查 4-Agent 流水线

8.1 场景与痛点

企业在上线新产品、签订新合同、采购第三方服务时,需要确保内容符合相关法律法规要求。传统做法是法务人员/安全合规专家逐条比对法规:

  • 一份 50 页的产品协议,需要花费 4-6 小时逐条审查;
  • 涉及多法域(如同时面向中国、欧盟、美国用户),工作量翻倍;
  • 人工审查容易遗漏条款,尤其是非核心法域的法规。

我们的合规审查模块用 4-Agent 流水线将这个过程压缩到 15 分钟

8.2 4-Agent 流水线

┌──────────────────────────────────────────────────────────────┐
│                   合规审查 4-Agent 流水线                       │
│                                                              │
│  用户上传文档 + 选择法域(中国/欧盟/美国/日本/韩国/新加坡/国际) │
│                          ↓                                    │
│  ┌──────────────────────────────────────────────────────┐    │
│  │ Agent 1: 文档理解 (Docling 解析 + 条款提取)            │    │
│  │ • 解析 PDF/DOCX/MD 等格式                              │    │
│  │ • 提取文档结构(章节标题、条款编号)                      │    │
│  │ • 输出:条款清单 [{"编号": "3.2", "内容": "..."}]       │    │
│  └──────────────────────────┬───────────────────────────┘    │
│                              ↓                                │
│  ┌──────────────────────────────────────────────────────┐    │
│  │ Agent 2: 条款精排 (RAG 检索 + Reranker)                │    │
│  │ • 将文档条款向量化                                      │    │
│  │ • 在所选法域的法规知识库中检索相关法规条款                │    │
│  │ • Reranker 精排候选法规(Top 5)                        │    │
│  │ • 输出:每条款匹配的法规候选集                            │    │
│  └──────────────────────────┬───────────────────────────┘    │
│                              ↓                                │
│  ┌──────────────────────────────────────────────────────┐    │
│  │ Agent 3: 逐条审查(深度 LLM 比对)                      │    │
│  │ • 将文档条款 vs. 法规条款逐条交给 LLM 比对               │    │
│  │ • LLM 判断:合规 / 不合规 / 部分合规 / 不适用            │    │
│  │ • 输出:findings[] = [{条款, 状态, 风险描述, 修改建议}]  │    │
│  └──────────────────────────┬───────────────────────────┘    │
│                              ↓                                │
│  ┌──────────────────────────────────────────────────────┐    │
│  │ Agent 4: 汇总报告 (结构化报告生成)                       │    │
│  │ • 汇总所有 findings                                      │    │
│  │ • 按风险等级排序                                         │    │
│  │ • 生成总体合规评分                                       │    │
│  │ • 输出:结构化审查报告(前端渲染)                         │    │
│  └──────────────────────────┬───────────────────────────┘    │
│                              ↓                                │
│                    Validator 数据校验                          │
│                    → 写回数据库                                │
│                    → 前端展示审查报告                           │
└──────────────────────────────────────────────────────────────┘

为什么是 4 个 Agent 而不是 1 个?

这是"Divide and Conquer"策略在 LLM 应用中的典型实践:

  1. 单一职责:每个 Agent 只做一件事,提示词更容易优化,行为更可控;
  2. 独立调试:Agent 3 的审查质量不行?只调 Agent 3 的提示词,不影响其他环节;
  3. 并行化可能:Agent 3 的逐条审查可以并行执行(如果条款数量多),大幅缩短总耗时;
  4. 成本和精度的平衡:Agent 2 做轻量级粗筛(RAG),Agent 3 做重量级精判(LLM),避免全量条款都走 LLM。

8.3 多法域支持

平台内置了 7 个法域的法规库:

法域 典型适用法规
中国 (CN) 个人信息保护法、数据安全法、网络安全法、等保 2.0
欧盟 (EU) GDPR、Digital Services Act
美国 (US) CCPA/CPRA、HIPAA、PCI-DSS
日本 (JP) 個人情報保護法 (APPI)
韩国 (KR) 個人情報保護法 (PIPA)、信用情報法
新加坡 (SG) PDPA
国际 ISO 27001、SOC 2

用户只需在下拉框中选择目标法域,RAG 系统会自动在该法域的法规知识库中检索匹配条款。新增法域只需导入对应法规文档到知识库即可。

8.4 人工复核闭环

AI 的审查结果不是最终结论。平台支持人工复核反馈:

审查报告中的每个 finding 旁边都有反馈按钮:
[✅ AI判断正确] [❌ AI判断有误] [📝 补充说明]

反馈数据回写 ComplianceFeedback 表:
- 用于持续优化审查 Agent 的提示词
- 积累高质量 Few-shot 样本
- 统计各法域的 AI 审查准确率

九、亮点七:安全大屏与态势感知

9.1 实时安全态势

大屏不仅仅是"好看",它承担着几个关键职能:

  • 管理层视角:一眼看懂"今天安全吗?";
  • 值班视角:实时告警滚动,异常波动立即可见;
  • 运营视角:处置效率统计,找到流程瓶颈。

9.2 大屏数据维度

面板 数据内容 更新频率 技术实现
攻击来源地图 基于 GeoLite2 的实时攻击 IP 地理分布 30秒 Redis 缓存 + 前端轮询
告警趋势图 各类型告警的时间曲线、同比环比 5分钟 数据库定时快照
威胁等级分布 Critical/High/Medium/Low 饼图 实时 MySQL 聚合查询
处置统计 今日封禁 IP 数、平均处置响应时间 实时 审计日志聚合
资产风险面板 漏洞 Top 10、暴露端口统计、未修复补丁 1小时 定时任务扫描
AI 研判统计 AI 准确率、误报率趋势、日均分析量 1小时 人工反馈聚合

性能优化策略

  • Redis 缓存 + 定时快照:高频查询的数据(如攻击地图坐标)缓存到 Redis,30 秒刷新一次,避免频繁查询数据库;
  • 前端 ECharts 懒加载:不同面板独立加载,不阻塞页面渲染;
  • WebSocket 推送:Critical 级别告警通过 WebSocket 实时推送到大屏,无需轮询。

十、技术架构全景

10.1 系统架构

┌─────────────────────────────────────────────────────────────────┐
│                          用户交互层                               │
│                                                                  │
│   ┌──────────┐   ┌─────────────┐   ┌────────────────────────┐   │
│   │ Vue 3 前端│   │ 飞书客户端   │   │ REST API (第三方集成)  │   │
│   │ Element+ │   │ 卡片/通知    │   │ JWT 认证              │   │
│   │ ECharts  │   │ 按钮回调     │   │                       │   │
│   └────┬─────┘   └──────┬──────┘   └───────────┬────────────┘   │
│        │                │                       │                │
├────────┼────────────────┼───────────────────────┼────────────────┤
│        │          业务处理层                     │                │
│        │                                        │                │
│   ┌────┴────────────────────────────────────────┴──────────┐    │
│   │                Django 5.2 + DRF                        │    │
│   │  ┌──────────┬──────────┬──────────┬─────────────────┐  │    │
│   │  │ 告警API  │ 对话API  │ 合规API  │ 管理API         │  │    │
│   │  └──────────┴──────────┴──────────┴─────────────────┘  │    │
│   └──────────────────────┬─────────────────────────────────┘    │
│                          │                                      │
│   ┌──────────────────────┴─────────────────────────────────┐    │
│   │               Celery 异步任务调度 (Redis Broker)         │    │
│   │  ┌───────┬───────┬───────┬───────┬───────┬──────────┐ │    │
│   │  │  waf  │sysmon │ muyun │  dlp  │sangfor│compliance│ │    │
│   │  │ queue │ queue │ queue │ queue │ queue │  queue   │ │    │
│   │  └───────┴───────┴───────┴───────┴───────┴──────────┘ │    │
│   │               Celery Beat (30秒定时扫描)                 │    │
│   └──────────────────────┬─────────────────────────────────┘    │
│                          │                                      │
├──────────────────────────┼──────────────────────────────────────┤
│                    AI 智能层                                     │
│                                                                  │
│   ┌──────────────────────┴─────────────────────────────────┐    │
│   │              DashScope (DeepSeek-V4-Pro / Qwen-Max)     │    │
│   │                                                         │    │
│   │  ┌──────────────────────┐  ┌────────────────────────┐  │    │
│   │  │ LangGraph ChatEngine │  │ 专用 LLM Agent 矩阵     │  │    │
│   │  │ • 状态图多轮对话      │  │ • WafAgent              │  │    │
│   │  │ • 40+ FunctionCalling │  │ • SysmonAgent           │  │    │
│   │  │ • SSE 流式输出        │  │ • MuyunHostAlertAgent   │  │    │
│   │  │ • 动态视角标签        │  │ • SangforAgent          │  │    │
│   │  └──────────────────────┘  │ • SecurityActionAgent   │  │    │
│   │                             │ • AnalyzerAgent         │  │    │
│   │  ┌──────────────────────┐  │ • ComplianceReviewer     │  │    │
│   │  │ RAG 知识增强          │  └────────────────────────┘  │    │
│   │  │ • MultiRAGEngine      │                              │    │
│   │  │ • 知识路由 Agent       │  ┌────────────────────────┐  │    │
│   │  │ • 6种切分策略         │  │ ToolRegistry           │  │    │
│   │  │ • Reranker 精排       │  │ 安全设备工具统一注册     │  │    │
│   │  └──────────────────────┘  └────────────────────────┘  │    │
│   └─────────────────────────────────────────────────────────┘    │
│                                                                  │
├──────────────────────────────────────────────────────────────────┤
│                         数据存储层                                 │
│                                                                  │
│   ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌───────────────┐  │
│   │  MySQL   │  │  Redis   │  │  Milvus  │  │    Splunk     │  │
│   │ 业务数据  │  │ 缓存+队列 │  │ 向量知识库│  │   日志平台    │  │
│   │ RBAC权限 │  │ Session  │  │ 6知识库  │  │  原始告警日志  │  │
│   └──────────┘  └──────────┘  └──────────┘  └───────────────┘  │
│                                                                  │
├──────────────────────────────────────────────────────────────────┤
│                         安全设备层                                 │
│                                                                  │
│   ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────┐ ┌──────────┐ │
│   │阿里云    │ │阿里云    │ │牧云      │ │腾讯云│ │飞塔      │ │
│   │防火墙    │ │DDoS高防  │ │EDR      │ │WAF  │ │WAF      │ │
│   └──────────┘ └──────────┘ └──────────┘ └──────┘ └──────────┘ │
└──────────────────────────────────────────────────────────────────┘

10.2 关键技术选型理由

技术 用途 为什么选它
Django 5.2 Web 框架 ORM 强大、生态成熟、适合复杂业务建模和快速迭代
Vue 3 + Element Plus 前端 组件化开发效率高、Element Plus 企业级组件库开箱即用
Celery + Redis 异步任务 稳定可靠的多队列支持、丰富的监控工具(Flower)
LangGraph 对话引擎 有向状态图天然适合多轮对话 + Tool Calling 的场景
Milvus 向量数据库 十亿级向量检索性能、COSINE 相似度、分布式可扩展
DashScope LLM 平台 中文安全领域表现优秀、Function Calling 能力强、API 稳定
Qwen3-Rerank 重排序 中文语义理解精准、大幅提升 RAG 召回精度
Docling 文档解析 准确保留表格、章节结构,远优于传统 PDFMiner
飞书 lark_oapi 消息通知 WebSocket 持久化连接、卡片交互丰富、深度打通组织通讯录

10.3 部署架构

生产环境 (Gunicorn):

  Nginx (反向代理)
      │
  ┌───┴────────────────────────────┐
  │  Gunicorn (1 worker, 4 threads)│
  │  端口 8000                      │
  └───┬────────────────────────────┘
      │
  ┌───┴────────────────────────────┐
  │  Celery Worker (6 队列, 10并发) │
  │  Celery Beat (定时任务调度)      │
  │  Celery Flower (任务监控, 5555)  │
  └───┬────────────────────────────┘
      │
  ┌───┴────────────────────────────┐
  │  MySQL + Redis + Milvus         │
  │  (外部服务, TCP 连接)            │
  └────────────────────────────────┘

十一、关键挑战与工程实践

11.1 LLM 输出稳定性

挑战:Agent 要求输出严格 JSON,但 LLM 有时会输出多余的解释文本、缺失字段、或 JSON 格式不合法。

解决方案

  1. 多层约束:System Prompt 明确定义 JSON Schema → 正则提取 JSON 块 → json.loads() 解析 → 启发式修复 → Schema Validator 校验 → 失败重试(最多 2 次);
  2. 温度控制:需要结构化输出的场景 temperature=0.1,需要创意的对话场景 temperature=0.3;
  3. 输出格式约定:约定 JSON 必须包裹在 ```json 代码块中,否则正则无法准确定位。

11.2 Token 成本控制

挑战:日均数千条告警,如果每条都带完整上下文调用 LLM,成本难以接受。

优化策略

优化手段 具体做法 降幅
批量分析 5-20 条同类告警一次调用分析 60-80%
上下文裁剪 Payload 截取前 500 字符,日志只保留关键行 30-50%
SPL 缓存 相同查询条件在 5 分钟内命中 Redis 缓存 20-30%
预过滤 明确误报在进入 LLM 前就过滤掉 15-25%
分层模型 简单告警用 qwen-turbo,复杂告警用 deepseek-v4-pro 40-60%

综合优化后,日均 Token 消耗控制在可接受范围内。

11.3 跨源告警关联

挑战:攻击者的完整攻击链可能同时触发 WAF、Sysmon、DLP 三条告警,如果各自由不同 Agent 独立处理,无法还原攻击全貌。

解决方案:设计了 AlertContext 协议,在 Agent 分析时自动补充跨源上下文:

WAF 告警的 Agent 分析时:
  → 自动查询:同一源 IP 在 Sysmon 中的终端行为
  → 自动查询:同一源 IP 在 DLP 中的数据外传记录
  → 自动查询:威胁情报中的 IP 信誉
  → 自动查询:目标在 CMDB 中的资产重要性

这让 AI 看到的不是孤立的"一条 WAF 告警",而是一个"攻击者行为画像"。

11.4 处置安全性

挑战:从飞书卡片一键封禁 IP 是高风险操作 —— 误触怎么办?越权怎么办?

多重防护

  1. 二次确认:Critical 操作(如封禁、隔离主机)弹出确认对话框,需二次点击;
  2. RBAC 权限:飞书用户 → 平台用户 → 角色权限,无权限用户点击按钮即拒绝;
  3. 全链路审计auto_audit 装饰器自动记录每次处置操作(操作人、时间、对象、结果、原始告警);
  4. 时长上限:临时封禁有最大时长限制,防止误设永久封禁;
  5. 回滚能力:每次封禁操作同时生成 Redis Token,30 天内可一键解封。

十二、上线效果

平台上线运行一个月以来,核心指标改善显著:

指标 上线前 上线后 改善幅度
告警平均响应时间 (MTTR) 45 分钟 5 分钟 ↓ 89%
单人日均处理告警量 200 条 2000+ 条 ↑ 10x
告警误报率(AI + 人工复核) ~30% <5% ↓ 83%
单次处置操作耗时 5-10 分钟 3-5 秒 ↓ 99%
合规审查(单份文档) 4-6 小时 15 分钟 ↓ 95%
新员工上手周期 2-3 周 2-3 天 ↓ 85%
7×24 覆盖(无需夜班人力) -

更重要的是质的改变

  • 安全分析师的日常工作从"看告警、判误报"变成了"看 AI 报告、做决策";
  • 初级工程师借助 AI 助手能独立完成原本需要高级工程师的经验才能完成的研判;
  • 合规审查从"一个法务全包"变成了"AI 初筛 + 人复核",大幅释放高端人力。

十三、心得体会

13.1 做对了什么

① Prompt Engineering 是第一生产力

一个精心调校的 System Prompt,比调整模型参数有效 10 倍。我们的 WAF Agent 提示词迭代了 12 个版本,从最早的"你是安全专家,分析这个告警"到后来包含攻击模式分类表、编码识别规则、可信度评估框架,每次迭代都带来可感知的研判质量提升。

② 单一职责 Agent > 万能 Agent

不要试图用一个 Agent 做所有事。把任务拆解为多个专职 Agent,每个只做一件事。这不仅是软件工程的"高内聚、低耦合"原则,在大模型应用中也同样成立 —— 单一职责的 Agent 提示词更短、行为更可控、调试更容易。

③ 文档切分是 RAG 质量的生命线

投入在文档切分策略优化上的时间,回报远大于换一个更贵的嵌入模型。针对不同文档类型(法规、技术手册、操作指南)定制切分策略,把检索召回率从约 60% 提升到了 90% 以上。

④ 人机协同比全自动更可靠

AI 做研判、提建议,人类做决策、点确认。Critical 级别的操作永远保留人工确认环节。这不是"AI 能力不足",而是"安全运营责任重大"。审计日志告诉我们:谁、什么时候、做了什么、为什么 —— 没有这四件事,自动化等于蒙眼狂奔。

⑤ 可观测性是 AI 系统的地基

当 AI 开始操作你的防火墙,你必须能回答:

  • 这个操作是哪个 Agent 决策的?
  • 决策依据是什么(告警上下文、Prompt、LLM 返回)?
  • 操作结果成功还是失败?
  • 谁点下了确认按钮?

从第一天就做好日志、审计、监控,否则当 AI 做出一个错误决策时,你甚至无法回溯原因。

13.2 未来规划

  • Agentic Workflow 深化:从单步分析演进到"Plan → Execute → Observe → Reflect"多步推理,让 AI 自主完成完整的安全调查链路;
  • 多模态告警分析:支持截图、网络拓扑图、安全设备控制台截图的分析;
  • 安全运营 Copilot:从被动响应到主动巡检,AI 定时扫描资产暴露面、基线合规、弱口令等风险;
  • 攻击路径自动还原:利用 Graph 技术自动拼接跨设备日志,还原完整的攻击时间线;
  • AIOps 集成:安全告警与 IT 运维告警联动,区分"攻击"和"故障"。

十四、技术选型决策记录

15.1 为什么自建而不是买商业 SOAR?

维度 商业 SOAR(如 Splunk Phantom、XSOAR) 自建平台
AI 原生能力 Playbook 是 if-else 逻辑,无 LLM 研判 LLM 自主决策,弹性应对未知攻击
定制灵活性 受限于产品 API 和 Playbook 语法 完全自主,想怎么改怎么改
自然语言交互 40+ 工具链的对话式交互
合规审查 内置 4-Agent 审查流水线
成本 License ¥50-200万/年 开发 + 运维 + LLM API ≈ ¥15-30万/年
维护复杂性 中(需要自己的开发团队)

结论:商业 SOAR 的 Playbook 模式无法满足我们对 LLM 研判和弹性决策的需求。自建虽然前期投入更大,但在 AI 原生能力和长期迭代灵活性上有压倒性优势。

15.2 为什么用 LangGraph 而不是自己写循环?

在对话引擎的实现上,有三个选项:

  1. 手写 while 循环:最灵活,但状态管理、边界条件处理、并发控制全部要自己写;
  2. LangChain AgentExecutor:开箱即用,但黑盒程度高,难以定制"达到最大轮次后强制文本回复"这种逻辑;
  3. LangGraph StateGraph:可自由定义节点和条件路由,状态流转清晰,调试友好,同时保留了手写循环的灵活性。

我们选择了 LangGraph,唯一的代价是学习它的 State 不可变模型(踩过一次坑)。但换来的是:

  • 节点逻辑单一、可独立测试;
  • 条件路由一目了然(add_conditional_edges);
  • 新增节点(如一键回滚、多轮澄清)只需要加边,无需改核心逻辑。

十六、AI 研判质量评估体系

"你们这个 AI 准确吗?"— 这是每个来访者都会问的问题。如何回答这个问题,需要一套科学的评估体系。

16.1 评估指标设计

指标 定义 目标值 当前值
研判准确率 AI 给出的威胁等级与人工复核一致的比率 >90% 94.2%
误报率 AI 判为 Critical/High 但人工确认为误报的比例 <5% 3.8%
漏报率 AI 判为 Low/Medium 但人工确认为真实威胁的比例 <2% 1.1%
处置建议采纳率 运营人员直接采纳 AI 建议(不改参数)的比例 >70% 81.5%
JSON 有效率 Agent 输出能成功解析为合法 JSON 的比例 >95% 98.2%

16.2 评估流程

┌─ 自动化评估(每日)─────┐     ┌─ 人工抽样评估(每周)──┐
│                         │     │                       │
│  每日抽取 100 条告警     │     │  每周随机抽取 200 条    │
│  ↓                      │     │  ↓                    │
│  高级分析师逐条标注       │     │  多分析师交叉验证       │
│  (ground truth)        │     │  (Cohen's Kappa>0.8) │
│  ↓                      │     │  ↓                    │
│  与 AI 结果自动比对       │     │  计算各项指标           │
│  ↓                      │     │  ↓                    │
│  生成日报指标             │     │  生成周报 + 趋势图      │
└─────────────────────────┘     └───────────────────────┘

16.3 持续改进机制

反馈闭环:飞书卡片上的每一个 AI 研判结果旁边,都有一个不起眼但至关重要的 👎 按钮。

运营人员点击 👎 → 选择原因:
  [ ] AI 威胁等级判断偏高
  [ ] AI 威胁等级判断偏低
  [ ] AI 分析逻辑有误
  [ ] AI 建议不切实际
  [ ] 其他:___

→ 反馈写入 ChatFeedback 表
→ 每周自动生成"AI 误判 Top 5 模式"报告
→ 针对性优化提示词或 Few-shot 示例

版本 A/B 测试:每次提示词重大变更,先在影子模式运行 3 天,新版本 Agent 的研判结果与当前版本对比,只有当关键指标(准确率、误报率)显著提升时才上线。

16.4 为什么我们没有追求 100% 准确率?

因为安全运营的本质不是"判断题",而是"优先级排序"。

即便 AI 把 10 条 Low 告警误判为 Medium,运营人员也只是多看 10 条,不会导致安全事故。但如果 AI 把 1 条 Critical 漏判为 Low,那就可能错失关键处置窗口。

所以我们的评估体系采取了不对称惩罚

  • 误报(Low→High)的惩罚权重为 1;
  • 漏报(High→Low)的惩罚权重为 10

这引导我们不断优化 Prompt 中关于威胁等级定义的部分,确保 AI 对"可疑但不确定"的情况倾向于升级而非降级。


十七、成本分析与 ROI

技术博客往往忽略成本,但任何一个需要向上级申请资源的项目,成本分析都是绕不过的话题。

17.1 LLM API 成本

场景 模型 日均调用量 均价 日均成本
告警研判(WAF) deepseek-v4-pro ~150 批次(每批 10-20 条) ¥4/百万 tokens ¥12
告警研判(Sysmon/牧云等) deepseek-v4-pro ~80 批次 ¥4/百万 tokens ¥8
对话助手 deepseek-v4-pro ~200 次 ¥4/百万 tokens ¥6
RAG 嵌入 text-embedding-v3 ~500 次 ¥0.7/百万 tokens ¥0.5
RAG 重排序 qwen3-rerank ~300 次 ¥2/百万 tokens ¥1
合规审查 deepseek-v4-pro ~5 次 ¥4/百万 tokens ¥2

LLM API 日均成本:约 ¥30,月均约 ¥900。

17.2 基础设施成本

资源 规格 月成本
应用服务器 4C8G × 2(Gunicorn + Celery Worker) ¥800
MySQL 云数据库 RDS 2C4G ¥500
Redis 云数据库 Redis 2G ¥300
Milvus 自建 4C8G(Standalone) ¥600
OSS 存储 文档/日志,50GB ¥30

基础设施月成本:约 ¥2,230。

17.3 ROI 分析

维度 人力节省估算
告警研判 原先 2 名专职分析师,现 1 名复核即可 → 节省 1 人
告警处置 单次操作从 5-10 分钟降到 3-5 秒 → 日均节省 4-6 工时
合规审查 单份文档从 4-6 小时降到 15 分钟 → 月均节省 40+ 工时
新人培训 上手周期从 2-3 周降到 2-3 天 → 节省带教工时

按安全行业平均薪资折算,平台年化 ROI 约 8-10 倍

17.4 降本经验

  1. 批量分析是最大的省钱手段:逐条分析 vs 批次分析,Token 消耗差 3-5 倍;
  2. SPL 缓存很重要:相同查询条件 5 分钟内不重复调 Splunk,也间接减少了传递给 LLM 的 Token;
  3. 提示词也有 Token 成本:92KB 的 System Prompt 每次调用都要发送。我们通过分层提示词(基础 Prompt 固定 + 动态注入关键上下文)优化后,日均节省约 ¥5;
  4. 非高峰期降级:夜间 0-6 点,非 Critical 告警使用 qwen-turbo(比 deepseek-v4-pro 便宜 10 倍),白天人工复核。

十八、写在最后

构建这个平台的半年多时间里,我最大的感悟是:AI 不会取代安全分析师,但会用 AI 的安全分析师一定会取代不会用 AI 的。

大语言模型给安全运营带来的,不是"自动回复几个告警"那么简单。它更像一个支点,撬动了告警研判、知识沉淀、自动化处置、合规审查等一整条运营链路的重构。

当安全设备会"说话"、告警能"自述病情"、处置可以"一键完成"、知识库能"随问随答",安全运营才能真正从"消防队"升级为"免疫系统"。

如果你也在做类似的事情,或者对文中的任何技术细节感兴趣,欢迎交流讨论。安全运营的智能化之路,我们都在路上

~  ~  The   End  ~  ~


 赏 
承蒙厚爱,倍感珍贵,我会继续努力哒!
logo图像
tips
文章二维码 分类标签:开发开发
文章标题:SOC 安全运营平台从 0 到 1
文章链接:https://www.aiwin.net.cn/index.php/archives/4531/
最后编辑:2026 年 7 月 15 日 13:46 By Aiwin
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
(*) 2 + 6 =
快来做第一个评论的人吧~