Files
deerflow-code/docs/本地问答与技能并发验收-20260928.md
T

11 KiB
Raw Blame History

本地问答、资料库与技能并发验收

测试日期:2026-09-28 至 2026-09-29 凌晨。环境:Windows、约 8GB 物理内存、Python 3.12、Node 22、Gateway 单进程、SQLite、默认 MiniMax-M2.5。前端 Vite 5174,Gateway 8001。模型并发限流与 Redis 分布式门控未启用。

本次保留并验收了工作区原有的资料库索引、问答收尾、沙箱超时和流式恢复修改,另外修复了压测复现的技能刷新重复校验,以及真实地图问答暴露的内部待办提醒显示问题。测试结果不能等同于 Linux 多进程生产环境容量。

版本范围

开始测试时本地为 3a07c476,没有 cognitive-situation-map。随后拉取远程,发现 origin/master 已前进至 3107f2cc,包含该技能的初始化及 v2.6.0 精简运行时。保留本地修改后合入远程,合并提交为 c9effe83;最终绘图与多用户测试以合入后的代码为准。

旧本地版本里 page-report-generation 的地图仅支持中、美、日、台,因此其“不支持菲律宾”的反馈不能用于评价最新的 cognitive-situation-map。

真实问答

使用独立普通测试账户,阶梯间顺序运行,逐条检查预期测试关键词与结果、SSE end、持久化 success,结束后删除本轮生成的测试线程。1/3/5/10 路检查正文包含“测试”和数字 4;20 路增强为检查“测试正常”及明确的“2加2等于4”。这属于简单问答验收,不是复杂内容质量评测。

同时问答用户数 成功 首段答案中位耗时 流结束中位耗时 流结束最慢
1 1/1 5.792s 6.439s 6.439s
3 3/3 2.214s 3.245s 3.287s
5 5/5 2.885s 3.702s 4.373s
10 10/10 2.920s 4.796s 5.416s
20 20/20 4.364s 10.622s 11.135s

累计 39/39 通过。20 用户整批耗时 11.829s,同期 health 12/12 成功、中位 13ms、最大 371ms。这里是一次阶梯短时突发,并未证明百用户持续长任务容量。

取消接口返回 204,58ms 后状态为 interrupted,测试线程删除返回 200。同期健康探测 20 次均成功,中位 9ms,最大 3.044s;说明仍存在数秒调度尖峰,不能仅凭平均值宣布无阻塞。

早期多个磁盘基准同时运行时,单路首段答案为 33.853s,日志显示同步 agent 构建 28.344s,health 也有 5s 超时。这批明确有本机资源争用,不纳入稳定容量结论。开发脚本启动的服务进程还曾消失,没有拿到退出或 reload 日志,原因未确认;期间的连接失败剔除。后续使用无热重载的固定进程复测。

资料库和知识库

  • 资料库/知识库相关回归 186 项通过;资料库新存储 Memory/SQLite 专项另有 8 项通过,覆盖用户隔离、分页、原子换代、并发租约和旧任务围栏。
  • 真实测试账户看到 2 个共享知识库;选中的库包含 668 份文档、168 个 Wiki 页面。首次 hybrid 查询 3.58s,返回 5 条。
  • 排除合成磁盘负载后,空资料库、知识库目录和 hybrid 查询分别测试 1/4/8 并发,每档 8 次,总计 72/72 HTTP 200,零异常。
接口 8 并发中位耗时 8 并发最大耗时
资料库列表(空测试账户) 165ms 224ms
知识库目录 517ms 557ms
hybrid 检索(相同问题、5条结果) 426ms 441ms

这组重复使用同账号和查询,包含热缓存效果;空账户列表不代表有大量文件的资料库。独立测试 SQLite 另生成了 101 个合成用户、10 万条资料元数据,480 次查询全部成功;其中单用户 5 万条资料关键词查询 P95 为 1.08s、首页 P95 为 130ms,但此轮同时有其他 IO 测试,只作为规模观察值。

