当前位置: 首页 > news >正文

Spring AI 从入门到精通-Embedding

7. Embedding:AI 的"理解"从数字开始

7.1 一个比喻:气味地图

想象你走进一家咖啡店,你闻到咖啡的香气、烤面包的焦味、还有一点点奶香。你的大脑不需要看到"咖啡豆"三个字,就能判断这是咖啡店。

Embedding(嵌入)就是这个过程的数字版。它把一段文字转换成一串浮点数(向量),这串数字"代表"了文字的含义。语义相近的文字,向量在空间中距离也近。

距离近

距离远

咖啡

[0.23, -0.45, 0.78, ...]

拿铁

[0.21, -0.42, 0.80, ...]

汽车

[-0.67, 0.12, -0.33, ...]

7.2 EmbeddingModel 接口

Spring AI 的EmbeddingModel接口极其简洁:

publicinterfaceEmbeddingModelextendsModel<EmbeddingRequest,EmbeddingResponse>{// 嵌入一段文本float[]embed(Stringtext);// 嵌入一个 Document 对象float[]embed(Documentdocument);// 批量嵌入List<float[]>embed(List<String>texts);// 嵌入并返回完整响应(含元数据)EmbeddingResponseembedForResponse(List<String>texts);// 获取向量维度intdimensions();}

7.3 第一个 Embedding 示例

@AutowiredprivateEmbeddingModelembeddingModel;publicvoiddemo(){// 嵌入一段文本float[]vector=embeddingModel.embed("Spring AI 是一个强大的 AI 框架");System.out.println("向量维度: "+vector.length);// 比如 1536(OpenAI)或 768(Ollama)System.out.println("前 5 个值: "+Arrays.toString(Arrays.copyOf(vector,5)));// 输出示例: [0.0123, -0.0456, 0.0789, 0.0234, -0.0567]// 批量嵌入List<float[]>vectors=embeddingModel.embed(List.of("Java 编程语言","Python 编程语言","今天天气很好"));// 计算余弦相似度doublesimilarity=cosineSimilarity(vectors.get(0),vectors.get(1));System.out.println("Java 和 Python 的相似度: "+similarity);// 应该很高,比如 0.85doublesimilarity2=cosineSimilarity(vectors.get(0),vectors.get(2));System.out.println("Java 和天气的相似度: "+similarity2);// 应该很低,比如 0.12}// 余弦相似度计算:衡量两个向量在方向上的相似程度// 值越接近 1 表示语义越相似,越接近 0 表示越不相关privatedoublecosineSimilarity(float[]a,float[]b){doubledot=0,normA=0,normB=0;for(inti=0;i<a.length;i++){dot+=a[i]*b[i];normA+=a[i]*a[i];normB+=b[i]*b[i];}returndot/(Math.sqrt(normA)*Math.sqrt(normB));}

7.4 支持的 Embedding 模型

提供商依赖维度特点
OpenAIspring-ai-starter-model-openai1536/3072最常用
Azure OpenAIspring-ai-starter-model-azure-openai1536企业合规
Ollamaspring-ai-starter-model-ollama768/4096免费本地
Transformers (ONNX)spring-ai-starter-model-transformers384/768纯本地,无网络
Vertex AIspring-ai-starter-model-vertex-ai768Google 生态
Bedrockspring-ai-starter-model-bedrock1024/1536AWS 生态
Mistral AIspring-ai-starter-model-mistral-ai1024欧洲厂商

7.5 配置 Embedding 模型

# OpenAI Embedding spring.ai.openai.api-key=${OPENAI_API_KEY} spring.ai.openai.embedding.options.model=text-embedding-3-small # Ollama Embedding(免费本地) spring.ai.ollama.embedding.options.model=nomic-embed-text

7.6 Document 对象:带元数据的文本

在 RAG 场景中,我们不只嵌入"纯文本",而是嵌入带元数据的Document对象:

Documentdoc=newDocument("Spring AI 是 Spring 生态的 AI 框架,支持多种模型和向量数据库。",Map.of("source","官方文档","page",1,"author","Spring 团队","category","AI"));float[]embedding=embeddingModel.embed(doc);// 元数据可用于后续过滤

7.7 一个完整的相似度搜索 Demo

@ServicepublicclassSemanticSearchService{privatefinalEmbeddingModelembeddingModel;publicSemanticSearchService(EmbeddingModelembeddingModel){this.embeddingModel=embeddingModel;}/** * 在候选文档中搜索与查询最相似的文档 */publicList<ScoredDocument>search(Stringquery,List<Document>candidates,inttopK){// 1. 嵌入查询float[]queryEmbedding=embeddingModel.embed(query);// 2. 嵌入所有候选文档(批量)List<float[]>candidateEmbeddings=embeddingModel.embed(candidates.stream().map(Document::getText).toList());// 3. 计算相似度并排序returnIntStream.range(0,candidates.size()).mapToObj(i->newScoredDocument(candidates.get(i),cosineSimilarity(queryEmbedding,candidateEmbeddings.get(i)))).sorted((a,b)->Double.compare(b.score,a.score)).limit(topK).toList();}}recordScoredDocument(Documentdocument,doublescore){}

http://www.jsqmd.com/news/971390/

相关文章:

  • Java数据库连接池学习
  • 神经渲染引爆虚拟制片:技术原理、实战应用与未来蓝图
  • 蛋糕美食元服务_我的实现指南
  • 25+图像控制工具:ComfyUI ControlNet Auxiliary Preprocessors如何革新AI绘图预处理工作流
  • Java Agent Premain Agentmain
  • 2026 济南防水补漏服务商口碑测评榜单|全屋渗漏维修机构优选指南 - 宅安选房屋修缮
  • 德国酷贝漆靠谱吗? - myqiye
  • 水泵隔音降噪技术全解析:新能源噪音治理、新能源隔音降噪、机房噪音治理、水泵房噪音治理、车间噪音治理、车间隔音降噪选择指南 - 优质品牌商家
  • 手机号查QQ终极指南:3个技巧帮你找回遗忘的账号
  • 动平衡机靠谱品牌,中联试验机的口碑怎样 - mypinpai
  • 如何快速掌握ExifToolGui:照片元数据管理的完整指南
  • 2026年托管加盟品牌实测推荐:托管加盟多少钱、托管加盟小饭桌、托管加盟手续、托管加盟推荐、教育加盟哪家好、教育加盟多少钱选择指南 - 优质品牌商家
  • 2026年修补砂浆厂家推荐榜单:快速修补、高强度修补与地面修复砂浆精选指南 - 品牌发掘
  • 关于下载pip install faiss-cpu失败的问题
  • 手绘字画和印刷字画怎么分?一招不再买错 - 深鉴新闻
  • 5个突破性功能:重新定义英雄联盟游戏体验的一站式解决方案
  • 企业品牌声誉管理靠谱之选(2026年6月):AI舆情监测/危机处置/声誉修复三大技术流派全攻略 - 玖叁鹿
  • 2026 东莞防水补漏服务商口碑测评榜单|全屋渗漏维修机构优选指南(6 月最新) - 宅安选房屋修缮
  • 终极指南:免费快速下载B站4K高清视频的完整教程
  • 2026年薄型气凝胶价格,哪家更实惠 - mypinpai
  • .net 简单的数据库操作框架
  • 《jQuery 过滤》
  • 2026年6月最新苏州管道疏通/马桶下水道疏通公司评价高的Top5:优选110公安备案+CCTV内窥镜 - 极速版本
  • 2026 宁波防水补漏服务商口碑测评榜单|全屋渗漏维修机构优选指南(6 月最新) - 宅安选房屋修缮
  • 索引:图书馆的索书牌,数据库查询加速神器
  • 全自动L型封切热收缩切角包膜机技术选型与厂家解析:开箱机厂家/收缩膜包装机厂家/热收缩机厂家/热收缩膜包装设备厂家/选择指南 - 优质品牌商家
  • 终极免费抖音批量下载工具:3步完成无水印视频一键保存
  • 2026年 玻璃钢防腐/三布五油/重防腐施工厂家推荐:专业防腐蚀工程结合陶瓷颗粒防滑路面、泡菜池及无震动止滑坡道公司精选! - 品牌发掘
  • 域名真实性校验架构:非法平台钓鱼攻击防御研究
  • 为什么Flameshot成为开发者最爱的开源截图工具?探索其技术架构与高效工作流