Liking cljdoc? Tell your friends :D

im.ttalk.agent.provider.stream.anthropic

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)

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)
raw docstring

build-responseclj

(build-response state)

从流式状态构建最终响应(Anthropic 原始格式)

参数:

  • state: 最终累积状态

返回: 与非流式调用兼容的 Anthropic 响应格式

示例: (build-response final-state) ; => {:id "..." :content [...] :stop_reason "end_turn" ...}

从流式状态构建最终响应(Anthropic 原始格式)

参数:
- state: 最终累积状态

返回:
与非流式调用兼容的 Anthropic 响应格式

示例:
(build-response final-state)
; => {:id "..." :content [...] :stop_reason "end_turn" ...}
sourceraw docstring

make-initial-stateclj

(make-initial-state)

创建流式处理的初始状态

返回: 状态 map {:accumulated StringBuilder :index 0 :content-blocks {} :message nil}

创建流式处理的初始状态

返回:
状态 map {:accumulated StringBuilder :index 0 :content-blocks {} :message nil}
sourceraw docstring

make-stream-processorclj

(make-stream-processor)

创建流处理器

返回: 处理器 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)))

创建流处理器

返回:
处理器 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)))
sourceraw docstring

normalize-responseclj

(normalize-response state)

从流式状态构建统一格式响应

参数:

  • 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}
sourceraw docstring

parse-sse-lineclj

(parse-sse-line line)

解析 SSE 数据行

参数:

  • line: SSE 行字符串(如 "data: {...}")

返回: 解析后的 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" ...}
sourceraw docstring

process-eventclj

(process-event event state)

处理流式事件

参数:

  • 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))))

处理流式事件

参数:
- 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))))
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