闹忧踫 发表于 2025-10-14 19:20:29

云Pinecone向量数据库集成SpringAI

<h1></h1><h2>RAG实现架构图</h2><p></p><iframe width="510" height="498" src="https://player.youku.com/embed/XNjUwNjAxODc1Ng==" frameborder="0" 'allowfullscreen'=""></iframe><h2>Pinecone面板</h2><p></p><p><font size="3">查询QPS</font></p><p></p><p><font size="3"><strong>峰值插入</strong></font></p><p></p><h2>模型</h2><p><font size="3"><b>     llama-text-embed-v2</b> 是由NVIDIA Research开发的一款先进的文本嵌入模型,旨在提供高质量的检索能力和低延迟的推理性能。该模型也被称为 <b>llama-3_2-nv-embedqa-1b-v2</b>,它基于Llama 3.2 1B架构,并融合了NVIDIA在大型语言模型领域的领先技术,是一款专为生产环境设计的、高效且功能强大的解决方案。</font></p><li><p><font size="3"><b>卓越的检索质量</b>: 在多个基准测试中,llama-text-embed-v2 的性能均超越了OpenAI的text-embedding-3-large模型,在某些场景下,其准确率提升超过20%。这使其在构建精准的语义搜索、问答系统和推荐系统等应用时尤为出色。</font></p></li><li><p><font size="3"><b>高效的实时查询</b>: 经过优化,该模型能够提供稳定且可预测的查询速度。其p99延迟(即99%的请求都能在此时间内得到响应)比OpenAI的同类大型模型快12倍,从而确保了流畅的用户体验。</font></p></li><li><p><font size="3"><b>强大的多语言能力</b>: llama-text-embed-v2 支持包括<b>中文</b>在内的26种语言,其他还涵盖英语、西班牙语、印地语、日语、韩语、法语和德语等。这一特性使其能够轻松应对跨语言的检索和信息处理任务。</font></p></li><li><p><font size="3"><b>灵活的配置选项</b>:</font></p><ul><li><p><font size="3"><b>可变维度</b>: 支持384、512、768、1024、2048等多种输出嵌入维度,允许开发者根据存储成本和应用需求进行灵活选择。</font></p></li><li><p><font size="3"><b>长文本支持</b>: 最大输入token数量可达2048个,能够有效处理较长的文档和文本片段。</font></p></li></ul></li><h5><font size="3">技术架构与性能</font></h5><p><font size="3">llama-text-embed-v2 的核心是Llama 3.2 1B模型,通过NVIDIA的先进技术进行蒸馏和优化,将一个原本庞大的70亿参数模型(NV-2)的精华浓缩到一个更小、更高效的10亿参数模型中。这种设计不仅保证了模型的高质量,也显著降低了部署和运行成本。</font></p><p><font size="3">在性能方面,特别是在针对特定领域的检索任务(如金融领域的FiQA数据集)和常识问答(如Natural Questions和HotpotQA数据集)上,该模型均表现出与甚至超越业界顶尖模型的实力。</font></p><h5><font size="3">应用场景</font></h5><p><font size="3">凭借其出色的性能和多功能性,llama-text-embed-v2 广泛适用于以下场景:</font></p><ul><li><p><font size="3"><b>语义搜索</b>: 快速、准确地从海量文本数据中检索出与用户查询意图最相关的内容。</font></p></li><li><p><font size="3"><b>检索增强生成 (RAG)</b>: 作为RAG系统的核心组件,为大型语言模型提供精准的背景知识,以生成更可靠、更具事实性的回答。</font></p></li><li><p><font size="3"><b>问答系统</b>: 构建能够理解并回答复杂问题的智能问答机器人。</font></p></li><li><p><font size="3"><b>文本聚类与分类</b>: 对文档进行自动化分类和聚类,方便信息管理和分析。</font></p></li><li><p><font size="3"><b>推荐系统</b>: 根据用户的兴趣和行为,推荐相关的文章、产品或服务。</font></p></li></ul><h2>工程实践</h2><p><font size="3">依赖, 实际上版本是V4.0.1</font></p><dependency><br>    <groupId>org.springframework.ai</groupId><br>    spring-ai-starter-vector-store-pinecone</artifactId><br></dependency><p><font size="3">包含</font></p><groupId>io.pinecone</groupId><br>pinecone-client</artifactId><br><version>4.0.1</version><p><font size="3"><strong>常见配置</strong></font></p>spring:
ai:
    vectorstore:
      pinecone:
      apiKey: ${PINECONE_API_KEY}
      environment: ${PINECONE_ENV}
      index-name: ${PINECONE_INDEX}
      project-id: ${PINECONE_PROJECT_ID}<p><font size="3"><strong>环境变量</strong></font></p><p></p><p><font size="3"><strong>Spring AI 下边界问题</strong></font></p><p><font size="3" >异常:io.pinecone.proto.VectorServiceGrpc$VectorServiceBlockingStub.upsert io.grpc.StatusRuntimeException: OUT_OF_RANGE: Error, message length too large: found 43643313 bytes, the limit is: 4194304 bytes</font></p><p><font size="3">解决方案</font></p><p><font >// 在RagDataLoader类中添加批次大小常量<br>
