mirror of
https://github.com/ThearchyHelios/AgentLab.git
synced 2026-11-15 09:41:59 +00:00
265ba0c91d
两件事,一条心:把「网页上点数字看得到的效果」带出系统外。
① 报告导出:新增 GET /api/runs/{run_id}/report.html(app/report_export:build + 模板 + 浏览器端脚本)。
正文由服务端按报告文档的块、句、片段渲染成 HTML——不执行脚本也读得到整份报告(附件预览常常不执行脚本);
执行脚本后,带出处的数字、无证据的数字、可疑的表名字段名都点得开,面板是网页上证据面板同一个拼法的
出处链(api/evidence._chain):指标步骤带口径卡名与版本、原式、代入式、每个输入取自哪次查询的哪一格、
复算、双盲复算;查询步骤带 SQL 和被引用的行;数据源遮罩列照网页上的规矩写「已遮罩」。封存状态逐项标明;
没封存的运行照常导出(和网页上读报告一个道理)。同样的引用共用一条链,长报告不把整份快照抄几十遍。
入口在问数据答案和运行详情成果上的「导出」(带证据的报告给 HTML,Markdown 留一个小的;旧运行照旧只有
Markdown)——api.reportExport + AssistantStream 的 AnswerActions。
② 可验证报告(bundle)的数字详情补齐:点开数字原来只有出处和值,现在多一节口径卡——指标(名 + id)、
单位、原式、代入式、输入(取值 ← 路径、取自哪次查询的哪一行哪一列)、复算;输入指向的查询快照也随文件
附带(遮罩规则同嵌入那一套,build._card_input_queries),④ 引用链按「已核对的口径卡的输入」认它们
(哈希对不上的卡不认,免得替被改过的卡圆)。收件人不连服务也能看到每个数怎么算出来的。
测试:后端 tests/test_report_export.py(真跑运行导出,正文、出处链、遮罩、只读、404/409、共用链);
bundle_samples 的口径卡换成带原式/代入式/输入/复算的真实形状,另加 metric-only 样本页(只引用指标的
报告,快照从口径卡的输入这一条路附带);check-bundle 断言数字详情和这条引用链,加上篡改;新增
scripts/check-report-export.mjs(真导出断网点开、不执行脚本也读得到、成果上的导出按钮、旧答案没有
HTML 按钮、409 提示),挂进 check-all。README 补「导出两份」一节。全量 pytest 通过;check-bundle、
check-report-export、check-stream、check-evidence、check-chat 全部通过(check-runs 5 项失败为基线
上就有的沙箱数据形态问题,与本次无关)。
14 lines
1.1 KiB
Python
14 lines
1.1 KiB
Python
"""报告导出:把一次运行的报告导出成一个自包含的 HTML 文件,正文里的数字点得开口径、来源和计算方式。
|
||
|
||
- build.py:把报告文档渲染成正文 HTML(不执行脚本也读得到),连同每个数字的出处链一起填进模板(纯函数,不碰数据库)
|
||
- template.html:页面骨架和样式
|
||
- runtime.js:浏览器端的出处面板(原生 JS,无依赖;正文是服务端渲染好的,脚本只负责点开数字)
|
||
|
||
接口在 api/evidence.py(GET /api/runs/{run_id}/report.html)——出处链和证据面板(点开报告里一个片段的接口)
|
||
用的是同一套拼法,页面上看到的就是网页上看到的。
|
||
|
||
和可验证报告(app/bundle)的分工:那边导出的是封存核对件,收件人核的是「没被改过」;这边导出的是报告本身,
|
||
读的人看的是每个数字的口径、来源和计算方式,封存状态照网页上的样子逐项标明。要向系统外的人证明文件没被改过,
|
||
用可验证报告;要让人读报告、查数字的来历,用这份。
|
||
"""
|