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

事实只有一份(JSONL 流水),视图随便派生:SQL 库、统计、标题、大纲……视图是派生的,坏了可以重算——实测还有 projection-cache 给视图缓存。

📝 本节和前面几节的关系

6.4 立了【事实与视图分离】,这一节把【视图】这个词讲透——它的学名叫 Projection(投影)。

一、什么是 Projection

从同一组事实按需生成的不同视图:

事实一份,视图任意——加一个视图不用动事实,删一个视图事实毫发无损。

二、实测:连缓存都是独立的包

配置里有 session-projection 和 session-projection-cache 两件——

视图的计算与缓存都各自成包:算过的视图存起来,下次直接用。

这再次印证 3.7 的判断:细到【视图缓存】都是一个插件。

三、派生品的规矩

判断设计好坏的尺子:事实动过没有?

四、和 2.6 方法的会师

2.6 说【做差集看结构】,6.4 说【配置不会撒谎】—— Projection 是同一哲学的数据面:事实是唯一的真源,其余都是它的投影。

排查问题时也一样:先看事实(流水),再看投影(视图)——投影不一致,重算就好;事实不一致,才是真问题。

五、动手 Demo:Projection——同一组事实,不同视图

五个视图、三条规矩:

views = ["完整事件流水", "SQL 可查询库", "统计", "标题", "轮次大纲"]
for v in views:
    print("  视图: %s" % v)
print()
print("  规矩: 可重算 / 不回写 / 可增删")
print("  尺子: 排查先看事实, 投影不一致就重算")

实跑输出:

--------------------------------------------------------------------
Projection——同一组事实,不同视图
--------------------------------------------------------------------
  事实只有一份(JSONL 流水),视图可以有很多:

  视图             从哪来                   给谁用
  -----------------------------------------------------
  完整事件流水     persistence-jsonl        重建、回放
  SQL 可查询库     session-query-sqlite     排查
  统计             session-stats            面板
  标题             session-title            会话列表
  轮次大纲         session-turn-outline     导航
  -----------------------------------------------------

  实测还有一件 `session-projection-cache`——**视图算过就缓存**。

  关键性质:**视图是派生的,事实只有一份**——
  视图随便加、随便改,不会污染事实;
  事实坏了才是真坏了。这是 6.6 整节的支点。

事实一份,视图任意——增删视图不动事实,这是分离的价值。 projection-cache 单独成包——细到缓存都是插件(3.7 再证)。 排查尺子:投影不一致重算就好,事实不一致才是真问题。

30 秒实验

  1. 在配置树里数一数 session 系列里几个是【事实】、几个是【视图】。
  2. 举一个你想加的新视图,说明它从事实怎么算出来。
  3. 用【事实动过没有】这把尺子检查你手头的一个数据系统。

常见误区

  1. 错误:Projection 是数据库的投影查询。——纠正:这里是从事件事实派生视图的机制——思想相通,对象不同。
  2. 错误:视图也可以直接改,反正是自己用的。——纠正:视图只读事实——回写会破坏唯一真源。
  3. 错误:视图多了系统会乱。——纠正:乱不了——视图互相独立、坏了重算,事实不动如山。
自测三问(点开对答案) 1. Projection 是什么? —— **从同一组事实按需生成的不同视图**——SQL 库、统计、标题、大纲都是。 2. 派生品的三条规矩是什么? —— **可重算、不回写、可增删**——事实永远只读。 3. 排查时的尺子是什么? —— **投影不一致重算就好;事实不一致才是真问题。**

相关笔记