资料库索引按 5 分钟过期刷新;进程异常退出时正在同步的租约最多等待 30 分钟恢复。大库关键词查询仍使用多字段包含匹配,不能据当前测试证明生产规模检索始终快速。

大技能与并发刷新

文件体积大和小文件数量多分别测试,使用隔离临时目录,不改真实技能内容。

场景 结果
真实技能副本,269 文件 / 2.75MiB,稳定缓存 64 并发 全成功,约 1.05s;早期混合负载观察值
同副本改 1 个资产,32 并发,修复前混合负载 27 成功、5 个 30s 锁等待超时,复现问题
独占配对:同副本改 1 个资产,32 并发,旧逻辑 32/32 成功,P95 13.700s,最大 14.842s
独占配对:同场景,新逻辑 32/32 成功,P95 / 最大 3.963s,P95 降低约 71%
128MiB 资产、34 文件,新逻辑 冷初始化 5.54s;变更后 32 并发 P95 0.584s,全成功
约 160 技能、5120 个小文件(修复前规模观察) 冷加载执行者约 107s,31/32 等待者超时;热校验约 18s

修复让同一进程内、相同权限配置的一批重叠请求共享一次刷新及最终校验。等待者仍检查当前缓存身份、权限哈希和能力标记;失败或技能下线时不返回旧视图。新增 8 项回归连同原有 62 项,共 70 项通过。

剩余风险: 数千个小文件的单次 Windows 元数据扫描仍昂贵,本次修复没有消除这项成本,也未证明跨进程刷新能合并。不能把 32/64 个技能调用线程等同于 32/64 个真实模型用户。

实际调用 gongwen-assistant 读取技能并输出短通知,10.672s 内正常结束,无工具卡住。但答案把要求的 10月8日改成10月15日:通信/技能读取通过,内容日期遵循失败,不能记为整体语义验收通过。

绘图与界面

普通问答已实际生成菲律宾地图底图及马尼拉、吕宋北部、巴拉望、棉兰老四个点位,点位弹窗可打开。使用明确标注的虚构数据,未进行时事真实性评估。初次模型额外要求确认消息内地图,回复确认后完成,属于可见的额外交互成本。

这次真实对话发现 todo_completion_reminder 被当作用户问题展示。修复后,后端待办提醒带 hide_from_ui,前端也按两个历史内部名字过滤聊天和问题导航;真实用户引用 <system_reminder> 的文本仍保留。后端 3 项、前端新及关联分组 12 项通过。

最新 cognitive-situation-map v2.6.0 已经通过真实问答完整调用:读取技能和菲律宾参考 JSON、写入场景、调用技能自带 node render.mjs、检查文件、present_files 交付,42.481s 完成,SSE 正常结束并保存 success。产物标题为“菲律宾冲突认知态势图(功能验收示意)”,包含 4 个事件、4 个标注、3 个行为体和 2 条连线,明确标注所有事件与等级均为测试数据。输出 status=ok、无恢复和警告。模型曾发起两次过宽的目录 glob,被技能访问隔离拒绝后自行改用指定技能目录完成,没有循环卡住。

同一最新技能的直接渲染为 624ms;8 个并发独立渲染进程全部成功,范围 650–949ms。围栏/截断/缺失字段/约 600KiB 场景输入的恢复、非空目录拒绝覆盖、脚本结束标签转义均完成专项检查。真实 Windows LocalSandbox 虚拟路径经 PowerShell 调用 Node 成功(含冷 shell 7.85s)。CSS、JS、菲律宾底图和旗帜资源均返回 200;2.93MB 底图一次请求耗时 208ms。8 个渲染进程不等于 8 个同时生成长内容的模型用户。

