LLM 模块统一 API 入口
提供所有 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)
创建助手消息(中立格式 {:role :assistant ...})
创建助手消息(中立格式 {:role :assistant ...})
(build-tool-result provider tool-id content)构建工具结果消息
参数:
返回: 工具结果消息
构建工具结果消息 参数: - provider: Provider 实例 - tool-id: 工具调用 ID - content: 结果内容 返回: 工具结果消息
(call provider config messages)(call provider config messages tools)调用 LLM(同步)
参数:
返回: 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 "你好"}])(call-stream provider config messages tools on-token)流式调用 LLM
参数:
返回: 最终完整响应
示例: (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)))取 content 的纯文本(字符串原样 / 部件向量取文本部件拼接)
取 content 的纯文本(字符串原样 / 部件向量取文本部件拼接)
创建 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"})(create-provider provider-type)(create-provider provider-type opts)创建 LLM Provider
参数:
返回: 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-..."})(create-provider-auto provider-type)(create-provider-auto provider-type opts)自动创建 Provider(从环境变量和配置合并)
参数:
返回: Provider 实例
自动创建 Provider(从环境变量和配置合并) 参数: - provider-type: Provider 类型 - opts: 用户配置(可选) 返回: Provider 实例
批量文本向量化 → {:embeddings [[..] ..] :model .. :usage .. :provider ..}
批量文本向量化 → {:embeddings [[..] ..] :model .. :usage .. :provider ..}
(extract-text provider response)从响应中提取文本
参数:
返回: 文本字符串
从响应中提取文本 参数: - provider: Provider 实例 - response: API 响应 返回: 文本字符串
(extract-tool-calls provider response)从响应中提取工具调用
参数:
返回: 工具调用列表 [{:id "..." :name "字符串" :args {...}}]
从响应中提取工具调用
参数:
- provider: Provider 实例
- response: API 响应
返回:
工具调用列表 [{:id "..." :name "字符串" :args {...}}]图片部件(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"})创建统一响应结构
参数(关键字):
返回: ChatResponse record(实现 ILLMResponse 协议)
创建统一响应结构 参数(关键字): - :text 文本内容 - :tool-calls 工具调用列表 - :usage token 使用情况(自动归一化) - :finish-reason 完成原因(自动归一化) - :model 模型名称 - :id 响应 ID - :provider Provider 类型 - :raw-response 原始响应 返回: ChatResponse record(实现 ILLMResponse 协议)
创建工具调用结构(v0.2 起与中立消息 tool-call 同构)
参数:
返回: {:id "..." :name "字符串" :args {...}}
创建工具调用结构(v0.2 起与中立消息 tool-call 同构)
参数:
- id: 工具调用 ID
- name: 工具名称(keyword/字符串,规范化为字符串)
- args: 工具参数 map
返回:
{:id "..." :name "字符串" :args {...}}归一化完成原因
将不同 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
归一化 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}支持 embedding 的内置 provider 列表
支持 embedding 的内置 provider 列表
(supports-embedding? p)该实例是否支持 embedding(可信探测:IEmbeddingProvider 无 Object 兜底)
该实例是否支持 embedding(可信探测:IEmbeddingProvider 无 Object 兜底)
(supports-function-calling? provider)检查是否支持函数调用
检查是否支持函数调用
创建系统消息(中立格式 {:role :system ...})
创建系统消息(中立格式 {:role :system ...})
创建工具结果消息(中立格式 {:role :tool :tool-call-id ...};参数 [id name content])
创建工具结果消息(中立格式 {:role :tool :tool-call-id ...};参数 [id name content])
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 |