Information Quality and Reports 2026 10 - jiale-li-orion/SecFusionAgent GitHub Wiki
信息质量与 HTML 情报报告
适用:2026-10-16 main。承接 PRD 的信息质量与报告需求、TD2 的 M4/M6 权限及 TD2A 的产品边界。逐项验收见 当前台账。
当前运行模式与费用
SECFUSION_BACKGROUND_LLM_ENABLED 控制非交互后台模型阶段。
当前本地 Compose 将此开关与 SECFUSION_EDITORIAL_ENABLED 均默认设为 false。
后台文档继续完成词法索引,跳过语义/规范提取和向量生成;自动编研同时在调度端与执行端检查开关;
WorldChange 与投影继续处理,但不新增自动 WATCH episode。确定性漏洞富化、采集和原始证据留存继续。
用户主动问答、调查和手动报告保留模型配置;读取已生成 HTML 不调用模型。 没有设置每日货币硬上限。恢复开关不会自动重放被跳过的模型阶段或历史时槽,需要显式选择补处理材料。 修改环境后必须重建相关 scheduler/worker;不要清空共用 API key 或停用整个 indexing/investigation 队列。
Token 审计按物理 ModelAttempt 汇总,重试分别计入。思考 token 是输出 token 的分项,缓存命中是输入的分项,均不重复相加。 公开定价得到的金额仅为估算;缺失用量不能计作零,也不能把估算写成 provider 返回的精确货币指标。
产品行为与权限
公开情报在原始材料之上增加模型编研,按事件整理事实、归因、分析和未知,直接提供 HTML。私人调查复用呈现能力,但继续按原账户权限读取。生成 HTML 不改变材料或调查的访问权限。
编研是独立写入流程。WORLD 原始材料查询仍不调用模型、不产生研判;情报页另外读取已发布报告。点击报告不会重新生成。目录按同主题、同文档集合与同窗口展示最新可用版本,有界分页最多检查 120 条候选;旧版固定链接仍按原权限和来源版本校验。当前通过 scripts.generate_public_brief 随时提交一至八篇公开文档,通过全部门槛后应用立即提供 URL;另有下文的自动编研调度,按近期新增材料生成专题,不强制每日凑稿。
材料入口
M1 恢复文章标题与显式发布时间,保留字段来源和精度。HTTP Last-Modified、URL 日期和采集时间不代替发布时间。只有日粒度或无时区时,不伪造精确时间。
M2 对解析材料进行版本化、确定性质量检查。错误页、访问挑战、空正文、已知安装模板等保留 Observation、EvidenceArtifact 与 DocumentRevision,但不进入 chunk、索引与语义富化。这是材料可用性判断,不是事实核验。旧修订缺少质量元数据时,读取、索引和富化边界联合检查章节与正文。
维护脚本从留存 artifact 校验原始哈希后重解析,保留旧修订,使用原 Observation 与正常 outbox。持续采集可能使同一 document 出现新 Observation,因此幂等验证要固定原 revision,不能把“再次选择最新 document”误当成固定输入重放。
编研、审校与持久化
Application 组合证据读取、M4 编研上下文、M6 生成及事务持久化;领域语义由 packages.investigation.briefing、packages.reasoning.briefing、editorial_prompt 和既有 DecisionService 持有。M1–M3 不引入推理。
- Source 和保留的 EvidenceArtifact 都必须明确公开,材料必须可用。每篇最多四个片段,每片最多 8,000 字符;截断属性进入模型上下文,禁止据此推断全文缺失某内容。
- 来源片段放入 M4
tentative,不因为编研就提升为confirmed。M6 可在 inference 中承载有归因的来源主张,仍执行既有事实与引用约束。 public-editorial-v5独立于普通研究报告 prompt,要求具体标题、按事件分节、短段落、时间和数字口径、厂商自报、分析前提及有意义的未知。禁止内部状态词、空泛观点、未证实趋势和把计划写成已发生。反例只解释写法,不是事实输入。- 第二次模型调用核对标题、章节、段落及可见未知信息。逐段审校必须完整、不重复、支持关系正确;独立
editorial_quality还检查可读性、归因、范围与无内部术语。机械检查补充段落数量/长度、布局存在和已知内部词泄漏。首轮有问题时允许一次受控修订和完整复审;仍有问题保留为review_required,不公开。 - 生成在事务外完成;提交前重新读取材料,输入摘要必须一致。不可变 Decision 与
intelligence_briefs发布记录在同一事务保存。材料、主题、规范化时间窗口和模型/策略版本构成幂等键。并发可能重复调用模型,但只保存一份同身份发布记录。
第二次模型审校不是独立事实验证。机械门槛证明引用存在、范围和权限正确,不能证明所有自然语言内容正确;真实编辑质量仍需单独评测。
独立摘要与自动编研
公开编研新增带片段引用的 report_summary,生成顺序先摘要再正文。摘要直接呈现最有价值的进展、数字和影响,避免自我介绍、免责开场与无依据的夸张;来源归因和改变判断的条件自然进入句子。摘要单独审校,公开目录直接读取摘要,HTML 在正文之前显示。旧报告缺字段继续可读,历史摘要与不可变决策不回写。
自动编研由现有 scheduler 通过 durable outbox 提交给 Celery;packages.reasoning.editorial 持有编研任务生命周期,application 组合材料选择与公开发布。默认每 6 小时一个 UTC 时槽,每槽至多一份、最多四篇近期公开材料;不补跑历史时槽。仅选择最近 14 天有可靠发布时间、通过材料与权限检查且具备具体主题的材料,优先互补来源;主题规则是选题辅助,不代表多源事实确认。自动任务保留内容指纹,已经尝试编研的相同内容不因重新采集或换时槽重复生成。无材料记为 skipped,审校不通过记为 review_required,不绕过审校。
任务有持久化状态、固定输入、两次上限尝试、退避与租约;模型调用在事务外,发布事务校验租约所有权与固定材料摘要。崩溃可恢复,重复投递不会重复认领;超时任务失去发布权。编研为显式启用能力;2026-10-16 本地部署已暂停后台模型调用,私有材料不能进入自动流程。记录运行状态与报告 ID,原始决策/发布记录继续不可变。
public-briefing-v2 在首轮审校未通过时只允许一次模型修订,再进行完整独立审校;每次生成最多四次逻辑模型调用,仍受整个任务的 840 秒预算限制。修订不能增加材料或放宽门槛,最终仍不通过则保留 review_required。发布记录的 revision_history 保存首轮审校和原决策坐标。选材冻结事务通过 PostgreSQL 事务锁串行预留内容指纹,避免跨时槽同时选中相同内容;版本到达时重查修订 ID 与日期,再冻结完整输入摘要。
时间与撤下
专题可组合不同日期材料,须保留日期与背景属性。时段简报必须提供带时区的起止边界,所有材料有窗口内的可靠发布时间。窗口统一 UTC 后摘要和持久化;只有日期的材料不进入精确 24 小时窗口。没有窗口的报告不能自称“今日新闻”。
公开读取重查来源权限、材料质量和当前版本。来源变私有、证据缺失或版本变化时,旧报告从公开列表退出,URL 返回 404;历史 Decision 和发布记录保留。这是读取时可见性失效,不会自动改写旧行状态,也不会自动重新编研。
HTML 合同
模型控制标题、正文、章节和有限的 editorial / briefing 风格。HTML、CSS、字体由受控渲染器提供,不执行任意模型代码。同文档版本的引用合并展示,但每个段落链接保留其精确 evidence refs,组内保存各片段章节和坐标。逐段引用固定证据版本,未知、分歧和判断前提始终显示;原始结构化结论可展开核对。
- 私人 HTML:
GET /api/v1/decisions/{decision_id}/report.html,沿用账户校验。 - 公开目录:
GET /api/v1/intelligence/briefs,只返回当前可见发布记录。 - 公开 HTML:
GET /api/v1/intelligence/briefs/{brief_id}/report.html,不能用任意 Decision ID 访问。 - 字体:
GET /api/v1/reports/fonts/{regular|bold}.woff2。
所有模型文本转义,来源链接限定 HTTP(S),使用 CSP、nosniff、no-store。页面适配窄屏和打印;离线保存 HTML 时字体可能回退,因为字体来自应用路由。旧 Decision 没有布局仍可读取;无布局持久化不新增空字段,保持历史 payload/hash 幂等。
验证边界
回归覆盖材料误收和误拒、日期歧义、历史重解析、索引/富化门槛、引用布局、注入、账户隔离、来源撤回、修订变化、审校拒绝、时区和旧报告重放。留存材料抽查与真实模型样稿用于集成验证,不是全量准确率。
有效来源覆盖、多源事件聚合、固定分母的编辑质量评测仍需独立推进。HTML 不会自动扩大来源,也不会把单源候选变成多源确认事件。