说明: 这是一个内部、面向商业化的项目。下面只描述产品背景、用途,以及我作为主力开发的工作范围。引擎内部细节、专有方法和源代码不放进对外材料。
背景
团队此前已经构建了一个成熟的概率化网络风险分析引擎 —— 准确率不错,但只对能手写规约的人开放。引擎的输入格式是写给领域专家的;而目标用户 —— 保险承保员 与 中小企业经营者 —— 没法直接对它操作。
平台要解决的就是这个落差:把引擎包装成一个非专家也能用的产品 —— 一个十分钟左右走完的引导式体验,而不是要请领域专家从零写规约。
它做什么
最高层抽象:平台从单一的 公司网址 出发,引导用户走完:
- 自动预填 —— 平台会尽量从公开信息里把能填的字段填上。
- 核对 —— 用户确认或修改预填值,置信度提示告诉用户应该重点关注哪些字段。
- 对话式补全 —— 网站抓不出来的字段,由 AI 助手以自然语言分组提问的方式收集,而不是堆成一个 22 题的表单。
- 结构化表单复核 —— 一个由前几步预填好的多步录入向导,附带草稿自动保存。
- 损失估算 —— 基于历史事件数据的财务影响估算,附带承保员可以审计的推理过程。
- 风险分析报告 —— 高管摘要 + 系统健康概览 + 优先级建议。
设计目标:承保员从输入网址起十分钟内看到一份可用的风险画像,而且任何刷新或关标签页都不丢进度。
整体架构一眼看
一张图把各部分关系说清楚。平台坐在中间;右侧两个数据库 是它的证据来源(实时威胁情报 + 漏洞库,以及历史事件与损失库);左侧三个 AI 能力 才是用户真正接触的部分 —— 从 URL 抽取公司画像、对采集到的画像做系统健康分析、基于历史事件的事件影响(损失)估算。下面要讲的录入向导、AI 评估机器人、RAG 损失估算、JELAS 风险引擎,都对应到这五个盒子中的某一个。
我的角色 —— 团队产品侧主力开发
底层风险引擎本身是团队的另一个研究产物。我的工作专注于把它转成一个可部署的产品,端到端拥有下面这一整层产品代码。
前端
- 多页面 Web 前端,跨 8 个用户页面统一的暗色 cyber 设计系统 —— glassmorphism 卡片、渐变按钮、统一的返回导航、可访问的色彩对比度。
- 5 步引导式录入向导,带步骤导航、客户端校验、JSON 导入 / 导出、草稿自动保存 —— 半填的提交可以扛住刷新、关标签页、明天回来继续。
- 对话式 AI 机器人 UI,流式响应 + 实时更新的 Collected Fields 侧边栏,让用户能看清平台正在抽取出来的是什么。
- 置信度配色的表单字段(高 / 中 / 低三种 badge)放在核对页,让用户扫一眼就好,而不是逐项重读。
- 结果页 —— 损失估算 + 最终风险报告,含高管摘要、结构化表格、优先级建议。
后端
- Flask 应用的完整路由层 —— 录入、草稿持久化、AI 流式响应、分析触发、结果获取。
- Server-Sent Events (SSE) 用于流式 AI 响应和长任务进度 —— UI 永远不会被慢的上游卡住。
- 按公司的提交存储采用
latest + history的保留模式,让重复提交既安全又可审计。 - 集成胶水层串联用户面流程与团队底层引擎 —— 引擎本体保持不动,由产品层负责措辞、错误处理、进度反馈。
数据层
- SQLite 承载用户 / 会话 / 审批表,首次启动自动建库,零配置启动。
- 按公司版本化的提交记录,draft / publish 两态。
- 结构化日志用于审计追溯与 AI 请求追踪 —— 在一个事后必须能解释决策的领域里很重要。
用户认证与管理
- Google OAuth 登录(基于 Authlib),邮箱 / 密码兜底布线但默认隐藏。
- 管理员审批工作流 —— 新用户落到 pending-approval 页直到管理员通过;注册、批准、密码重置都有 SMTP 通知。
- 两类用户角色(SWE 自评 / 保险承保),按角色分流 —— 同样的页面但 “Continue” 链接不一样,让每个 persona 看到与自己最相关的流程,看不到无关的步骤。
- 管理员面板 处理用户审批、角色分配、账号管理;Flask 的
before_requesthook 给每条受控路由强制 auth + 审批。
云端部署与运维
- 生产环境部署在共享的 Linux 服务器上,
gunicorn作为 WSGI 进程主管 —— 守护进程化,带 PID 文件管理、日志轮转、优雅停机。 - 通过保留 HTTPS 隧道域名做对外暴露,让 demo URL 跨会话保持稳定 —— 早期 review 反馈中最普遍的痛点就是 URL 漂移,所以这一笔小投入意义不小。
- 健康检查 + 日志 tail 命令编进运行脚本,30 秒内就能确认线上状态。
内部工具、反馈与管理
- 管理员用户管理 UI(通过 / 拒绝 / 改角色 / 禁用),带审计日志。
- 反馈收集带持久化 —— 用户可以在平台内提交评论,团队从管理员视图查看与分流,反馈与用户会话绑定以便溯源。
- 草稿 / 发布 双态切分 —— 草稿对用户私有,发布后的提交才暴露给团队评审。
技术栈
我用来搭产品层的工具栈(底层风险引擎是团队内部 IP,不在此描述):
| 层 | 工具 |
|---|---|
| Web 框架 | Flask(Python) |
| 前端 | Tailwind CSS、原生 JS |
| 认证 | Authlib(Google OAuth)、bcrypt、Flask 会话 |
| 邮件 | SMTP(注册 / 审批 / 密码重置通知) |
| 数据库 | SQLite(用户、会话、审批、提交记录) |
| LLM API | OpenAI(chat + 结构化抽取,走 SSE) |
| RAG | SentenceTransformers(all-MiniLM-L6-v2)做事件检索 |
| Web 抓取 | Jina Reader API 取公开页面内容 |
| 知识图谱 | PyKEEN、NetworkX、PyVis(与引擎对接的层) |
| 数据 | Pandas、NumPy |
| WSGI | gunicorn(守护化、PID 跟踪、日志轮转) |
| 公网访问 | ngrok 保留域名的 HTTPS 隧道 |
| 环境配置 | Vagrant 提供 VM 化的开发环境 |
上线状态
部署在共享的 Linux 服务器上,通过保留域名的 HTTPS 隧道对外,已用于内部评估和合作 demo。平台属于内部、商业化前阶段的项目;源代码私有。
截图
主页 —— 引导式工作流,从 URL 到风险报告约 10 分钟
主页用大白话告诉用户期望:上方一句话 pitch「丢入公司网址、答几道问题、拿到风险画像」;左侧三步计划;右侧把同样三步以「Your Workflow」进度面板镜像;以及一个明确的 ~10m 时长 tile。顶栏的角色 badge(SME / Insurance)从第一屏就让 persona 化路由可见。
核对 —— 对自动抽取字段做置信度配色的复核
自动抽取的字段在这里落地,每个字段带 置信度 badge(Cyan / Blue / Red),下方引用了对应的来源片段。用户扫一眼就好,不必逐项重读 —— 只需修改系统标记为不确定的字段。
评估对话 —— 对话式补全 + 实时 collected-fields 面板
对话式助手负责收集 22+ 个公开网站抓不到的字段,按主题分组提问,让用户可以批量思考。右侧 Collected Fields 面板随每条回复实时更新 —— 等机器人说 “请确认” 时,用户已经能看到平台抓到的全部内容。
历史事件 —— 用于对比的相关历史泄露
每张事件卡展示事件类型、记录日期、估算损失,以及完整的历史背景 —— 让承保员能看清某条历史事件 为什么 被检索为可比对象,而不只是一个数字。筛选器允许用户在线扩大或缩小对比集合。
风险分析结果 —— 高管摘要、风险等级分布、系统健康
结果页用 Executive Summary 开场(总分、影响等级、点名最高风险系统),让承保员几秒内就抓到要点。下方的 Risk Tier 环形图与 System Health 雷达图给出一眼可读的「风险落在哪里」,再向下钻取系统级的具体发现。右上角固定的 Share Feedback 按钮是平台内反馈闭环的入口。