🐳 第六章 Agent一轮工作的全过程
📄 一句话概括

实测 session 系列包有 14 件——持久化、SQL 查询、投影、统计、标题、大纲、检查点……会话是【事件的事实库】,消息数组只是它的一个视图。

📝 本节和前面几节的关系

6.1~6.3 讲了过程,这一节讲过程留下了什么——把【会话=聊天记录】这个直觉拆掉。

一、实测:14 件包伺候一个会话

配置里 session 系列的包:session(本体)、session-persistence-jsonl(JSONL 追加持久化)、session-query-sqlite(SQL 查询)、session-projection/-cache(投影)、session-stats(统计)、session-title/-first-prompt-llm(标题)、session-turn-outline(大纲)、session-reference(引用)、session-checkpoint-policy(检查点)、session-log-deepseek/-export(日志导出)、session-telemetry-otel(遥测)。

一个【聊天记录】用得着 14 件包吗?——如果它只是数组,用不着。

二、会话是事实库,不是数组

会话里存的是事件:用户消息、assistant chunk、工具调用、工具结果——每条事件带时间、带顺序、带归属。

视图从事实派生(6.6.3 展开)——派生错了可以重算,事实不能丢。

三、这个设计换来什么

四个能力,全都建立在【事实与视图分离】上。

四、对照:如果真是数组

数组是给【聊天】用的,事实库才是给【工作】用的。

五、动手 Demo:Session 的真身——14 件包

session 系列全家福(实测 14 件):

packs = ["session", "persistence-jsonl", "query-sqlite",
         "projection", "projection-cache", "stats",
         "title", "title-first-prompt-llm", "turn-outline",
         "reference", "checkpoint-policy",
         "log-deepseek", "log-export", "telemetry-otel"]
for i, p in enumerate(packs, 1):
    print("  %2d. dsh-session-%s" % (i, p) if i > 1 else "  1. dsh-session")
print("  共 14 件")

实跑输出:

--------------------------------------------------------------------
Session 的真身——14 件包
--------------------------------------------------------------------
  实测:配置里 session 系列的包一共 14 件(省略前缀):

  包                                    干什么
  -------------------------------------------------------------------
  session                               会话本体
  session-persistence-jsonl             事件流水持久化(JSONL 追加)
  session-query-sqlite                  用 SQL 查会话
  session-projection / -cache           从事实生成视图(带缓存)
  session-stats                         统计
  session-title / -first-prompt-llm     起标题
  session-turn-outline                  轮次大纲
  session-reference                     引用
  session-checkpoint-policy             检查点何时打
  session-log-deepseek / -export        日志与导出
  session-telemetry-otel                遥测
  -------------------------------------------------------------------

  一句话:**会话是【事件的事实库】**——消息数组只是它的一个视图。

14 件包的规模本身就是答案——数组用不着这个配置。 事实与视图分离是本节支点——视图派生可重算,事实唯一不可改。 四个能力(查、算、回放、审计)全是分离设计的回报。

30 秒实验

  1. 在配置树里把 14 件 session 包数一遍,说说每件管什么。
  2. 举例:【那轮工具传了什么参数】——数组为什么答不了、流水为什么能答。
  3. 想想 append-only 为什么是审计的前提。

常见误区

  1. 错误:会话就是 messages 数组的读写。——纠正:是事件事实库——消息数组只是人看的那个视图。
  2. 错误:14 件包是过度设计。——纠正:每个能力都有对应包——能查、能算、能回放、能审计,数组一个都给不了。
  3. 错误:压缩就是把旧消息删掉。——纠正:删事实无法追溯——压缩必须可解释(6.6.4)。
自测三问(点开对答案) 1. session 系列实测有几件包? —— **14 件**——本体、持久化、SQL 查询、投影、统计、标题、大纲、检查点等。 2. 会话存的是什么? —— **事件**(用户消息/chunk/工具调用/工具结果),带时间与顺序——消息数组只是视图。 3. 事实与视图分离换来什么? —— **能查、能算、能回放、能审计**——视图坏了可重算,事实不能丢。

相关笔记