Liking cljdoc? Tell your friends :D

im.ttalk.agent.provider.api

LLM 模块统一 API 入口

提供所有 LLM 功能的统一访问入口。

主要功能:

  • Provider 创建和管理
  • LLM 调用(同步、流式、异步)
  • 响应解析
  • 错误处理

使用示例:

(require '[im.ttalk.agent.provider.api :as llm])

;; 创建 Provider (def provider (llm/create-provider :openai))

;; 同步调用 (llm/call provider config messages tools)

;; 流式调用 (llm/call-stream provider config messages tools on-token)

;; 提取结果 (llm/extract-text provider response) (llm/extract-tool-calls provider response)

LLM 模块统一 API 入口

提供所有 LLM 功能的统一访问入口。

主要功能:
- Provider 创建和管理
- LLM 调用(同步、流式、异步)
- 响应解析
- 错误处理

使用示例:

(require '[im.ttalk.agent.provider.api :as llm])

;; 创建 Provider
(def provider (llm/create-provider :openai))

;; 同步调用
(llm/call provider config messages tools)

;; 流式调用
(llm/call-stream provider config messages tools on-token)

;; 提取结果
(llm/extract-text provider response)
(llm/extract-tool-calls provider response)
raw docstring

assistant-messageclj

创建助手消息(中立格式 {:role :assistant ...})

创建助手消息(中立格式 {:role :assistant ...})
sourceraw docstring

audio-partclj

音频部件(OpenAI 兼容端点只收内联 wav/mp3)

音频部件(OpenAI 兼容端点只收内联 wav/mp3)
sourceraw docstring

build-tool-resultclj

(build-tool-result provider tool-id content)

构建工具结果消息

参数:

  • provider: Provider 实例
  • tool-id: 工具调用 ID
  • content: 结果内容

返回: 工具结果消息

构建工具结果消息

参数:
- provider: Provider 实例
- tool-id:  工具调用 ID
- content:  结果内容

返回:
工具结果消息
sourceraw docstring

callclj

(call provider config messages)
(call provider config messages tools)

调用 LLM(同步)

参数:

  • provider: Provider 实例
  • config: 配置 {:model "..." :max-tokens n ...}
  • messages: 消息列表 [{:role "user" :content "..."}]
  • tools: 工具列表(可选)

返回: API 响应

示例: (call provider {:model "gpt-4" :max-tokens 4096} [{:role "user" :content "你好"}])

调用 LLM(同步)

参数:
- provider: Provider 实例
- config:   配置 {:model "..." :max-tokens n ...}
- messages: 消息列表 [{:role "user" :content "..."}]
- tools:    工具列表(可选)

返回:
API 响应

示例:
(call provider
  {:model "gpt-4" :max-tokens 4096}
  [{:role "user" :content "你好"}])
sourceraw docstring

call-streamclj

(call-stream provider config messages tools on-token)

流式调用 LLM

参数:

  • provider: Provider 实例
  • config: 配置
  • messages: 消息列表
  • tools: 工具列表
  • on-token: 回调函数 (fn [{:keys [token index accumulated]}] ...)

返回: 最终完整响应

示例: (call-stream provider config messages [] (fn [{:keys [token]}] (print token) (flush)))

流式调用 LLM

参数:
- provider: Provider 实例
- config:   配置
- messages: 消息列表
- tools:    工具列表
- on-token: 回调函数 (fn [{:keys [token index accumulated]}] ...)

返回:
最终完整响应

示例:
(call-stream provider config messages []
  (fn [{:keys [token]}]
    (print token)
    (flush)))
sourceraw docstring

content-textclj

取 content 的纯文本(字符串原样 / 部件向量取文本部件拼接)

取 content 的纯文本(字符串原样 / 部件向量取文本部件拼接)
sourceraw docstring

create-embedding-providerclj

创建 embedding provider

(create-embedding-provider :openai) (create-embedding-provider :openai-compat {:base-url "..." :api-key "..." :model "bge-m3"})

创建 embedding provider

(create-embedding-provider :openai)
(create-embedding-provider :openai-compat {:base-url "..." :api-key "..."
                                           :model "bge-m3"})
sourceraw docstring

create-providerclj

(create-provider provider-type)
(create-provider provider-type opts)

创建 LLM Provider

参数:

  • provider-type: Provider 类型 (:openai :anthropic :zhipu :ollama :gemini :mistral :mock)
  • opts: 配置选项(可选)

返回: Provider 实例

示例: (create-provider :openai) (create-provider :anthropic {:api-key "sk-..."})

创建 LLM Provider

参数:
- provider-type: Provider 类型 (:openai :anthropic :zhipu :ollama :gemini :mistral :mock)
- opts:          配置选项(可选)

返回:
Provider 实例

示例:
(create-provider :openai)
(create-provider :anthropic {:api-key "sk-..."})
sourceraw docstring

create-provider-autoclj

(create-provider-auto provider-type)
(create-provider-auto provider-type opts)

自动创建 Provider(从环境变量和配置合并)

参数:

  • provider-type: Provider 类型
  • opts: 用户配置(可选)

返回: Provider 实例

自动创建 Provider(从环境变量和配置合并)

参数:
- provider-type: Provider 类型
- opts:          用户配置(可选)

返回:
Provider 实例
sourceraw docstring

embedclj

批量文本向量化 → {:embeddings [[..] ..] :model .. :usage .. :provider ..}

批量文本向量化 → {:embeddings [[..] ..] :model .. :usage .. :provider ..}
sourceraw docstring

embed-oneclj

单条文本向量化 → 向量

单条文本向量化 → 向量
sourceraw docstring

errorclj

创建错误

创建错误
sourceraw docstring

error?clj

检查是否为错误

检查是否为错误
sourceraw docstring

extract-textclj

(extract-text provider response)

从响应中提取文本

参数:

  • provider: Provider 实例
  • response: API 响应

返回: 文本字符串

从响应中提取文本

参数:
- provider: Provider 实例
- response: API 响应

返回:
文本字符串
sourceraw docstring

extract-tool-callsclj

(extract-tool-calls provider response)

从响应中提取工具调用

参数:

  • provider: Provider 实例
  • response: API 响应

返回: 工具调用列表 [{:id "..." :name "字符串" :args {...}}]

从响应中提取工具调用

参数:
- provider: Provider 实例
- response: API 响应

返回:
工具调用列表 [{:id "..." :name "字符串" :args {...}}]
sourceraw docstring

file-partclj

文件部件(PDF 等;内联数据须给 :media-type)

文件部件(PDF 等;内联数据须给 :media-type)
sourceraw docstring

get-input-tokensclj

获取输入 token 数量

获取输入 token 数量
sourceraw docstring

get-output-tokensclj

获取输出 token 数量

获取输出 token 数量
sourceraw docstring

get-total-tokensclj

获取总 token 数量

获取总 token 数量
sourceraw docstring

image-partclj

图片部件(URL / data URI / base64+:media-type / byte[] / java.io.File)

(image-part "https://example.com/a.png") (image-part (clojure.java.io/file "a.png")) (image-part base64-str {:media-type "image/png"})

图片部件(URL / data URI / base64+:media-type / byte[] / java.io.File)

(image-part "https://example.com/a.png")
(image-part (clojure.java.io/file "a.png"))
(image-part base64-str {:media-type "image/png"})
sourceraw docstring

make-responseclj

创建统一响应结构

参数(关键字):

  • :text 文本内容
  • :tool-calls 工具调用列表
  • :usage token 使用情况(自动归一化)
  • :finish-reason 完成原因(自动归一化)
  • :model 模型名称
  • :id 响应 ID
  • :provider Provider 类型
  • :raw-response 原始响应

返回: ChatResponse record(实现 ILLMResponse 协议)

创建统一响应结构

参数(关键字):
- :text         文本内容
- :tool-calls   工具调用列表
- :usage        token 使用情况(自动归一化)
- :finish-reason 完成原因(自动归一化)
- :model        模型名称
- :id           响应 ID
- :provider     Provider 类型
- :raw-response 原始响应

返回:
ChatResponse record(实现 ILLMResponse 协议)
sourceraw docstring

make-tool-callclj

创建工具调用结构(v0.2 起与中立消息 tool-call 同构)

参数:

  • id: 工具调用 ID
  • name: 工具名称(keyword/字符串,规范化为字符串)
  • args: 工具参数 map

返回: {:id "..." :name "字符串" :args {...}}

创建工具调用结构(v0.2 起与中立消息 tool-call 同构)

参数:
- id:   工具调用 ID
- name: 工具名称(keyword/字符串,规范化为字符串)
- args: 工具参数 map

返回:
{:id "..." :name "字符串" :args {...}}
sourceraw docstring

normalize-finish-reasonclj

归一化完成原因

将不同 Provider 的完成原因统一为标准关键字: :stop | :tool-use | :max-tokens | :content-filter | :unknown

示例: (normalize-finish-reason "tool_calls") ; => :tool-use (normalize-finish-reason "end_turn") ; => :stop

归一化完成原因

将不同 Provider 的完成原因统一为标准关键字:
:stop | :tool-use | :max-tokens | :content-filter | :unknown

示例:
(normalize-finish-reason "tool_calls")  ; => :tool-use
(normalize-finish-reason "end_turn")    ; => :stop
sourceraw docstring

normalize-usageclj

归一化 Token 使用情况

将 OpenAI/Anthropic 的不同命名统一为标准格式: {:input-tokens n :output-tokens m :total-tokens t}

示例: (normalize-usage {:prompt_tokens 100 :completion_tokens 50}) ; => {:input-tokens 100 :output-tokens 50 :total-tokens 150}

归一化 Token 使用情况

将 OpenAI/Anthropic 的不同命名统一为标准格式:
{:input-tokens n :output-tokens m :total-tokens t}

示例:
(normalize-usage {:prompt_tokens 100 :completion_tokens 50})
; => {:input-tokens 100 :output-tokens 50 :total-tokens 150}
sourceraw docstring

provider-nameclj

(provider-name provider)

获取 Provider 名称

获取 Provider 名称
sourceraw docstring

retryable?clj

(retryable? err)

检查错误是否可重试

检查错误是否可重试
sourceraw docstring

stopped-by-max-tokens?clj

检查是否因达到最大 token 而停止

检查是否因达到最大 token 而停止
sourceraw docstring

stopped-by-tool-use?clj

检查是否因工具调用而停止

检查是否因工具调用而停止
sourceraw docstring

stopped-normally?clj

检查是否正常停止

检查是否正常停止
sourceraw docstring

supported-embedding-providersclj

支持 embedding 的内置 provider 列表

支持 embedding 的内置 provider 列表
sourceraw docstring

supported-providersclj

(supported-providers)

获取支持的 Provider 列表

获取支持的 Provider 列表
sourceraw docstring

supports-embedding?clj

(supports-embedding? p)

该实例是否支持 embedding(可信探测:IEmbeddingProvider 无 Object 兜底)

该实例是否支持 embedding(可信探测:IEmbeddingProvider 无 Object 兜底)
sourceraw docstring

supports-function-calling?clj

(supports-function-calling? provider)

检查是否支持函数调用

检查是否支持函数调用
sourceraw docstring

supports-stream?clj

(supports-stream? provider)

检查是否支持流式调用

检查是否支持流式调用
sourceraw docstring

system-messageclj

创建系统消息(中立格式 {:role :system ...})

创建系统消息(中立格式 {:role :system ...})
sourceraw docstring

text-partclj

文本部件 {:type :text :text "..."}

文本部件 {:type :text :text "..."}
sourceraw docstring

tool-messageclj

创建工具结果消息(中立格式 {:role :tool :tool-call-id ...};参数 [id name content])

创建工具结果消息(中立格式 {:role :tool :tool-call-id ...};参数 [id name content])
sourceraw docstring

user-messageclj

创建用户消息(中立格式 {:role :user ...})

创建用户消息(中立格式 {:role :user ...})
sourceraw docstring

with-error-handlingclj

安全执行函数

安全执行函数
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