鉴微 INSIGHT · DOCS
Technical Architecture

鉴微 INSIGHT · AI Agent 方向结构文档

基于项目实测(backend.py / insight-replica.html / data.json)梳理,所有接口均已在 2026-11-06 实际运行验证。
项目定位:漏洞管理平台的 AI 助手 —— LLM 只负责"组织语言",事实全部来自平台结构化数据,每条结论可溯源,缺失数据明确标注"无法判断"。

#一、项目总体架构

┌─────────────────────────────────────────────────────────────┐
│                    insight-replica.html(前端,单文件)        │
│   AgentBridge(Agent 接入层)  ├─ local 模式:LocalActions     │
│                              └─ remote 模式:fetch /agent-api│
└───────────────┬─────────────────────────────────────────────┘
                │ HTTP(同源托管,无 CORS)
┌───────────────▼─────────────────────────────────────────────┐
│                    backend.py(纯标准库后端)                  │
│  ① 静态托管前端      ② 平台数据 CRUD(/api/*,读写 data.json) │
│  ③ Agent 契约接口(/agent-api/*)                              │
│  ④ DeepSeek 调用(OpenAI 兼容协议,纯 urllib)                  │
└───────────────┬─────────────────────────────────────────────┘
                │ HTTPS / chat/completions
┌───────────────▼─────────────────────────────────────────────┐
│         DeepSeek LLM(deepseek-flash,thinking=disabled)     │
│         失败自动降级为后端内置模板生成(generatedBy 标注来源)    │
└─────────────────────────────────────────────────────────────┘

三层降级设计(响应中 generatedBy 字段标明来源,前端据此显示"生成方式"):

级别来源触发条件
1deepseek(真实 LLM 分析)配置了 API Key 且调用成功
2template(后端内置模板)LLM 未配置 / 调用失败 / 返回空正文
3前端 LocalActions(本地模拟)前端为 local 模式(未接远程后端)

#二、AI Agent 核心设计思想

#2.1 事实与语言分离(防幻觉架构)

LLM 不接触任何"自由发挥"空间:

平台事实采集(确定性代码)──→ facts JSON ──→ LLM(仅组织语言)──→ 摘要/步骤
     ↑                                                          │
     └────── knowledge / intel / assets / software / tickets ────┘

#2.2 结论可溯源(Citations 机制)

每次 AI 输出都附带 citations(依据清单)与 unknowns(缺失清单):

citations 条目数据来源
VPT 归因配置中心 VPT 规则(评分公式透明可配置)
情报信息漏洞详情四字段:EXP / POC / 补丁 / 在野利用
资产档案资产台账(资产 IP、责任人、风险等级)
知识库命中漏洞知识库(同 CVE / 同名条目)
同源处置同 CVE 已修复记录(处置历史参考)

置信度规则:资产已纳管 → high/较高;未纳管 → mid/中(资产未纳管,版本信息缺失)。

#2.3 AgentBridge:前端 Agent 动作总线(insight-replica.html:533-596)

统一入口 window.InsightAgentAPI.call(action, payload),三级路由:

call(action) ─┬─ remote 模式且有映射 → POST /agent-api/<route>   (真实后端)
              ├─ register() 注册的 handler → 自定义接管           (扩展点)
              └─ 兜底 → window.LocalActions[action]()            (本地模拟)

#2.4 LUI 任务拆解可视化(Agent 执行过程的透明化)

前端把 Agent 的执行链具象为"步骤逐条点亮"(真实调用工具,非纯动画):

功能一 JUDGE_STEPS                      功能三 FIX_STEPS
──────────────────────                  ──────────────────────
1. getVuln            读取漏洞上下文      1. getVuln           读取漏洞上下文
2. getVptAttribution  计算 VPT 归因      2. getVptAttribution 计算 VPT 归因
3. searchKnowledge    检索知识库/情报库   3. searchKnowledge   检索知识库与处置记录
4. getDisposalRecords 处置记录时间线      4. getAssetProfile   拉取资产档案与责任人
5. organize           组织语言(溯源)     5. organize          组织语言(逐条溯源)

每步实时显示执行结果(如"100 分(P0)· 特殊规则未命中"、"命中 2 条"、"未纳管")。

人工在环(Human-in-the-loop):AI 输出仅供参考 → 人工核对 → 点"采纳"才真正建工单 → 写审计日志。UI 明确标注:"AI 生成内容仅供参考,采纳前请人工核对。"


#三、Agent 契约接口(/agent-api/*)

统一响应契约:{ ok: bool, data: {...} },出错返回 { ok: false, error: "..." }。

#3.1 功能一:漏洞研判摘要 POST /agent-api/judgement(读取类)

请求:{"kind": "ip" | "web", "id": 240}

响应 data 结构(实测值):

{
  "vuln": {"id","name","level","vpt","type","cve","asset","status"},
  "attribution": {"score": 100.0, "key": "P0", "byRule": false},
  "summary": "【研判摘要】...(≤150字,由 DeepSeek 生成)",
  "citations": [{"label","from","detail"}, ...],      // 2~5 项
  "unknowns": ["平台未采集,无法判断...", ...],
  "confidence": {"level": "high", "text": "较高"},
  "generatedBy": "deepseek" | "template"
}
  1. _get_vuln 取漏洞 → _facts 收集:VPT 计算 + 资产 + 软件 + 知识库 + 情报 + 同 CVE 已修复记录
  2. 组装 facts JSON → llm_judgement_summary 调 DeepSeek(失败 → _template_judgement 降级)
  3. 返回摘要 + 引用 + 缺失 + 置信度

执行链(backend.py handle_judgement,408-458 行):

VPT 评分算法(calc_vpt,287-320 行,与前端同口径):

总分 = 资产维度×权重% + 漏洞维度×权重% + 情报维度×权重%
漏洞维度 = 等级分(超危100/高危80/中危50/低危10/信息0) × 权重
P 级映射:>80→P0,>74→P1,>49→P2,>0→P3,else P4
特殊规则优先:如"外网资产+高危→81"直接赋值(byRule=true)
当前配置:资产 0% / 漏洞 100% / 情报 0%(演示配置)

#3.2 功能三:修复建议本地化 POST /agent-api/fix-advice(读取类)

请求:{"kind":"web","id":311}

响应 data 结构(实测):

{
  "vuln": {"name","level","vpt","type","cve","asset","source"},
  "assets": [{"ip","name","org","owner","biz","from"}],   // 逐条标注 from 溯源
  "managed": false, "versionKnown": false, "versionText": "...",
  "kbFound": false, "kbText": "...",
  "sameClosed": [...],
  "officialFix": "官方修复建议原文",
  "coord": {"owner","coOwner","biz","assetOwner"},        // 协同处置人信息
  "steps": ["修复步骤1", "..."],                          // 3~5条,DeepSeek 生成
  "confidence": "中(该资产未纳管...)", "confLevel": "mid",
  "unknowns": ["平台资产台账中未收录...无法判断..."],
  "generatedBy": "deepseek"
}

实测 DeepSeek 输出严格遵循约束——版本缺失时输出"具体版本号需先确认,无法判断",未编造任何版本号。

#3.3 功能三(状态变更):采纳并建工单 POST /agent-api/fix-advice/adopt

请求:{"kind":"web","id":311} → 响应:{"ok":true,"data":{"ticketId":"T-20261106-7898"}}

执行链:生成工单号 T-YYYYMMDD-xxxx → 写入 tickets → 写审计日志(操作类型"修复建议助手")。

#3.4 通用:由漏洞建工单 POST /agent-api/tickets

请求:{"vulnId":240,"kind":"ip","from":"detail"} → 响应:{"ok":true,"data":{"ticketId":"T-20261106-7253"}}

kind 可省(自动在 ip/web 两个集合中查找);from 决定审计日志的操作来源标注。


#四、平台数据层(Agent 的事实源)

存储:data.json(零依赖,首次启动自动写入种子数据),线程锁保护读写。

#4.1 数据集合(REST:/api/<collection>,支持 ?q= 全文检索)

集合键结构说明
vulns-ipvulns.ipdict 数组(id/name/cve/...30+ 字段)主机漏洞
vulns-webvulns.web同上Web 漏洞
assetsassets[IP, 名称, 组织, 来源, ?, 域, 风险, 责任人]资产台账
softwaresoftware[软件名, 版本, 主机名, IP, ...]软件台账(版本溯源)
knowledgeknowledge[名称, 等级, 类型, CVE, 发布日期]漏洞知识库
intelintel[名称, 等级, CVE, ...]情报库
ticketstickets{ticketId, vulnId, kind, ..., status}工单
logslogs[时间, 用户, 角色, IP, 描述, 结果]审计日志
vptconfigvptConfig嵌套权重配置只读(PUT 可更新)

#4.2 漏洞对象关键字段(Agent 取数用)

事实八项:name / level / vpt / type / cve / asset / status / owner(+coOwner/biz)
情报四项:exp / poc / patch / wild          ← 全空时触发"评分依据需核实"判定
处置三文:desc(描述)/ danger(危害)/ fix(官方修复)← 240 等 5 条演示漏洞定制

#4.3 CRUD 完整可用(已实测)

GET    /api/<c>            列表(支持 ?q= 过滤)
GET    /api/<c>/<id>       单条
POST   /api/<c>            新建(漏洞自动建 ID / 工单自动补默认字段)
PUT    /api/<c>/<id>       整条更新(漏洞白名单 VULN_EDITABLE 26 字段)
PATCH  /api/<c>/<id>       局部更新(同 PUT)
DELETE /api/<c>/<id>       删除
GET    /api/health         健康检查(返回 LLM 状态)

所有写操作自动落审计日志(时间/用户/角色/IP/描述/结果)。


#五、前端 AI 功能落点(insight-replica.html,~2600 行单文件)

区块位置说明
注释/目录头1-524CSS(约 520 行,Ant Design 风格色板)
AgentBridge 调用层530-596动作总线 + 远程路由 + 模式持久化 + 事件
常量与 VPT 规则598-725LEVELS / VPT_RANGE / calcVptScore(与后端同口径)
DB 内存数据 & LocalActions727-1088本地模拟数据 + 各动作实现(generateJudgement 1043 行含完整 citations 逻辑)
路由/菜单1146-13108 个页面模块
仪表盘1434+AI 漏洞研判面板:扫描评分异常(高分×情报缺失),列出"待关注的评分异常 21 条"
漏洞详情页1698-1938首张卡片即 AI 研判卡(JUDGE_STEPS 自动执行)
修复建议助手抽屉1939-2118FIX_STEPS + 结果渲染 + 采纳/复制/重生成
工单中心2119+remote 模式直连 /api/tickets 完整 CRUD

关键 UX 约定:citations 可点击弹出溯源 toast;unknowns 用"无法判断"高亮条;生成方式 attends 实时显示 DeepSeek 真实分析 / 模板降级 / 本地模拟。


#六、运行与验证记录(2026-11-06 实测全部通过)

启动:python backend.py      →  http://127.0.0.1:8000/insight-replica.html
依赖:零第三方库(Python 3.15.2 标准库)
#测试项结果
1GET /api/health✅ {"ok":true,"data":{"llm":"deepseek"}}
2前端页面托管(HTTP 200,182 KB)✅
3CRUD 全流程(GET/POST/PUT/PATCH/DELETE + ?q= 过滤)✅
4/agent-api/judgement(ip:240 Log4j2)✅ generatedBy=deepseek,VPT 100 分 P0,4 项依据
5/agent-api/fix-advice(web:311 反序列化)✅ 5 条本地化步骤,正确标注"无法判断",无编造
6/agent-api/tickets + /fix-advice/adopt✅ 建单 T-20261106-7253 / -7898,审计日志同步
7边界:不存在的漏洞 ID✅ {"ok":false,"error":"漏洞不存在"}(404 语义 in-band)
8浏览器实测前端渲染(截图验证)✅ 仪表盘/资产/漏洞/AI 研判面板数据全部来自后端

#七、AI Agent 能力总结与演进方向

#7.1 当前已具备的 Agent 特征

能力实现方式成熟度
工具调用(Tool Use)AgentBridge 动作 → 后端路由 / 本地工具函数★★★☆☆(固定管线,非自主决策)
事实约束生成( grounded generation)facts JSON + 强 System Prompt★★★★★(防幻觉设计完整)
溯源与引用(Citations)citations + unknowns + from 字段逐条标注★★★★★
置信度表达资产纳管/版本可知 → high/mid★★★★☆
人机协同(HITL)AI 建议 → 人工采纳 → 写工单+审计★★★★★
降级与可观测三层降级 + generatedBy 标注 + 审计日志★★★★★
LUI(对话式 UI)抽屉 + 任务步骤点亮动画★★★★☆(步骤真实执行)

#7.2 与"标准 AI Agent"的差距(当前形态 = 确定性工作流 Agent)

#7.3 建议演进路线(按优先级)

  1. 已完成:API Key 移出源码,改为「在线配置 > 环境变量 > 源码默认」三级优先;写操作由管理口令保护
  2. 短期:接入正式鉴权(JWT + 操作白名单 + 角色体系),区分研究员 / 处置人 / 管理员
  3. 中期:引入标准 Tool-Calling(OpenAI function calling):把 _facts 拆分注册为独立 tools,由 LLM 决定调用顺序,从"固定管线"升级为"自主规划 Agent"
  4. 中期:加会话记忆(工单处理上下文、用户偏好),支持多轮编排
  5. 远期:跨实体长任务(批量研判、自动排期)、RAG 知识库检索、处置智能体与检测器联动闭环
  6. 规范:data.json → SQLite/MySQL(现线程锁已在,切存储成本低);补 pytest 自动化回归

#八、文件清单

文件大小角色
backend.py57 KB / 900 行纯标准库后端:托管 + CRUD + Agent 契约 + 大模型调用
insight-replica.html191 KB / ~2900 行前端单文件:8 模块 SPA + AgentBridge + AI 双助手(研判/修复)+ 大模型配置页
data.json90 KB种子/运行数据:607 漏洞 + 134 资产 + 软件台/K/情报/工单/日志
AI-Agent-方向结构文档.md本文档结构梳理 + 实测记录
vercel-deploy/—线上部署包:封面页 + 同源前端 + Vercel 函数适配层

#九、线上部署与在线大模型配置

#9.1 部署形态(Vercel 同源)

访客浏览器 ──HTTPS──▶ 自定义域名(Vercel)
                          │
    ┌─────────────────────┴──────────────────────┐
    │ /                  → index.html(静态封面页)│
    │ /insight-replica   → api/index.py(函数)   │
    │ /api/*、/agent-api/* → 同一函数(WSGI 包装) │
    └────────────────────────────────────────────┘

api/index.py 是薄适配层:用 _FakeTransport 模拟 BaseHTTPRequestHandler 的 I/O,与 backend.Handler 动态组合,业务逻辑零改动即可运行在 Serverless 环境。

关注点处理方式
代码目录只读运行时数据写入 DATA_DIR(Serverless 为 /tmp),冷启动自动重建种子数据
跨域后端统一返回 Access-Control-Allow-Origin,并处理 OPTIONS 预检
缓存HTML 响应 Cache-Control: no-store,前端迭代即时生效
密钥仅存于平台环境变量,仓库零密钥

#9.2 大模型在线配置(面向非技术使用者)

「配置中心 → 大模型配置」页允许分析师直接填写接入地址 / API Key / 模型名,无需接触代码:

生效优先级:本页保存的运行时配置  >  环境变量(DEEPSEEK_API_KEY 等)  >  源码默认值

#9.3 鉴权与可观测

能力实现
管理口令环境变量 ADMIN_TOKEN,写操作与配置接口校验 X-Admin-Token
开放读取漏洞研判、修复建议等只读 AI 能力对访客开放,便于演示
审计日志所有写操作记录时间 / 用户 / IP / 描述 / 结果
降级可观测响应 generatedBy 标注真实模型 / 模板降级,前端实时显示生成方式