Anthropic 流式响应处理
处理 Anthropic API 的 SSE 流式响应。 构建的响应格式与非流式调用兼容,并支持统一响应转换。
Anthropic 的流式事件类型:
使用示例:
(require '[im.ttalk.agent.provider.stream.anthropic :as stream])
;; 处理流式响应块 (let [[new-state token-data] (stream/process-event event state)] (when token-data (print (:token token-data))))
;; 构建统一格式响应 (stream/normalize-response final-state)
Anthropic 流式响应处理
处理 Anthropic API 的 SSE 流式响应。
构建的响应格式与非流式调用兼容,并支持统一响应转换。
Anthropic 的流式事件类型:
- message_start: 消息开始
- content_block_start: 内容块开始
- content_block_delta: 内容块增量(文本或工具输入)
- content_block_stop: 内容块结束
- message_delta: 消息增量
- message_stop: 消息结束
使用示例:
(require '[im.ttalk.agent.provider.stream.anthropic :as stream])
;; 处理流式响应块
(let [[new-state token-data] (stream/process-event event state)]
(when token-data
(print (:token token-data))))
;; 构建统一格式响应
(stream/normalize-response final-state)(build-response state)从流式状态构建最终响应(Anthropic 原始格式)
参数:
返回: 与非流式调用兼容的 Anthropic 响应格式
示例: (build-response final-state) ; => {:id "..." :content [...] :stop_reason "end_turn" ...}
从流式状态构建最终响应(Anthropic 原始格式)
参数:
- state: 最终累积状态
返回:
与非流式调用兼容的 Anthropic 响应格式
示例:
(build-response final-state)
; => {:id "..." :content [...] :stop_reason "end_turn" ...}(make-initial-state)创建流式处理的初始状态
返回: 状态 map {:accumulated StringBuilder :index 0 :content-blocks {} :message nil}
创建流式处理的初始状态
返回:
状态 map {:accumulated StringBuilder :index 0 :content-blocks {} :message nil}(make-stream-processor)创建流处理器
返回: 处理器 map,包含:
示例: (let [{:keys [process-fn initial-state]} (make-stream-processor)] ;; 处理流 (let [final-state (reduce ...)] (build-response final-state)))
创建流处理器
返回:
处理器 map,包含:
- :process-fn 处理函数 (fn [event state] -> [new-state token-data])
- :initial-state 初始状态
示例:
(let [{:keys [process-fn initial-state]} (make-stream-processor)]
;; 处理流
(let [final-state (reduce ...)]
(build-response final-state)))(normalize-response state)从流式状态构建统一格式响应
参数:
返回: 统一响应格式: {:text "..." :tool-calls [{:id :name :args}] :usage {:input-tokens n :output-tokens m :total-tokens t} :finish-reason :stop | :tool-use | :max-tokens :provider :anthropic ...}
示例: (normalize-response final-state) ; => {:text "你好" ; :tool-calls [] ; :finish-reason :stop ; :provider :anthropic}
从流式状态构建统一格式响应
参数:
- state: 最终累积状态
返回:
统一响应格式:
{:text "..."
:tool-calls [{:id :name :args}]
:usage {:input-tokens n :output-tokens m :total-tokens t}
:finish-reason :stop | :tool-use | :max-tokens
:provider :anthropic
...}
示例:
(normalize-response final-state)
; => {:text "你好"
; :tool-calls []
; :finish-reason :stop
; :provider :anthropic}(parse-sse-line line)解析 SSE 数据行
参数:
返回: 解析后的 JSON 对象或 nil
示例: (parse-sse-line "data: {"type": "message_start"}") ; => {:type "message_start" ...}
解析 SSE 数据行
参数:
- line: SSE 行字符串(如 "data: {...}")
返回:
解析后的 JSON 对象或 nil
示例:
(parse-sse-line "data: {\"type\": \"message_start\"}")
; => {:type "message_start" ...}(process-event event state)处理流式事件
参数:
返回: [更新后的状态, token-data 或 nil]
token-data 格式: {:token "..." :index n}
示例: (let [[new-state token] (process-event event state)] (when token (print (:token token))))
处理流式事件
参数:
- event: 解析后的 SSE 事件(JSON 对象)
- state: 当前累积状态
返回:
[更新后的状态, token-data 或 nil]
token-data 格式:
{:token "..." :index n}
示例:
(let [[new-state token] (process-event event state)]
(when token
(print (:token token))))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 |