SSparkWorkcapability architecture
capabilities / memory · wiki · auto router · performance

四条能力线:记住、查得到、花得值、跑得稳。

事实源:packages/agent-runtime · packages/protocol · packages/storage/migrations · 最后核对 2026-09-30

SparkWork 把 Agent 的“记忆”拆成三条互相独立的线:长期记忆回答“它记得你”,知识库回答“它读得懂你的资料”,自动路由回答“这轮该花多少成本”,而性能保护回答“后台任务再多也别把电脑拖死”。

一、长期记忆:每轮写、每轮读

记忆以 markdown 文件为事实来源、以本地 SQLite 为索引。写入发生在 每一轮对话结束之后(异步、失败只写日志,不影响主对话),注入发生在 每一轮对话开始之前(不是每个会话只注入一次)。

长期记忆一轮对话的写入与读取闭环
写入过五道闸门后落三处;读取走 FTS5 与向量双路、RRF 融合与时间衰减,再按 token 预算裁剪。 查看原图 ↗
长期记忆生命周期与自动进化
候选 → 有效 → 失效 → 归档 → 删除。旧记忆只标失效不删除,整合任务产出的候选必须人工确认才生效。 查看原图 ↗

三个必须知道的事实

二、知识库:零预注入,按预算取用

知识库把方案、教程和踩坑记录写成可检索、可双链、可回看版本的页面。它和记忆最大的差别是 零预注入:知识库内容从不进常驻上下文,Agent 必须先检索、再按需读取。

知识库上下文预算分层
四层预算:常驻约 800 token、检索 top 8、正文 3000 token 每页、单轮总闸 8000;均带服务端硬上限。 查看原图 ↗
知识库三条沉淀管道
对话沉淀、技能提议与 Repo Wiki 都能长出知识页,但三条管道都先出草案再人工确认,不会自己往库里写。 查看原图 ↗

写入与读取的边界

面向 共 12 个工具(mcp__spark_wiki__) 是否走审批
只读 wiki_list_spaces · wiki_search · wiki_read · wiki_list · wiki_backlinks 免审批
写入 wiki_write · wiki_update · wiki_archive · wiki_delete · wiki_restore · wiki_link 走 canUseTool
技能提议 wiki_propose_skill 产出草案,仍需人工确认

所有写入收敛到同一套写入原语:expectedVersion CAS 乐观锁、正文先写临时文件再 rename 原子落盘、FTS 与主表同事务、失败回滚,回执带 indexReady。

三、自动路由:轮次级替换模型

一个 router 由 1 个分流器 + N 个按强度分档的执行模型 组成。分流不发生在本轮运行过程中,而是 在轮次开始前由宿主把 provider 与 model 换掉,所以执行模型本身不需要知道 AutoRouter 存在。

自动路由的组成:分流器与三档执行模型
分流器只做轻量分类;执行模型按 high / balanced / low 分档,每条可单独指定推理强度。 查看原图 ↗
自动路由一轮分流时序与降级阶梯
分流失败分四类降级,一律不抛错;只有「一个可用执行模型都没有」才让本轮失败并给出可操作报错。 查看原图 ↗

降级与兜底

四、性能保护:四档分级 + 双池闸门

这一节解决的是另一类问题:不是「Agent 会不会做错」,而是整机被后台子进程拖到失去响应。它由两个互相独立的部分组成——资源监控负责观测与分级,派发闸门负责把并发真正收敛住。

性能监控:采样、定级与四档滞回
2 秒采样六类指标,逐项与自己的三档阈值比对后取最高档;升级快、降级慢,一次只降一级。 查看原图 ↗
派发闸门:主池与嵌套防死锁池
成员派发按形态分主池与嵌套防死锁池;全局并发预算与成员并发硬顶两个旋钮,超出部分排队而不是同时启动。 查看原图 ↗
性能页全貌:档位提示条、资源指标卡、历史趋势、活动治理与降级恢复事件
设置 → 系统 → 性能:顶部是当前档位提示条,中间是资源指标与趋势,底部是活动治理与最近降级 / 恢复事件。 查看原图 ↗

三个必须守住的边界

四条能力线的代码落点

能力 服务与协议 存储
长期记忆 packages/agent-runtime(记忆服务与工具) markdown 事实源 + memory_entry / memory_fts / memory_vec / memory_entity(迁移 107–110)
知识库 packages/agent-runtime/src/services/wiki; packages/protocol/src/wiki*.ts markdown 正文 + wiki_space / wiki_page / wiki_link / wiki_revision / wiki_fts / wiki_candidate(迁移 112–114)
自动路由 packages/protocol/src/auto-router-config.ts;会话执行路径的分流编排 provider_profiles(provider_type = auto-router)+ auto_router_decision 事件
性能保护 packages/agent-runtime 的 resource-monitor(采样与判级)与 dispatch-governor(双池并发闸门) resource_pressure_events(迁移 103,保留 7 天)+ 分钟级指标的内存环形缓冲(默认不落库)

容易混淆的边界

记忆 vs 知识库

  • 记忆每轮自动注入摘要;知识库零预注入,要检索才进来。
  • 记忆粒度是一条事实;知识库粒度是一篇成体系的知识页。
  • 记忆 Agent 只读;知识库 Agent 可写但走审批。
  • 判断标准:几乎每轮都该知道的放记忆,需要时去查的放知识库。

档位 vs 推理强度

  • 强度档位(intensity)决定派给哪个执行模型。
  • 推理强度(reasoningEffort)决定该模型想多深。
  • 两者正交:low 档也可以开高推理强度。
  • 分流决策是轮次级的,改配置影响下一轮而不是正在跑的这轮。

档位标记 vs 真实限流

  • 活动治理区的「限流中 / 已暂停派发 / 已熔断」由当前压力级别推导,是状态呈现。
  • 闸门目前不会按档位拒绝准入,setPressureLevel 只记录档位。
  • 真正让任务排队的是固定的并发上限:全局并发预算、成员并发硬顶、嵌套池配额。
  • 需要立刻限流:直接调小全局并发预算或成员并发硬顶,热更新即时生效。

主池 vs 嵌套池

  • 主池:depth = 0 且不是同步 peer call 的成员派发,严格 FIFO,超时 120 秒拒绝。
  • 嵌套池:depth > 0 或同步 peer call,独立配额,15 秒兜底放行防死锁。
  • 宿主会话不占池槽位,但会被计入主池预算(有封顶与成员槽下限保护)。
  • 一个许可 = 一次成员执行 = 至多一个 CLI 子进程。

面向使用者的完整说明见 官网文档中心;本页只描述当前已经存在的机制与边界。