证据驱动的告警研判 · 每个判定都附带可验证的证明
演示环境:队列中的告警、资产和地址为演示数据;处置动作和白名单只做记录,不会真正执行。

今日告警 按「成功迹象 → 攻击 → 升级人工 → 误报」排序,点击一行查看调查过程

在真实标注数据上的评测

合成场景:告警、主机、账号和地址均为合成数据,工具返回的是模拟结果。

后验 P(恶意) 的变化 越过上下阈值且满足交叉印证要求即结案;预算用尽仍未定论则升级人工

调查过程 每一轮:为什么查它 → 工具原文 → 读取结论 → 账本更新。可以改写任意一条证据,从那一步分叉重新调查

可观测性:OpenTelemetry 调用瀑布图
LangGraph checkpoint 时间线

策略对比

「读取噪声」模拟能力有限的小模型:以给定概率把工具输出读错。漏报 = 真实威胁被当作误报关闭,是最需要避免的错误;升级不算错,但会占用分析师时间。

正在运行基准测试(约 20 秒)…

它解决什么问题

大多数 AI 安全运营 Agent 让大模型自己决定「下一步查什么」和「结论是什么」。模型一旦读错或被工具输出里的文字带偏,结论就会出错,而且很难事后核对。

Probewise 把这两件事拆开:模型只负责读,把工具输出读成一个结论选项;控制器负责判,用贝叶斯账本累积证据,按「信息增益 ÷ 成本」挑下一项检查,证据够了才结案,并为每个判定生成可以独立重算的证明。

接收RAG 检索手册与案例
→
规划信息增益 ÷ 成本
⇄
调查调用工具 → 读取 → 记账
→
判定阈值 + 交叉印证
→
响应高危动作等人工审批
→
报告证据编号 + 引用

读判分离

读取器可以是规则、本地小模型(Ollama / vLLM),也可以是通过 MCP 接入的外部 Agent。它最多读错一条证据,不能跳过证据直接下结论。

按价值选择检查

每一步计算每项检查的期望信息增益(比特),除以成本后选最高的。沙箱这类昂贵检查只在便宜检查无法定论时才用。

证据承载式判定

判定附带先验、每条证据的似然比和哈希链。任何人都可以只凭知识库重算后验、检查记录有没有被改过。

交叉印证(稳健模式)

结案至少需要两条同方向的强证据。读取器不可靠时,漏报率显著下降,代价是更多告警被升级给人工。

人在回路与回放

高危处置通过 LangGraph interrupt 暂停等待审批;每一步都是 checkpoint,可以回到任意一步改写证据重新调查。

可观测性

按 OpenTelemetry GenAI 语义约定记录 invoke_agent / execute_tool 等 span,可以直接接入 Jaeger、Langfuse 等后端。

技术栈

LangGraph StateGraph · checkpoint · interrupt · time-travel MCP Server(stdio)+ Agent Skill RAG:BM25 + 可选向量重排 OpenAI 兼容读取器(Ollama / vLLM) OpenTelemetry GenAI 语义约定 FastAPI · SQLite checkpointer 哈希链审计 · 浏览器端独立验证 Docker

在 Claude Code 里使用

安装后把 MCP Server 加进项目,再加上仓库里的 Skill,Claude 就会以「读取器」身份调用 Probewise:它负责读工具输出,判定由账本给出。

pip install git+https://github.com/lzwhehe/probewise
claude mcp add probewise -- probewise mcp
cp -r skills/probewise-triage ~/.claude/skills/