Perf/frontend chunk loading优化长文渲染、后台运行与向量检索,补齐运行日志和并发一致性 #34

Merged
Kronecker merged 4 commits from perf/frontend-chunk-loading into main 2026-09-06 17:01:02 +08:00
Owner

本 PR 改善长文编辑、Agent/任务运行和向量检索的性能,并增加统一运行日志。修复大批量向量传输失败、索引状态计数失真,以及首次索引迁移与并发搜索、笔记保存之间的锁冲突。

主要变更

  • 长文编辑与主题

    • 减少重复高亮和编辑器装饰计算,增加有容量限制的缓存。
    • 修复全部折叠后的顶部定位,以及 Ctrl/Cmd + 左键打开链接。
    • 纸间时光升级至 1.8.1,使用平铺背景替代贯穿长文的虚线轮廓,保留手账装饰。
    • 补充长文演示笔记、压测脚本和原始结果。
  • Agent、任务与日志

    • Trace 写入通过后台队列批量提交,持久化成功后才更新快照并广播事件。
    • 改善并发创建、取消、关闭及写入失败时的一致性。
    • 任务和 Agent 列表读取后续分页;Trace 按页渲染,优化完整历史搜索。
    • 新增统一日志页面,支持筛选、详情、自动跟随及上滚加载历史。
    • 日志独立持久化,保留最近 20,000 条;记录经过筛选的诊断字段。
  • 向量索引

    • 按模型标识和维度隔离持久化 sqlite-vec 索引,复用已有向量完成首次转换。
    • 原生精确 KNN 替代每次由 Python 解码全部向量并计算相似度。
    • 外部新增 Markdown 按笔记后台计算,不再因此触发全库重建。
    • 修复整批向量 JSON 超过 16 MiB 通信限制的问题,增加分块传输和完整性校验。
    • 索引卡片显示真实未完成数、运行数及独立的检索活动计数。
    • 首次迁移与保存共用异步写入锁;取消检索时等待迁移结束再释放锁,已有索引继续走只读路径。

验证结果

项目 | 结果 -- | -- 修复后后端全量测试 | 641 项通过 最后一次审阅专项回归 | 64 项通过 前端全量测试 | 415 项通过 前端生产构建 | 通过,仍有已有的大依赖分块警告 与当前 main 合并检查 | 无文本冲突 真实 CUDA 推理 | 2111 条文本完整返回 384 维向量,约 13 秒 4000 条、384 维向量 top-20 | 中位耗时约 1290 ms → 19.7 ms,结果顺序一致 纸间时光 12 万字样本 | 滚动帧间隔 P95 从约 90–100 ms 降至约 30 ms

向量基准不包含查询 Embedding、重排及 HTTP 耗时;长文结果仅代表本次样本与设备。

验证方法

  1. APP_DATA_DIRAPP_DB_PATHAPP_VAULT_PATH 指向临时目录后,运行后端完整测试;前端运行 npm testnpm run build
  2. 使用已有旧向量数据库首次检索,确认直接转换索引,仅计算查询向量;重新连接后确认索引复用。
  3. 同时发起两个首次检索,确认两个请求成功且只转换一次。
  4. 暂停迁移后并发保存笔记,确认保存异步等待、放行后正文落盘;取消搜索时重复验证。
  5. 外部新增 Markdown,确认只计算新增笔记,重新打开工作区不会重复入队。
  6. 查看运行日志,验证自动跟随、上滚暂停、历史加载及错误码筛选。
  7. 更新纸间时光至 1.8.1,打开长文压测笔记,检查滚动、编辑、折叠定位和链接跳转。

使用与限制

  • 后端修复需要重启 AI Core。
  • 已安装的纸间时光需要在主题页面更新至 1.8.1。
  • 首次索引转换仍占用 SQLite 写事务;历史模型空间暂不自动清理。
  • sqlite-vec 使用精确搜索,不是 ANN;检索活动累计数在服务重启后归零。
