Embedding Provider 协议(端口)
与 ILLMProvider 并列而非从属:embedding 模型和对话模型是两种不同的模型,
端点、参数、计费都不同,一个 provider 实例支持哪一种是它自己的事(对齐 Vercel
AI SDK 把 LanguageModel 与 EmbeddingModel 分成两个规格)。
所以这里不给 extend-type Object 默认实现——satisfies? 必须是可信的能力
探测(ILLMProvider 就栽在有兜底上,见 model/provider? 注释)。
不支持 embedding 的厂商(如 Anthropic)不实现本协议,调用方 satisfies?
一问便知,不需要「调了才报不支持」。
实现示例:
(defrecord MyEmbeddings [config] IEmbeddingProvider (embed [_ call-config texts] {:embeddings [[0.1 0.2]] :model "m"}))
Embedding Provider 协议(端口)
与 `ILLMProvider` **并列而非从属**:embedding 模型和对话模型是两种不同的模型,
端点、参数、计费都不同,一个 provider 实例支持哪一种是它自己的事(对齐 Vercel
AI SDK 把 `LanguageModel` 与 `EmbeddingModel` 分成两个规格)。
所以这里**不给 `extend-type Object` 默认实现**——`satisfies?` 必须是可信的能力
探测(`ILLMProvider` 就栽在有兜底上,见 `model/provider?` 注释)。
不支持 embedding 的厂商(如 Anthropic)不实现本协议,调用方 `satisfies?`
一问便知,不需要「调了才报不支持」。
实现示例:
(defrecord MyEmbeddings [config]
IEmbeddingProvider
(embed [_ call-config texts] {:embeddings [[0.1 0.2]] :model "m"}))(embed-one provider config text)单条文本 → 单个向量(内部仍是一次批量调用)
单条文本 → 单个向量(内部仍是一次批量调用)
(embedding-provider? x)对象是否实现了 embedding 能力(可信探测:本协议无 Object 兜底)
对象是否实现了 embedding 能力(可信探测:本协议无 Object 兜底)
(ensure-embedding-provider! x)断言对象支持 embedding,否则抛规范错误(不可重试)。 给那些「必须有 embedding 才能干活」的调用方用(如向量检索)。
断言对象支持 embedding,否则抛规范错误(不可重试)。 给那些「必须有 embedding 才能干活」的调用方用(如向量检索)。
文本向量化统一接口。只有一个方法——批量即全部(单条是 1 元批), 维度/模型/批大小都是 config,不各立方法。
文本向量化统一接口。只有一个方法——批量即全部(单条是 1 元批), 维度/模型/批大小都是 config,不各立方法。
(embed this config texts)把文本列表向量化。
参数:
返回: {:embeddings [[float ...] ...] ;; 与 texts 同序等长 :model "text-embedding-3-small" :usage {:input-tokens n :total-tokens n} :provider :openai}
失败:抛 ex-info(data 为规范错误 map,见 model/error)
把文本列表向量化。
参数:
- config: 调用配置 {:model "..." :dimensions n :batch-size n ...}
(缺省取 provider 实例自身配置)
- texts: 字符串列表
返回:
{:embeddings [[float ...] ...] ;; 与 texts **同序等长**
:model "text-embedding-3-small"
:usage {:input-tokens n :total-tokens n}
:provider :openai}
失败:抛 ex-info(data 为规范错误 map,见 model/error)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 |