Liking cljdoc? Tell your friends :D

im.ttalk.agent.context

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"}])

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"}])
raw docstring

apply-writesclj

(apply-writes ctx writes-seq slots)

把一批工具的写意图按序折叠进 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(调用方决定是否告警)。

把一批工具的写意图按序折叠进 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(调用方决定是否告警)。
sourceraw docstring

context?clj

(context? x)

是否为 ToolContext(任意 map)

是否为 ToolContext(任意 map)
sourceraw docstring

conversation-idclj

(conversation-id ctx)

读取会话 ID

读取会话 ID
sourceraw docstring

createclj

(create)
(create vars-map)

创建 ToolContext(扁平 map)

参数:

  • vars-map: (可选) 初始 k/v
创建 ToolContext(扁平 map)

参数:
- vars-map: (可选) 初始 k/v
sourceraw docstring

framework-keysclj

框架自己钉在 context 上的键,不是业务状态。

ToolContext 是「请求级共享 k/v」,业务键由用户决定;但框架也往里钉路由用的键 (:conversation-id 由循环钉、:tool/call-id 由工具调用侧钉)。要把 context 当状态快照发给前端 / 落盘时,先把这些去掉——它们对消费方没有意义,且会让 「context 有没有变」这个判断被框架自己的噪声搅浑。

**框架自己钉在 context 上的键**,不是业务状态。

ToolContext 是「请求级共享 k/v」,业务键由用户决定;但框架也往里钉路由用的键
(`:conversation-id` 由循环钉、`:tool/call-id` 由工具调用侧钉)。要把 context
当状态快照发给前端 / 落盘时,先把这些去掉——它们对消费方没有意义,且会让
「context 有没有变」这个判断被框架自己的噪声搅浑。
sourceraw docstring

framework-slotsclj

框架自己的状态槽及其 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。
sourceraw docstring

get-varclj

(get-var ctx k)
(get-var ctx k default)

读取变量

读取变量
sourceraw docstring

set-varclj

(set-var ctx k v)

设置变量,返回新 ctx

设置变量,返回新 ctx
sourceraw docstring

set-varsclj

(set-vars ctx vars-map)

批量设置变量,返回新 ctx

批量设置变量,返回新 ctx
sourceraw docstring

with-conversation-idclj

(with-conversation-id ctx conv-id)

设置会话 ID,返回新 ctx

设置会话 ID,返回新 ctx
sourceraw docstring

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
←Move to previous article
→Move to next article
Ctrl+/Jump to the search field
× close