SOC 安全运营平台从 0 到 1
智能安全运营平台从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,包含
title、rank、detail、analyze、advice五个必填字段
② 上下文构建器 —— 不只是"告警本身"
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 输出。为此设计了三重保障:
- 约束型提示词:明确的正则和枚举约束,LLM 温度设为 0.1-0.3;
- 输出修复层:正则提取 JSON 块 →
json.loads()尝试解析 → 失败则启发式修复(补括号、修引号、截取有效 JSON); - 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 的决策逻辑是这样的:
- 检查
ctx.analyze(AI 前置研判):攻击 Payload 确认有效,且目标返回了数据库错误 → 攻击真实; - 检查
ctx.historical_alerts:该 IP 在 10 分钟前进行了 47 次目录扫描 → 非孤立事件,是定向攻击; - 检查
ctx.threat_intel:该 IP 来自已知的恶意扫描器 IP 段 → 高度可疑; - 检查
ctx.asset_info:目标是核心用户系统的登录接口 → 影响面大; - 决策: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_stats、security_score、get_alert_trend),Agent 会自动拦截 LLM 后续对这些子工具的重复调用,避免循环浪费; - 单例模式:全局唯一的
ChatEngine实例,所有对话共享 Graph 编译结果,避免重复初始化开销。
6.2 10 大类 40+ Function Calling 工具
对话助手的能力上限,取决于它能调用多少真实世界的工具。我们定义了 10 大类工具:
| 工具组 | 工具示例 | 典型问法 |
|---|---|---|
| 告警查询 | query_waf_alerts、query_sysmon_alerts、query_muyun_alerts、query_sangfor_alerts、query_vulnerabilities | "最近有什么高危告警?" |
| 资产管理 | query_servers、query_domains、query_business_lines | "用户中心业务线有哪些服务器?" |
| 安全策略 | query_firewall_policies、query_ddos_blacklist、query_muyun_rules | "当前防火墙有哪些封禁策略?" |
| 统计分析 | get_dashboard_stats、get_alert_trend、get_workorder_stats | "本周告警趋势怎么样?" |
| 智能分析 | ip_association_analysis、domain_association_analysis、security_score | "分析 203.0.113.42 的关联行为" |
| 报告生成 | generate_daily_report、generate_weekly_report、generate_handover_summary | "生成今天的日报" |
| 安全巡检 | security_inspection | "执行一次安全巡检" |
| 合规检查 | compliance_check | "检查一下数据库配置是否符合等保要求" |
| 应急响应 | emergency_response | "发现勒索软件怎么办?" |
| 知识检索 | search_platform_manual、search_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 应用中的典型实践:
- 单一职责:每个 Agent 只做一件事,提示词更容易优化,行为更可控;
- 独立调试:Agent 3 的审查质量不行?只调 Agent 3 的提示词,不影响其他环节;
- 并行化可能:Agent 3 的逐条审查可以并行执行(如果条款数量多),大幅缩短总耗时;
- 成本和精度的平衡: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 格式不合法。
解决方案:
- 多层约束:System Prompt 明确定义 JSON Schema → 正则提取 JSON 块 →
json.loads()解析 → 启发式修复 → Schema Validator 校验 → 失败重试(最多 2 次); - 温度控制:需要结构化输出的场景 temperature=0.1,需要创意的对话场景 temperature=0.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 是高风险操作 —— 误触怎么办?越权怎么办?
多重防护:
- 二次确认:Critical 操作(如封禁、隔离主机)弹出确认对话框,需二次点击;
- RBAC 权限:飞书用户 → 平台用户 → 角色权限,无权限用户点击按钮即拒绝;
- 全链路审计:
auto_audit装饰器自动记录每次处置操作(操作人、时间、对象、结果、原始告警); - 时长上限:临时封禁有最大时长限制,防止误设永久封禁;
- 回滚能力:每次封禁操作同时生成 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 而不是自己写循环?
在对话引擎的实现上,有三个选项:
- 手写 while 循环:最灵活,但状态管理、边界条件处理、并发控制全部要自己写;
- LangChain AgentExecutor:开箱即用,但黑盒程度高,难以定制"达到最大轮次后强制文本回复"这种逻辑;
- 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 降本经验
- 批量分析是最大的省钱手段:逐条分析 vs 批次分析,Token 消耗差 3-5 倍;
- SPL 缓存很重要:相同查询条件 5 分钟内不重复调 Splunk,也间接减少了传递给 LLM 的 Token;
- 提示词也有 Token 成本:92KB 的 System Prompt 每次调用都要发送。我们通过分层提示词(基础 Prompt 固定 + 动态注入关键上下文)优化后,日均节省约 ¥5;
- 非高峰期降级:夜间 0-6 点,非 Critical 告警使用 qwen-turbo(比 deepseek-v4-pro 便宜 10 倍),白天人工复核。
十八、写在最后
构建这个平台的半年多时间里,我最大的感悟是:AI 不会取代安全分析师,但会用 AI 的安全分析师一定会取代不会用 AI 的。
大语言模型给安全运营带来的,不是"自动回复几个告警"那么简单。它更像一个支点,撬动了告警研判、知识沉淀、自动化处置、合规审查等一整条运营链路的重构。
当安全设备会"说话"、告警能"自述病情"、处置可以"一键完成"、知识库能"随问随答",安全运营才能真正从"消防队"升级为"免疫系统"。
如果你也在做类似的事情,或者对文中的任何技术细节感兴趣,欢迎交流讨论。安全运营的智能化之路,我们都在路上
文章标题:SOC 安全运营平台从 0 到 1
文章链接:https://aiwin.net.cn/index.php/archives/4531/
最后编辑:2026 年 7 月 15 日 13:46 By Aiwin
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)