Embedding Provider 实现与工厂
与对话 provider 分开:embedding 模型是另一种模型(另一个端点、另一套参数、
另一份计费),所以它是独立实例而不是给 ILLMProvider 加方法——对齐 Vercel AI SDK
的 openai.embedding(...) 与 openai.chat(...) 两条线。好处是能力探测不撒谎:
(emb/embedding-provider? p) 为真,就是真能 embed;Anthropic 这种没有 embedding
服务的厂商,这里根本没有条目。
内置(create-provider 第一参数):
:openai / :zhipu / :siliconflow / :ollama / :gemini / :mistral / :dashscope /
:openai-compat(任意兼容端点,:base-url 必填)/ :mock(确定性假向量,测试用)
(require '[im.ttalk.agent.provider.embeddings :as emb])
(def e (emb/create-provider :openai)) ;; 取 OPENAI_API_KEY
(emb/embed e {} ["你好" "世界"])
;; => {:embeddings [[...] [...]] :model "text-embedding-3-small"
;; :usage {:input-tokens 8 :total-tokens 8} :provider :openai}
(emb/embed-one e {:dimensions 256} "只要一条")
;; 自建 / 私有兼容端点
(emb/create-provider :openai-compat
{:base-url "https://my-gw.internal/v1" :api-key "..." :model "bge-m3"})
调用时的 config 覆盖实例 config:{:model :dimensions :batch-size :timeout :retry :encoding-format :user :extra-headers :extra-body}(DashScope 另有
:text-type)。
Embedding Provider 实现与工厂
**与对话 provider 分开**:embedding 模型是另一种模型(另一个端点、另一套参数、
另一份计费),所以它是独立实例而不是给 `ILLMProvider` 加方法——对齐 Vercel AI SDK
的 `openai.embedding(...)` 与 `openai.chat(...)` 两条线。好处是**能力探测不撒谎**:
`(emb/embedding-provider? p)` 为真,就是真能 embed;Anthropic 这种没有 embedding
服务的厂商,这里根本没有条目。
内置(`create-provider` 第一参数):
:openai / :zhipu / :siliconflow / :ollama / :gemini / :mistral / :dashscope /
:openai-compat(任意兼容端点,:base-url 必填)/ :mock(确定性假向量,测试用)
```clojure
(require '[im.ttalk.agent.provider.embeddings :as emb])
(def e (emb/create-provider :openai)) ;; 取 OPENAI_API_KEY
(emb/embed e {} ["你好" "世界"])
;; => {:embeddings [[...] [...]] :model "text-embedding-3-small"
;; :usage {:input-tokens 8 :total-tokens 8} :provider :openai}
(emb/embed-one e {:dimensions 256} "只要一条")
;; 自建 / 私有兼容端点
(emb/create-provider :openai-compat
{:base-url "https://my-gw.internal/v1" :api-key "..." :model "bge-m3"})
```
调用时的 config 覆盖实例 config:`{:model :dimensions :batch-size :timeout
:retry :encoding-format :user :extra-headers :extra-body}`(DashScope 另有
:text-type)。内置 embedding 端点:{provider {:kind :base-url :endpoint :env-key :model :batch-size}}
:kind —— :openai-compat(缺省)/ :dashscope(原生形状)/ :mock 没有条目 = 该厂商没有(公开的)embedding 服务,别硬凑一个。
内置 embedding 端点:{provider {:kind :base-url :endpoint :env-key :model :batch-size}}
:kind —— :openai-compat(缺省)/ :dashscope(原生形状)/ :mock
没有条目 = 该厂商没有(公开的)embedding 服务,别硬凑一个。(create-provider provider-type)(create-provider provider-type opts)创建 embedding provider
参数:
校验(创建即失败,不拖到调用时):未知类型、缺 :base-url、缺 api-key。
创建 embedding provider
参数:
- provider-type: builtin-embeddings 的键(:openai / :dashscope / :mock / …)
- opts: 覆盖项 {:api-key :base-url :endpoint :model :dimensions :batch-size
:timeout :retry :extra-headers :extra-body}
校验(创建即失败,不拖到调用时):未知类型、缺 :base-url、缺 api-key。(embed provider texts)(embed provider config texts)批量向量化。config 缺省 {}(用实例自身配置)。
批量向量化。config 缺省 {}(用实例自身配置)。
(embed-one provider text)(embed-one provider config text)单条向量化 → 向量本身
单条向量化 → 向量本身
(supported-providers)支持的 embedding provider 列表
支持的 embedding provider 列表
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 |