private static final int BATCH_SIZE = 1000;</font></p><font >
</font><p><font >// 修改run方法中的处理逻辑<br>
logger.info("Creating Embeddings...");<br>
try {<br>     // Create a JSON reader with fields relevant to our use case<br>     JsonReader loader = new JsonReader(file, KEYS);<br>     // Use the autowired VectorStore to insert the documents into Redis<br>     List<Document> documentList = loader.get();<br>     <br>     // 分批处理文档<br>     for (int i = 0; i < documentList.size(); i += BATCH_SIZE) {<br>         int endIndex = Math.min(i + BATCH_SIZE, documentList.size());<br>         List<Document> batch = documentList.subList(i, endIndex);<br>         vectorStore.add(batch);<br>         logger.info("Processed batch {}/{}", (i / BATCH_SIZE) + 1, <br>                    (documentList.size() + BATCH_SIZE - 1) / BATCH_SIZE);<br>     }<br>
} catch (RuntimeException e) {<br>     if (e.getCause() instanceof IOException) {<br>         throw (IOException) e.getCause();<br>     }<br>     throw e;<br>
}</font></p><p><font ><br></font></p><p><font ></font><font size="3"><strong>维度dimension异常</strong></font> </p><p>INVALID_ARGUMENT: Vector dimension 384 does not match the dimension of the index 1024</p><p>创建Index的dimension与工程需要一致</p><p></p><p><font size="3">原因是嵌入模型维度与 Pinecone 索引维度不匹配。 检查配置一致性</font></p><p><font size="3"></font><font >spring.ai.vectorstore.pinecone.dimension=384</font></p><p><br></p><p><font size="3"><strong>运行日志</strong></font></p><p><font >2025-10-14T17:02:35.742+08:00  INFO 3844 --- [           main] com.redis.demo.spring.ai.RagDataLoader   : Embeddings already loaded (found 35799 documents). Skipping<br>
2025-10-14T17:02:42.790+08:00  INFO 3844 --- o.a.c.c.C...[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'<br>
2025-10-14T17:02:42.791+08:00  INFO 3844 --- o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'<br>
2025-10-14T17:02:42.793+08:00  INFO 3844 --- o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms<br>
2025-10-14T17:02:43.392+08:00  INFO 3844 --- ai.djl.pytorch.engine.PtEngine           : PyTorch graph executor optimizer is enabled, this may impact your inference latency and throughput. See: </font><font >https://docs.djl.ai/master/docs/development/inference_performance_optimization.html#graph-executor-optimization</font><br><font >
2025-10-14T17:02:43.394+08:00  INFO 3844 --- ai.djl.pytorch.engine.PtEngine           : Number of inter-op threads is 4<br>
2025-10-14T17:02:43.394+08:00  INFO 3844 --- ai.djl.pytorch.engine.PtEngine           : Number of intra-op threads is 4</font></p><p><font size="3">我们Chat Model使用deepseek-ai/DeepSeek-V3, 基于硅基流动。还有一些注意事项:</font></p><blockquote><p><font size="3">免费Pinecone云套餐不支持命名空间,需将所有数据存储在默认命名空间中。<br>
使用 Pinecone 的稀疏索引时,需确保嵌入模型支持稀疏输出(如pinecone-sparse-english-v0),在 Spring AI 中,通过PineconeVectorStore的sparseModel参数配置稀疏嵌入模型</font></p><font size="3">通过 Pinecone 控制台或 API 预创建索引,确保索引类型(如稠密、稀疏)和距离度量(如余弦、点积)与业务需求匹配。<br>
避免在运行时频繁创建 / 删除索引,可通过版本控制或蓝绿部署实现零停机更新</font></blockquote><h2>总结</h2><p><font size="3">        在 Spring AI 集成 Pinecone 的过程中,常见问题主要集中在配置、数据格式、性能优化和功能适配等方面。代码在</font><font size="3">这儿</font>。Spring AI<font size="3">官方</font><font size="3">文档</font><font size="3">。</font></p><font ><p><br></p></font><p></p>今天先到这儿,希望对AI,云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管理,信息安全,团队建设 有参考作用 , 您可能感兴趣的文章:<br><font size="2">微服务架构设计</font><br><font size="2">视频直播平台的系统架构演化</font><br><font size="2">微服务与Docker介绍</font><br><font size="2">Docker与CI持续集成/CD</font><br><font size="2">互联网电商购物车架构演变案例</font><br><font size="2">互联网业务场景下消息队列架构</font><br><font size="2">互联网高效研发团队管理演进之一</font><br><font size="2">消息系统架构设计演进</font><br><font size="2">互联网电商搜索架构演化之一</font><br><font size="2">企业信息化与软件工程的迷思</font><br><font size="2">企业项目化管理介绍</font><br><font size="2">软件项目成功之要素</font><br><font size="2">人际沟通风格介绍一</font><br><font size="2">精益IT组织与分享式领导</font><br><font size="2">学习型组织与企业</font><br><font size="2">企业创新文化与等级观念</font><br><font size="2">组织目标与个人目标</font><br><font size="2">初创公司人才招聘与管理</font><br><font size="2">人才公司环境与企业文化</font><br><font size="2">企业文化、团队文化与知识共享</font><br><font size="2">高效能的团队建设</font><br><font size="2">项目管理沟通计划</font><br><font size="2">构建高效的研发与自动化运维</font><font size="2"> <br></font><font size="2">某大型电商云平台实践</font><font size="2"> <br></font><font size="2">互联网数据库架构设计思路</font><font size="2"> <br></font><font size="2">IT基础架构规划方案一(网络系统规划)</font><font size="2"> <br></font><font size="2">餐饮行业解决方案之客户分析流程</font><font size="2"> <br></font><font size="2">餐饮行业解决方案之采购战略制定与实施流程</font><font size="2"> <br></font><font size="2">餐饮行业解决方案之业务设计流程</font><font size="2"> <br></font><font size="2">供应链需求调研CheckList</font><font size="2"> <br></font><font size="2">企业应用之性能实时度量系统演变</font><font size="2"> </font><font size="2">
</font><p></p><p><font size="2">如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:</font></p>
<p></p>
<p id="PSignature" ><font size="4">作者:Petter Liu <br>出处:http://www.cnblogs.com/wintersun/ <br>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。</font></p><br>来源:程序园用户自行投稿发布,如果侵权,请联系站长删除<br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

毁抨句 发表于 6 天前

懂技术并乐意极积无私分享的人越来越少。珍惜
页: [1]
查看完整版本: 云Pinecone向量数据库集成SpringAI