技术路线

按工作台 index.html 自上而下各区块,对应前端事件、HTTP 接口与服务层实现。

1. 页面骨架与静态资源

工作台对应 整页 docs-shell;三栏 doc-layout(左站点、中主栏、右本页目录)
实现 web/index.html 结构;样式 web/styles.css;逻辑 web/app.js;主题 web/docs-theme.js(本页仅加载主题脚本)
Flask 下发 api_server.pyGET / 返回 index.htmlGET /styles.cssGET /app.js 与根路径相对引用对齐

2. 顶下工具带(检索增强 · 会话指标)

DOM #useRag 复选框;#metricTotal#metricHigh 数值
实现 app.jsrefreshToolbarMetrics()GET /api/performance,取 performance.total 与风险计数中高/紧急之和写入工具带
服务端 api_server.pybuild_performance_overview(session_store)src/services/workbench_service.py

3. 语音接警(内部流水线)

DOM 警情编号/补充字、#ingestAudioFile#ingestVoiceWorkbenchHint
鉴权 若需 Bearer:可将令牌写入 localStorage.plice_internal_token(本页已不提供输入框),或由网关注入;请求头由 internalAuthOnlyHeaders() / internalRequestHeaders() 附带 AuthorizationX-Caller-ServiceX-Request-Id
主流程 initWorkbenchVoice() → 选文件后 runVoiceWorkbenchPipeline()POST /internal/v1/uploadsmultipart/form-data,含 auto_processauto_analyzeuse_rag 及接警字段)→ 轮询 GET /internal/v1/media-jobs/{id} → 若有 analyze_job_id 则轮询 GET /internal/v1/jobs/{id}applyLatestInternalAnalysis()GET …/incidents/{id}/analyze/latest 取结构化结果并复用 renderAnalyzeResultFromApi()
说明 工作台不展示 Canonical JSON;流程末仍会 GET /internal/v1/incidents/{id} 取 ASR 等字段回填报警原文。对接排错可直接调该 API。
后端入口 api_server.py 注册 build_internal_blueprint(_ingest_service),前缀 /internal/v1src/adapters/http/blueprint.py + IngestService

4. 警情输入与研判记录

DOM #exampleSelect#alarmText#analyzeBtn#analyzeHint#historyList
文字研判 点击「开始研判」→ POST /api/analyze,JSON 体 { alarm_text, use_rag };成功则 renderAnalyzeResultFromApi() 更新摘要/风险/法律依据等,并 renderHistory()
服务端 analyze_alarm_with_bukong()record_analysis();可选内联布控写入会话;snapshot_bukong_to_session();返回 markdownbukongofficer_briefhistory(接口仍可能含 disposal_nav,工作台页不展示)
历史列表 GET /api/historyrefreshHistory() 在首屏与研判成功后调用

5. 研判结果、关键信息、法律依据

DOM #resultMeta#missingHint#workBukongHint#summaryBox#suggestionBox#keyInfoBox#work-bukong-output / #bukongBox#lawBox
实现 renderAnalyzeResultFromApi() 拼表与摘要;renderKeyInfo()mergeBukongFromAnalyze() 根据 bukong 回填表单并写入 #bukongBox;接口 markdown 已含布控(merge_incident_and_bukong_markdown
数据形状 services/workbench_service 中研判结构化字段一致(警情类型、风险、摘要、处置建议、法律依据、关键信息等)

研判记录总览(/judgments

页面 web/judgments.htmlweb/judgments.js;左侧窄栏为条目列表,右侧为与研判专页相同的 presentation 布局(共用 ar-presentation-render.js
列表数据 GET /api/history?limit=120;前端将返回的 history 逆序后渲染为可点击条目
详情数据 点击条目后 GET /api/analysis-presentation/<analysis_id>,响应含 presentationanalysis_iduser_feedback,由 window.pliceArPresentation.renderAnalysisPresentation() 写入右侧 DOM

研判专页置信度(模型自评 + 规则校准)

专页与总览右侧仅展示「置信度 N%」,不在界面展示下列长说明;数据仍写入 presentation.ai.confidence_provenance 供排障与审计。

实现 src/services/analysis_confidence.pybuild_confidence_bundle();研判落库时经 attach_confidence_bundle() 写入 result,再进入 presentation
正常路径 方法 model_calibrated_blend:取模型自评分 analysis_confidence(整数 1–100)与规则校准分(考察关键信息完整度、报警原文长度、规程检索上下文、摘要/处置建议/法律依据等信号),按权重 0.42(模型)+ 0.58(规则)加权后取整并限制在约 22–96 区间。面向用户的原文案形如:「综合模型自评(例如 85%)与规则信号(例如 80%)加权得到;规则侧考察关键信息完整度、规程上下文与输出充实度。」(百分数为当次计算值,非固定)
模型说明 若模型返回 confidence_rationale,会写入 confidence_provenance.model_rationale;历史上前端曾将其以「(模型说明:…)」拼在置信度说明后,现已不在界面展示
无自评 方法 calibration_only:模型未输出 analysis_confidence 时,展示分为规则校准分;原文案说明以规则信号为主(关键信息、规程检索、摘要建议等)
解析失败 方法 parse_fallback:JSON 解析失败时置信度保守压低,原文案提示务必人工复核

6. 布控(研判同次输出 + 可选校正)

DOM 主区 #work-bukong-output;可选折叠 #work-bukong-adjust 内含 #incidentBg#suspectDesc.js-bukong-ex#bukongBtn#downloadBukongBtn
会话回填 loadWorkbenchBukongSnapshot()GET /api/session-snapshot,与研判返回的 bukong 共用会话态
手动重算 POST /api/bukong;成功后 mergeLatestMarkdownWithBukong() 更新主下载用 Markdown
下载 主按钮 incident_analysis.md(研判+布控);bukong_plan.md 为仅布控

7. 复核与导出

DOM 单选 reviewChoice#reviewNote#saveReviewBtn#downloadMdBtn#downloadJsonBtn#reviewHint
保存复核 POST /api/review,JSON 含 review_choicereview_noteanalysis_id、可选 incident_type_override(人工校正类别)→ build_review_record()save_review_record()
导出 研判 Markdown 来自内存态 state.latestMarkdown;复核 JSON 由当前表单与 state.latestResult 组装,均用 downloadText() 本地下载

8. 性能统计(独立页 /performance

DOM web/performance.html#sec-perf-main:五卡、风险条、耗时表、复核分布表、#perfScoreTableweb/performance.js 绑定 #refreshPerfBtn
数据拉取 工作台 refreshToolbarMetrics() 与性能页 performance.js 共用 GET /api/performance;响应含 performancerisk_countselapsed_trendreview_distributionscorecard
服务端 build_performance_overviewbuild_elapsed_trendbuild_review_distributionscorecardapi_server._build_scorecard() 组装评审维度行与布控计数

9. 关键源码索引

  • Flask 与 REST:api_server.py
  • 会话与研判/布控/绩效:src/services/workbench_service.py
  • 专网内部 API:src/adapters/http/blueprint.pysrc/adapters/ingest/service.py
  • 性能统计专页:web/performance.htmlweb/performance.js
  • 规格说明:docs-md/04-说明/PRIVATE_NETWORK_ADAPTER_SPEC.md