<body> <!--StartFragment--><p>本 PR 改善长文编辑、Agent/任务运行和向量检索的性能,并增加统一运行日志。修复大批量向量传输失败、索引状态计数失真,以及首次索引迁移与并发搜索、笔记保存之间的锁冲突。</p><h3>主要变更</h3><ul><li><p><strong>长文编辑与主题</strong></p><ul><li>减少重复高亮和编辑器装饰计算,增加有容量限制的缓存。</li><li>修复全部折叠后的顶部定位,以及 Ctrl/Cmd + 左键打开链接。</li><li>纸间时光升级至 1.8.1,使用平铺背景替代贯穿长文的虚线轮廓,保留手账装饰。</li><li>补充长文演示笔记、压测脚本和原始结果。</li></ul></li><li><p><strong>Agent、任务与日志</strong></p><ul><li>Trace 写入通过后台队列批量提交,持久化成功后才更新快照并广播事件。</li><li>改善并发创建、取消、关闭及写入失败时的一致性。</li><li>任务和 Agent 列表读取后续分页;Trace 按页渲染,优化完整历史搜索。</li><li>新增统一日志页面,支持筛选、详情、自动跟随及上滚加载历史。</li><li>日志独立持久化,保留最近 20,000 条;记录经过筛选的诊断字段。</li></ul></li><li><p><strong>向量索引</strong></p><ul><li>按模型标识和维度隔离持久化 sqlite-vec 索引,复用已有向量完成首次转换。</li><li>原生精确 KNN 替代每次由 Python 解码全部向量并计算相似度。</li><li>外部新增 Markdown 按笔记后台计算,不再因此触发全库重建。</li><li>修复整批向量 JSON 超过 16 MiB 通信限制的问题,增加分块传输和完整性校验。</li><li>索引卡片显示真实未完成数、运行数及独立的检索活动计数。</li><li>首次迁移与保存共用异步写入锁;取消检索时等待迁移结束再释放锁,已有索引继续走只读路径。</li></ul></li></ul><h3>验证结果</h3><div><div><div> 项目 | 结果 -- | -- 修复后后端全量测试 | 641 项通过 最后一次审阅专项回归 | 64 项通过 前端全量测试 | 415 项通过 前端生产构建 | 通过,仍有已有的大依赖分块警告 与当前 main 合并检查 | 无文本冲突 真实 CUDA 推理 | 2111 条文本完整返回 384 维向量,约 13 秒 4000 条、384 维向量 top-20 | 中位耗时约 1290 ms → 19.7 ms,结果顺序一致 纸间时光 12 万字样本 | 滚动帧间隔 P95 从约 90–100 ms 降至约 30 ms </div></div></div><p>向量基准不包含查询 Embedding、重排及 HTTP 耗时;长文结果仅代表本次样本与设备。</p><h3>验证方法</h3><ol start="1"><li>将 <code dir="ltr">APP_DATA_DIR</code>、<code dir="ltr">APP_DB_PATH</code>、<code dir="ltr">APP_VAULT_PATH</code> 指向临时目录后,运行后端完整测试;前端运行 <code dir="ltr">npm test</code> 和 <code dir="ltr">npm run build</code>。</li><li>使用已有旧向量数据库首次检索,确认直接转换索引,仅计算查询向量;重新连接后确认索引复用。</li><li>同时发起两个首次检索,确认两个请求成功且只转换一次。</li><li>暂停迁移后并发保存笔记,确认保存异步等待、放行后正文落盘;取消搜索时重复验证。</li><li>外部新增 Markdown,确认只计算新增笔记,重新打开工作区不会重复入队。</li><li>查看运行日志,验证自动跟随、上滚暂停、历史加载及错误码筛选。</li><li>更新纸间时光至 1.8.1,打开长文压测笔记,检查滚动、编辑、折叠定位和链接跳转。</li></ol><h3>使用与限制</h3><ul><li>后端修复需要重启 AI Core。</li><li>已安装的纸间时光需要在主题页面更新至 1.8.1。</li><li>首次索引转换仍占用 SQLite 写事务;历史模型空间暂不自动清理。</li><li>sqlite-vec 使用精确搜索,不是 ANN;检索活动累计数在服务重启后归零。</li></ul><!--EndFragment--> </body>
Kronecker added 4 commits 2026-09-06 17:00:45 +08:00
Author
Owner

已完成复审,建议合并当前提交 f32971d。
前两轮发现的并发问题已修复并补充回归:

  • 两个首次检索竞争迁移导致锁冲突:迁移串行执行,检索阶段只读。
  • 首次迁移与笔记保存竞争写锁:使用共享异步写入锁协调。
  • 搜索取消时:迁移结束前不会提前放行保存。
    修复后后端全量 641 项通过,最后一次专项复核 64 项通过;前端 415 项通过,生产构建通过。当前与 main 无文本合并冲突,本轮未发现新的阻塞问题。
已完成复审,建议合并当前提交 f32971d。 前两轮发现的并发问题已修复并补充回归: - 两个首次检索竞争迁移导致锁冲突:迁移串行执行,检索阶段只读。 - 首次迁移与笔记保存竞争写锁:使用共享异步写入锁协调。 - 搜索取消时:迁移结束前不会提前放行保存。 修复后后端全量 641 项通过,最后一次专项复核 64 项通过;前端 415 项通过,生产构建通过。当前与 main 无文本合并冲突,本轮未发现新的阻塞问题。
Kronecker merged commit 3dcd469bc0 into main 2026-09-06 17:01:02 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Kronecker/NotesAgentic#34