流式取消令牌(cancel token)。
用途:让应用层在需要时(如 web handler 客户端断连)中止正在进行的 chat-stream—— 取消上游 HTTP(停止烧 token)并让 ReAct 循环停在当前回合。
用法(应用层): (require '[im.ttalk.agent.streaming :as st] '[im.ttalk.agent.simple-agent :as agent]) (def token (st/make-cancel-token)) (future (agent/chat-stream a "消息" on-token {:cancel-token token})) ;; 客户端断连时: (st/request-cancel! token)
设计:令牌穿过 chat-stream → react 循环(回合间据它停止);react 在调 provider 流式前 把动态 var register-cancel 绑成「登记当前令牌的在途 cancel-fn」。provider 拿到 stream_client 的 cancel 后登记之——无需改协议 / config 签名。整条同步调用链同线程, 动态 var 可见;request-cancel! 直接操作令牌(可跨线程)。
流式取消令牌(cancel token)。
用途:让应用层在需要时(如 web handler 客户端断连)中止正在进行的 chat-stream——
取消上游 HTTP(停止烧 token)并让 ReAct 循环停在当前回合。
用法(应用层):
(require '[im.ttalk.agent.streaming :as st]
'[im.ttalk.agent.simple-agent :as agent])
(def token (st/make-cancel-token))
(future (agent/chat-stream a "消息" on-token {:cancel-token token}))
;; 客户端断连时:
(st/request-cancel! token)
设计:令牌穿过 chat-stream → react 循环(回合间据它停止);react 在调 provider 流式前
把动态 var *register-cancel* 绑成「登记当前令牌的在途 cancel-fn」。provider 拿到
stream_client 的 cancel 后登记之——**无需改协议 / config 签名**。整条同步调用链同线程,
动态 var 可见;request-cancel! 直接操作令牌(可跨线程)。react 在调 provider 流式前绑定为「登记当前令牌 cancel-fn」的函数;缺省 nil。
react 在调 provider 流式前绑定为「登记当前令牌 cancel-fn」的函数;缺省 nil。
(binding-register token)react 用:返回登记函数,绑到 register-cancel。登记时若令牌已取消则立即调 cancel-fn (消除「检查-登记」竞态:取消请求若发生在登记前,登记时补调)。
react 用:返回登记函数,绑到 *register-cancel*。登记时若令牌已取消则立即调 cancel-fn (消除「检查-登记」竞态:取消请求若发生在登记前,登记时补调)。
(cancelled? token)令牌是否已被请求取消(nil 令牌返回 false)。
令牌是否已被请求取消(nil 令牌返回 false)。
(register-cancel! cancel-fn)provider 调用:把 stream_client 的 cancel-fn 登记给当前令牌 (仅当 react 绑定了 register-cancel 且 cancel-fn 非 nil)。
provider 调用:把 stream_client 的 cancel-fn 登记给当前令牌 (仅当 react 绑定了 *register-cancel* 且 cancel-fn 非 nil)。
(request-cancel! token)请求取消:标记令牌 + 调用当前在途流的 cancel-fn(取消上游 HTTP)。幂等、可跨线程。
请求取消:标记令牌 + 调用当前在途流的 cancel-fn(取消上游 HTTP)。幂等、可跨线程。
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 |