十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Spring AI 07 · EmbeddingModel 生成向量

Spring AI 07 · EmbeddingModel 生成向量 07 · EmbeddingModel 生成向量 学完能做什么用 EmbeddingModel 把文本转成向量理解维度、批量生成与 token 上限会排查维度相关问题。⏱️ 预计耗时35 分钟含动手 依赖前置第 03 章 pgvector 文档02什么是向量与 Embedding 难度一句话EmbeddingModel 是「文本→向量」的翻译机它输出的向量维度必须和你的 VectorStore 配置一致否则一切崩塌。1. 最小示例一句话转向量ServiceclassEmbeddingDemo{privatefinalEmbeddingModelembeddingModel;// 自动配置注入EmbeddingDemo(EmbeddingModelembeddingModel){this.embeddingModelembeddingModel;}voidrun(){float[]vectorembeddingModel.embed(笔记本电脑);System.out.println(维度 vector.length);// 例如 1536System.out.println(前 3 个分量 vector[0], vector[1], vector[2]);}}embed(String)是最简便的方法直接返回float[]。输出维度由模型决定不是你随便定的见下表。2. 常见模型与维度对照模型维度备注OpenAItext-embedding-3-small1536便宜、够用练手首选OpenAItext-embedding-3-large3072更强、更贵通义text-embedding-v31024国内可用开源bge-large-zh1024中文效果好可本地跑⚠️记住你用的模型维度。VectorStore 的dimensions必须和它相等第 08 章、附录41。3. 批量生成灌库必用灌库时成百上千条文本一条条调既慢又贵。用批量接口一次请求处理多条ListStringtextsList.of(退货政策7 天无理由,会员制度满额升级,配送说明48 小时发货);EmbeddingResponserespembeddingModel.embedForResponse(texts);for(Embeddinge:resp.getResults()){float[]ve.getOutput();// ... 存库或使用}// 看本次 token 消耗成本System.out.println(tokens resp.getMetadata().getUsage().getTotalTokens()); 实际项目中你很少手动调 embedding——vectorStore.add(documents)内部会自动批量转向量。手动调主要用于调试、算相似度、做缓存 key第 37 章语义缓存。4. token 上限长文本会被拒绝每个 embedding 模型对单条输入的 token 数有上限如 8191。超了会报错。所以长文档不能整篇直接 embed必须先分块第 13 章 TextSplitter。分块大小要控制在模型 token 上限内同时兼顾检索精度。长文档 ──分块── 若干小 chunk ──各自 embed── 若干向量 ──存库5. 手动算相似度理解本质VectorStore 会替你算相似度但手动算一次能加深理解回顾 pgvector 文档03float[]aembeddingModel.embed(笔记本电脑);float[]bembeddingModel.embed(便携式电脑);float[]cembeddingModel.embed(苹果);System.out.println(笔记本 vs 便携电脑 余弦相似度 cosine(a,b));// 高System.out.println(笔记本 vs 苹果 余弦相似度 cosine(a,c));// 低// 余弦相似度越接近 1 越像staticfloatcosine(float[]x,float[]y){floatdot0,nx0,ny0;for(inti0;ix.length;i){dotx[i]*y[i];nxx[i]*x[i];nyy[i]*y[i];}return(float)(dot/(Math.sqrt(nx)*Math.sqrt(ny)));}「笔记本 vs 便携电脑」相似度明显高于「笔记本 vs 苹果」——这就是语义搜索的底层。6. 常见坑现象原因 / 处理存库报维度不匹配embedding 模型维度 ≠ VectorStoredimensions长文本报错超过模型 token 上限需先分块换了 embedding 模型后检索全乱旧向量和新模型不兼容必须重建全部向量中文效果差换中文友好的模型bge-zh / 通义 铁律同一个向量库里的所有向量必须由同一个 embedding 模型生成。换模型 重灌库。7. 一句话总结EmbeddingModel 把文本翻译成固定维度的向量维度由模型决定、必须与 VectorStore 对齐灌库靠批量、长文本先分块、换模型要重灌。➡️ 下一章08-VectorStore抽象与pgvector配置.md把生成的向量存进 pgvector搞懂自动建表、索引、距离与维度配置。
返回列表