plugin-embedding-api — 文本向量化契约
包名: @aalis/plugin-embedding-api
源码: packages/plugin-embedding-api/src/index.ts
实现: @aalis/plugin-embedding-openai, @aalis/plugin-embedding-ollama
概述
最小化的 Embedding 服务契约:把一段文本转成 number[] 向量。被 vector memory / 语义搜索 / RAG 等场景消费。
服务接口
ts
interface EmbeddingService {
/** 将文本转为向量 */
embed(text: string): Promise<number[]>;
/** 列出远端可用模型(用于前端下拉框) */
listModels?(): Promise<string[]>;
}获取方式
ts
const embedding = ctx.getService<EmbeddingService>('embedding');
if (!embedding) return; // 未启用任何 embedding 插件时不可用
const vec = await embedding.embed('the quick brown fox');依赖声明:
ts
export const inject = { required: ['embedding'] };注意事项
- 向量维度由具体 provider 决定(如 OpenAI text-embedding-3-small = 1536;ollama nomic-embed-text = 768)。消费方应避免假设维度——
plugin-memory-vector会在初始化时 probe 一次并存为元数据。 - 多个 embedding 实现互斥:同一时间只能有一个绑定到
embedding服务名(通过 contextId 区分多实例)。