ToolContext - 请求/会话级的扁平状态 map
重构后(Memory Filter 模式):对话消息不再放在 Context,而是由 记忆由 clj-agent-client 模块的 memory filter 按 conversation-id 自管(core 对其零感知)。 Context 退化为一个单层扁平 map,承载:
{:context true} 的工具拿到这个 map,可用 get-var/set-var 读写 (请求级有效;跨轮累积请走 store)。
使用示例: (def ctx (create {:conversation-id "s1" :user-id "u1"})) (get-var ctx :user-id) ; => "u1" (set-var ctx :cart [{:item "book"}])
ToolContext - 请求/会话级的扁平状态 map
重构后(Memory Filter 模式):对话消息不再放在 Context,而是由
记忆由 clj-agent-client 模块的 memory filter 按 conversation-id 自管(core 对其零感知)。
Context 退化为一个**单层扁平 map**,承载:
- :conversation-id 会话 ID(Memory Filter 读取)
- 任意工具/filter 的请求级共享 k/v(对标 Spring AI ToolContext)
{:context true} 的工具拿到这个 map,可用 get-var/set-var 读写
(请求级有效;跨轮累积请走 store)。
使用示例:
(def ctx (create {:conversation-id "s1" :user-id "u1"}))
(get-var ctx :user-id) ; => "u1"
(set-var ctx :cart [{:item "book"}])(apply-writes ctx writes-seq slots)把一批工具的写意图按序折叠进 ctx(纯函数)。
参数:
返回 {:context 新ctx :conflicts #{k ...}} conflicts = 同批被写 ≥2 次且未声明 reducer 的 key(调用方决定是否告警)。
把一批工具的写意图按序折叠进 ctx(纯函数)。
参数:
- ctx: 轮初 context(工具执行时拿到的同一份快照)
- writes-seq: [{k v ...} ...] 每个元素是一个工具返回的 :writes map;
序列顺序必须是 tool-call 原始序(合并确定性的来源)
- slots: 槽位声明 {k {:init v0 :reduce (fn [old new] merged)}};
未声明的槽默认 last-writer(后写覆盖,按序确定)
返回 {:context 新ctx :conflicts #{k ...}}
conflicts = 同批被写 ≥2 次且未声明 reducer 的 key(调用方决定是否告警)。(create)(create vars-map)创建 ToolContext(扁平 map)
参数:
创建 ToolContext(扁平 map) 参数: - vars-map: (可选) 初始 k/v
框架自己钉在 context 上的键,不是业务状态。
ToolContext 是「请求级共享 k/v」,业务键由用户决定;但框架也往里钉路由用的键
(:conversation-id 由循环钉、:tool/call-id 由工具调用侧钉)。要把 context
当状态快照发给前端 / 落盘时,先把这些去掉——它们对消费方没有意义,且会让
「context 有没有变」这个判断被框架自己的噪声搅浑。
**框架自己钉在 context 上的键**,不是业务状态。 ToolContext 是「请求级共享 k/v」,业务键由用户决定;但框架也往里钉路由用的键 (`:conversation-id` 由循环钉、`:tool/call-id` 由工具调用侧钉)。要把 context 当状态快照发给前端 / 落盘时,先把这些去掉——它们对消费方没有意义,且会让 「context 有没有变」这个判断被框架自己的噪声搅浑。
框架自己的状态槽及其 reducer(与用户 :state-slots 同形,后者同名时优先)。
:tool-guard/state 的写意图是「只含本次调用那一格」的增量,同批多个工具各写各的格——
用缺省 last-writer 会互相覆盖,故内建两层 merge。见 designs/runtime-borrow.md §3。
**框架自己的状态槽**及其 reducer(与用户 `:state-slots` 同形,后者同名时优先)。 `:tool-guard/state` 的写意图是「只含本次调用那一格」的增量,同批多个工具各写各的格—— 用缺省 last-writer 会互相覆盖,故内建两层 merge。见 designs/runtime-borrow.md §3。
(with-conversation-id ctx conv-id)设置会话 ID,返回新 ctx
设置会话 ID,返回新 ctx
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |