28 lines
1.5 KiB
TypeScript
28 lines
1.5 KiB
TypeScript
/**
|
||
* Memory Embedder — 本地向量记忆嵌入接口(v0.8.1 P1-1)
|
||
*
|
||
* 职责边界:本模块只定义记忆系统消费的嵌入契约,不绑定任何 Provider 实现。
|
||
* main.ts 按用户配置装配:仅在 Provider 为 Ollama(本地推理,零成本、数据不出设备)
|
||
* 且设置面板配置了 `memory.embeddingModel` 时注入真实实现;否则保持 null,
|
||
* MemoryManager 自动回退纯 TF-IDF 检索(行为与历史版本完全兼容)。
|
||
*
|
||
* 根治背景:OllamaAdapter.embed() 自实现以来全项目零调用 —— 本地向量检索能力
|
||
* 一直躺在代码里,TF-IDF bigram 对同义改写("我喜欢简洁回答" vs "回复要短")
|
||
* 零召回。本契约激活该能力,检索升级为 混合评分(向量余弦 × TF-IDF)。
|
||
*/
|
||
|
||
/** 嵌入失败/不可用的统一返回:null = 本次无法向量化(调用方回退 TF-IDF 路径) */
|
||
export type MemoryEmbedFn = (text: string) => Promise<number[] | null>;
|
||
|
||
export interface MemoryEmbedder {
|
||
embed: MemoryEmbedFn;
|
||
/**
|
||
* v0.8.2 P3-1: 嵌入模型标识(指纹)。
|
||
* 用户更换 embedding 模型后,旧向量与新查询向量维度/语义空间不匹配 ——
|
||
* 维度不同余弦静默为 0,同维不同模型产生噪声分数。Manager 以该标识标注
|
||
* 每条向量(embedding_model 列),检索时模型不匹配的向量视为缺失并惰性重算。
|
||
* 未提供时无法做指纹校验(旧向量一律接受 —— 保持旧行为兼容)。
|
||
*/
|
||
readonly modelName?: string;
|
||
}
|