背景与协作范围
说明: 这是一个面向中小企业与保险承保/风控人员的外部产品。项目将团队已有的概率化网络风险引擎转化为可操作的 Web 评估流程;我作为产品侧主力开发,负责前端、应用服务、数据与 AI 集成、安全控制和 AWS 生产发布,团队负责底层风险模型与领域规则。
产品工作流
评估流程由七个连续阶段组成:
- 自动化企业画像: 用户输入公司网址后,Jina Reader 从公开页面采集信息并生成企业画像建议字段,每个值都保留来源。
- 证据与字段核验: 用户结合置信度和来源逐项检查自动提取的字段,在进入后续评估前确认或修正建议值。
- 对话补全: 对话助手按主题询问公开证据无法覆盖的信息,并将回答转换为待复核的结构化字段。
- 结构化表单复核: 多步表单集中呈现已收集字段,用户可以修正内容、保存草稿、恢复未完成的录入,并在提交前完成复核。
- 历史事件检索与损失估算: 超过 1.2 万条 CyLoss 事件用于检索可比案例。语义排序综合事件文本、行业、地区、时间和已有损失证据,为损失估算提供参照。
- CRADLE 场景构建: CRADLE 接收对话、网络拓扑图、PDF、Markdown 和 TXT 材料。资产、网络关系和攻击背景都保留来源,便于后续复核。
- JELAS 风险分析与报告: 通过校验的场景交给 JELAS 进行风险分析,结果整理为管理摘要、系统级发现和优先处理建议。
约十分钟的目标仅涵盖前四个阶段,并产出初步企业风险画像。CRADLE 场景构建和完整的 JELAS 风险分析属于后续阶段。
系统架构
实现按五层组织。React 客户端承载引导式体验,Flask 提供应用边界和风险引擎接入,PostgreSQL 与版本化提交保存生产状态,AI 模型、文档抽取和语义检索负责证据补全,身份控制、应用安全和 AWS 运行维护共同约束访问与发布。
这是一个部署在单台 AWS Linux 主机上的中小型 Web 产品。Nginx 终止 HTTPS 并反向代理到 Gunicorn,Flask 进程由 systemd 管理。SSE 和 REST 风格交互共用同一应用边界,团队风险引擎作为独立维护的依赖接入该边界。
工程化与产品交付职责
前端工程
- 主要工具链: React、Vite 和 Tailwind CSS 构成日常维护的前端。原生 JavaScript 仅用于轻量交互,以及仍在逐步迁移的旧页面。
- 可复用产品流程: 企业画像、证据核对、评估对话、事件参照、场景采集和结果页面共享组件与交互规范。响应式布局覆盖常见的笔记本和平板宽度。
- 表单与草稿状态: 一套共享多步状态连接对话、字段核对和结构化复核。客户端校验即时提示问题,服务端校验作为最终判断。版本化草稿让中断后的评估可以继续。
- 运行状态呈现: 抽取、检索和分析都设置加载、错误和空状态。SSE 持续更新模型输出和任务进度,同时明确标示不完整或可恢复的结果。
Flask 服务与风险引擎集成
- 应用边界: Flask 为提交、证据和结果提供 REST 风格边界,并通过 SSE 传递模型输出与任务进度。输入在任务开始前完成校验,可恢复错误使用一致的结构,便于客户端解释和重试。
- 引擎适配: 应用把通过校验的产品提交转换为团队风险引擎输入,再将结果映射为稳定的展示模型。工作流状态、用户可见错误和进度反馈由产品层管理。
- 来源感知采集: 拓扑图用于补充资产和网络关系。PDF、Markdown 与 TXT 只在材料提供依据时补充攻击背景。仍不确定的值保持未完成状态,交给后续对话确认。
数据与状态管理
- 按环境选择存储: PostgreSQL 是 AWS 生产环境数据库,SQLite 用于本地开发和轻量部署。两种数据库遵循同一套迁移路径,保持应用结构一致。
- 提交生命周期: 事务写入保存版本化企业提交及其证据引用。草稿与发布状态把用户进行中的内容和团队可评审记录分开管理。
- 事件检索: 超过 1.2 万条 CyLoss 记录使用 SentenceTransformers 嵌入,并结合行业、地区和时间信号进行语义排序。服务启动后会预热嵌入缓存,避免首次检索承担完整的模型加载过程。
- 可追踪性: 结构化日志记录请求结果、抽取状态和风险引擎交接,同时避免在常规运行日志中写入敏感评估内容。
AI 模型接入与结果校验
- 统一供应商边界: OpenAI 与 Anthropic 通过统一的模型接入层进行选择。模型按任务选择,结构化抽取、对话和文档理解可以使用各自配置的供应商。
- 有界模型调用: 结构化输出按预期 schema 解析和校验。超时与重试次数受到限制,不完整响应会作为可恢复状态返回,不会直接进入已完成评估。
- 可复核抽取: Jina Reader 内容和 CRADLE 上传材料保留来源引用。建议字段通过 schema 校验后才能写入提交,不确定字段回到对话流程继续确认。
- 检索与分析上下文: CyLoss 匹配用于历史事件参照和损失讨论。PyKEEN 与 NetworkX 保留在风险引擎集成层,用于表达和分析已经确认的场景。
身份、权限与应用安全
- 受控账号: Google OAuth 提供登录,新账号需经过管理员审批。RBAC 区分中小企业、承保和管理操作,Brevo 负责注册、审批、拒绝和密码重置通知。
- 会话与请求保护: 安全会话 Cookie 启用 HttpOnly、SameSite 和 HTTPS 约束。Flask-WTF 为表单及 JSON 操作提供 CSRF 保护,Flask-Limiter 对抽取和模型调用设置更严格的速率限制。
- 外部输入控制: 获取公司网站前,SSRF 校验会检查协议、解析后的目标和地址类型。上传处理限制请求体和解码后大小,只接受支持的类型,并把空文件、不可读内容或部分结果报告为可恢复错误。
AWS 部署与运行维护
- 单机拓扑: 生产应用运行在一台 AWS Linux 主机上。Nginx 与 Let’s Encrypt 提供 HTTPS 入口,Gunicorn 承载 Flask,systemd 负责进程管理。
- 分环境配置: 机密信息和部署参数通过环境变量及主机配置管理,并与本地开发设置分离。代理感知配置保证身份认证和账号链接使用正确的公网 HTTPS 来源。
- SSE 代理配置: Nginx 对事件流关闭缓冲,并为分析请求设置有界且适合长任务的超时。
- 发布检查: 健康检查覆盖 Web 进程、代理链路和受控登录页。结构化日志用于诊断,发布前完成配置和迁移检查,随后执行受控重启。
运营与评审闭环
- 账号管理: 管理界面支持审批、拒绝、角色变更和账号停用,每次操作都会留下审计记录。
- 反馈处理: 用户可以从产品内提交带有流程上下文的反馈。团队结合相关步骤进行分流,并记录处理结果,供后续版本参考。
- 评审状态: 草稿只对提交者可见,发布版本才对授权评审人员开放,用于风险评估复核和产品验证。
技术栈
| 层 | 工具 |
|---|---|
| 前端 | React、Vite、Tailwind CSS、少量原生 JavaScript |
| 应用服务 | Flask、RESTful API 边界、Server-Sent Events (SSE) |
| 数据库 | PostgreSQL 用于 AWS 生产环境,SQLite 用于本地或轻量环境 |
| AI 供应商 | OpenAI、Anthropic |
| 检索与抽取 | SentenceTransformers、CyLoss、Jina Reader、PDF、Markdown、TXT 与拓扑图采集 |
| 风险集成 | PyKEEN、NetworkX |
| 身份与通知 | Authlib、Google OAuth、RBAC、Brevo HTTPS API |
| 应用安全 | Flask-WTF、CSRF、Flask-Limiter、SSRF 校验、安全 Cookie、上传限制 |
| 生产运行 | AWS Linux、Nginx、Let’s Encrypt、Gunicorn、systemd |
上线状态
平台已部署于 AWS Linux 主机,面向中小企业与保险承保/风控人员提供 Web 风险评估。Nginx 与 Let’s Encrypt 提供 HTTPS 入口,外部用户通过受控账号访问,账号审批和 RBAC 用于区分 SME、承保及管理权限。当前实现仓库可通过本页面链接查看。
截图
主页 —— 引导式工作流,从 URL 到初步风险画像约 10 分钟
主页同时呈现流程说明和当前进度。左侧列出企业画像、历史事件参照、场景建模与损失估算,右侧的 Your Workflow 面板使用相同顺序。~10m 区块对应初步企业风险画像,CRADLE 场景整理和完整 JELAS 分析在后续阶段执行。页首角色标记显示当前用户进入 SME 或 Insurance 工作流。
核对 —— 对自动抽取字段做置信度配色的复核
核对页把自动抽取值、置信度标记 和来源片段放在同一字段区域。用户可以先处理标记为不确定或缺失的内容,同时保留对其他字段的逐项复核能力。
评估对话 —— 对话式补全 + 实时 collected-fields 面板
对话助手按主题收集公开网站无法提供的 22 个以上字段。每条回复完成解析后,右侧 Collected Fields 面板更新字段状态和取值。用户在最终确认前可以复核已收集内容并补充缺失项。
历史事件 —— 用于对比的相关历史泄露
历史事件卡展示事件类型、记录日期、估算损失和事件背景。候选池先按行业与地区筛选,再结合语义相似度、时间和损失证据排序。承保员可以通过筛选器按事件类型、相关性、日期或损失规模调整结果。
风险分析结果 —— 高管摘要、风险等级分布、系统健康
结果页的 Executive Summary 区域包含总分、影响等级和最高风险系统。Risk Tier 环形图与 System Health 雷达图分别呈现风险等级分布和四项健康指标,用户可以继续查看系统级发现。右上角的 Share Feedback 按钮用于提交与当前结果相关的反馈。