最新 HTML 的视觉验收未通过: 测试账户能在会话中看到生成文件卡片,文件接口返回 200,源码模式能显示 HTML、正确资源地址和页面结构,但 Codex 内嵌浏览器的预览面板空白;DOM 中 iframe 的 src 为 blob:http://127.0.0.1:5174/...,可访问树仍为 about:blank。普通地图组件的可见性不能替代这个 HTML 的验收,渲染器返回成功也不能证明最终视觉正确。已保留空白预览截图,未将此项计为通过。

进一步在内存中执行真实 prepareGeneratedHtml:11,269 字节输入变为 14,597 字节,原有 3 个脚本逐字保留、DOM id 与外链 URL 均不变,新增兼容脚本语法有效。暂未发现生成器或预处理破坏 HTML 的证据;故障停在预览加载/Blob 导航阶段,具体原因未确认,不将其归为已知浏览器限制,也不宣称已修复。

界面还复现了 TDesign 新手引导闲置时的 reading 'element' 异常:current=-1 时其 resize 监听仍读取不存在的步骤。简洁模式与智能体两处包装组件已改为只有有效步骤才挂载 Guide。浏览器复测了文件面板开关、侧栏切换、手动启动、下一步、跳过,未再出现新的同类异常;完成/跳过的持久化语义保持不变。

合并后回归

  • 完整 harness:274/274 通过,53.07s;包含前述技能及 Todo 子集,不重复累加。
  • 模型并发配置专项:10 项通过;种子技能资源:4 项通过。
  • 前端流式恢复专项:9 组共 44 项通过;待办可见性及相关消息分组:12 项通过。
  • 全量前端构建和类型检查最初并行运行时,系统空闲内存降到约 17MB,因此主动停止该轮类型检查,改为串行执行;该轮中断不作为代码失败。
  • pnpm build 通过(10m25s,包含前期资源争用,有大 chunk 警告)。其后新增的两个 Guide 挂载条件已通过单独语法检查和真实浏览器回归;另补齐问题导航抽取后的类型导入,不改变生成代码行为。
  • 最终 pnpm typecheck 仍未通过,共 73 项原有诊断;与测试前本地 hang-typecheck.log 的 75 项逐条比较,减少了消息分组测试的 2 项,没有新增诊断。本轮发现的 QuestionItem 类型导入遗漏已经修正,复跑后消失。剩余问题包括 nextra 依赖、旧 JSX 类型和既有组件/测试类型,未扩大范围处理,不能标记全量类型检查通过。

本地证据和复测入口

详细证据仅保留在 .runtime/test-results/20260928-local-qa/,不提交模型凭证、问答日志、测试数据库、构建 ZIP 或技能临时大目录:

  • qa-concurrency-results.json:逐轮时间、结束事件、答案检查和清理结果。
  • qa-concurrency-20-results.json、harness-full.xml:20 个独立用户问答和完整 harness 回归。
  • knowledge-stable-recheck.json、knowledge-library-report.md:知识库与资料库稳定复测及限制。
  • skills-benchmark-paired.json、skills-findings.md:同机旧/新刷新配对;“旧逻辑”在隔离进程禁用新合并函数回放,不改服务源码。
  • philippines-html.json、large-skill.json:旧页面技能能力缺口与公文技能真实调用。
  • philippines-map-ui.png:普通地图真实浏览器渲染。
  • cognitive-philippines.json、cognitive-skill-probe.json:最新技能真实完整问答及渲染器专项。
  • cognitive-preview-ui.png:最新 HTML 在本轮内嵌浏览器出现空白的实际截图。
  • frontend-build.log、frontend-typecheck-final.log:全量构建与最终类型检查。

提交的回归入口包括 packages/harness/tests/test_skill_view_refresh_coalescing.py、test_skill_view_waits.py、test_sandbox_command_liveness.py、test_run_completion_timeout.py、test_todo_reminder_visibility.py,以及前端 control-timeout、stream-terminal-recovery 和 todo-reminder-visibility 测试。