找回密码
 立即注册
首页 业界区 科技 云Pinecone向量数据库集成SpringAI

云Pinecone向量数据库集成SpringAI

闹忧踫 昨天 19:20

image

RAG实现架构图

image

Pinecone面板

image

查询QPS

image

峰值插入

image
image

模型

     llama-text-embed-v2 是由NVIDIA Research开发的一款先进的文本嵌入模型,旨在提供高质量的检索能力和低延迟的推理性能。该模型也被称为 llama-3_2-nv-embedqa-1b-v2,它基于Llama 3.2 1B架构,并融合了NVIDIA在大型语言模型领域的领先技术,是一款专为生产环境设计的、高效且功能强大的解决方案。

  • 卓越的检索质量: 在多个基准测试中,llama-text-embed-v2 的性能均超越了OpenAI的text-embedding-3-large模型,在某些场景下,其准确率提升超过20%。这使其在构建精准的语义搜索、问答系统和推荐系统等应用时尤为出色。

  • 高效的实时查询: 经过优化,该模型能够提供稳定且可预测的查询速度。其p99延迟(即99%的请求都能在此时间内得到响应)比OpenAI的同类大型模型快12倍,从而确保了流畅的用户体验。

  • 强大的多语言能力: llama-text-embed-v2 支持包括中文在内的26种语言,其他还涵盖英语、西班牙语、印地语、日语、韩语、法语和德语等。这一特性使其能够轻松应对跨语言的检索和信息处理任务。

  • 灵活的配置选项:

    • 可变维度: 支持384、512、768、1024、2048等多种输出嵌入维度,允许开发者根据存储成本和应用需求进行灵活选择。

    • 长文本支持: 最大输入token数量可达2048个,能够有效处理较长的文档和文本片段。

  • 技术架构与性能

    llama-text-embed-v2 的核心是Llama 3.2 1B模型,通过NVIDIA的先进技术进行蒸馏和优化,将一个原本庞大的70亿参数模型(NV-2)的精华浓缩到一个更小、更高效的10亿参数模型中。这种设计不仅保证了模型的高质量,也显著降低了部署和运行成本。

    在性能方面,特别是在针对特定领域的检索任务(如金融领域的FiQA数据集)和常识问答(如Natural Questions和HotpotQA数据集)上,该模型均表现出与甚至超越业界顶尖模型的实力。

    应用场景

    凭借其出色的性能和多功能性,llama-text-embed-v2 广泛适用于以下场景:

    • 语义搜索: 快速、准确地从海量文本数据中检索出与用户查询意图最相关的内容。

    • 检索增强生成 (RAG): 作为RAG系统的核心组件,为大型语言模型提供精准的背景知识,以生成更可靠、更具事实性的回答。

    • 问答系统: 构建能够理解并回答复杂问题的智能问答机器人。

    • 文本聚类与分类: 对文档进行自动化分类和聚类,方便信息管理和分析。

    • 推荐系统: 根据用户的兴趣和行为,推荐相关的文章、产品或服务。

    工程实践

    依赖, 实际上版本是V4.0.1

    1. <dependency><br> <groupId>org.springframework.ai</groupId><br> spring-ai-starter-vector-store-pinecone</artifactId><br></dependency>
    复制代码

    包含

    1. <groupId>io.pinecone</groupId><br>pinecone-client</artifactId><br><version>4.0.1</version>
    复制代码

    常见配置

    1. spring:
    2. ai:
    3. vectorstore:
    4. pinecone:
    5. apiKey: ${PINECONE_API_KEY}
    6. environment: ${PINECONE_ENV}
    7. index-name: ${PINECONE_INDEX}
    8. project-id: ${PINECONE_PROJECT_ID}
    复制代码

    环境变量

    image

    Spring AI 下边界问题

    异常: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

    解决方案

    // 在RagDataLoader类中添加批次大小常量
    private static final int BATCH_SIZE = 1000;

    // 修改run方法中的处理逻辑
    logger.info("Creating Embeddings...");
    try {
         // Create a JSON reader with fields relevant to our use case
         JsonReader loader = new JsonReader(file, KEYS);
         // Use the autowired VectorStore to insert the documents into Redis
         List documentList = loader.get();
        
         // 分批处理文档
         for (int i = 0; i < documentList.size(); i += BATCH_SIZE) {
             int endIndex = Math.min(i + BATCH_SIZE, documentList.size());
             List batch = documentList.subList(i, endIndex);
             vectorStore.add(batch);
             logger.info("Processed batch {}/{}", (i / BATCH_SIZE) + 1,
                        (documentList.size() + BATCH_SIZE - 1) / BATCH_SIZE);
         }
    } catch (RuntimeException e) {
         if (e.getCause() instanceof IOException) {
             throw (IOException) e.getCause();
         }
         throw e;
    }


    维度dimension异常

    INVALID_ARGUMENT: Vector dimension 384 does not match the dimension of the index 1024

    创建Index的dimension与工程需要一致

    image

    原因是嵌入模型维度与 Pinecone 索引维度不匹配。 检查配置一致性

    spring.ai.vectorstore.pinecone.dimension=384


    运行日志

    2025-10-14T17:02:35.742+08:00  INFO 3844 --- [           main] com.redis.demo.spring.ai.RagDataLoader   : Embeddings already loaded (found 35799 documents). Skipping
    2025-10-14T17:02:42.790+08:00  INFO 3844 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
    2025-10-14T17:02:42.791+08:00  INFO 3844 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
    2025-10-14T17:02:42.793+08:00  INFO 3844 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
    2025-10-14T17:02:43.392+08:00  INFO 3844 --- [nio-8080-exec-1] ai.djl.pytorch.engine.PtEngine           : PyTorch graph executor optimizer is enabled, this may impact your inference latency and throughput. See:
    https://docs.djl.ai/master/docs/development/inference_performance_optimization.html#graph-executor-optimization
    2025-10-14T17:02:43.394+08:00  INFO 3844 --- [nio-8080-exec-1] ai.djl.pytorch.engine.PtEngine           : Number of inter-op threads is 4
    2025-10-14T17:02:43.394+08:00  INFO 3844 --- [nio-8080-exec-1] ai.djl.pytorch.engine.PtEngine           : Number of intra-op threads is 4

    我们Chat Model使用deepseek-ai/DeepSeek-V3, 基于硅基流动。还有一些注意事项:

    免费Pinecone云套餐不支持命名空间,需将所有数据存储在默认命名空间中。
    使用 Pinecone 的稀疏索引时,需确保嵌入模型支持稀疏输出(如pinecone-sparse-english-v0),在 Spring AI 中,通过PineconeVectorStore的sparseModel参数配置稀疏嵌入模型

    通过 Pinecone 控制台或 API 预创建索引,确保索引类型(如稠密、稀疏)和距离度量(如余弦、点积)与业务需求匹配。
    避免在运行时频繁创建 / 删除索引,可通过版本控制或蓝绿部署实现零停机更新

    总结

            在 Spring AI 集成 Pinecone 的过程中,常见问题主要集中在配置、数据格式、性能优化和功能适配等方面。代码在这儿。Spring AI官方文档


    今天先到这儿,希望对AI,云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管理,信息安全,团队建设 有参考作用 , 您可能感兴趣的文章:
    微服务架构设计
    视频直播平台的系统架构演化
    微服务与Docker介绍
    Docker与CI持续集成/CD
    互联网电商购物车架构演变案例
    互联网业务场景下消息队列架构
    互联网高效研发团队管理演进之一
    消息系统架构设计演进
    互联网电商搜索架构演化之一
    企业信息化与软件工程的迷思
    企业项目化管理介绍
    软件项目成功之要素
    人际沟通风格介绍一
    精益IT组织与分享式领导
    学习型组织与企业
    企业创新文化与等级观念
    组织目标与个人目标
    初创公司人才招聘与管理
    人才公司环境与企业文化
    企业文化、团队文化与知识共享
    高效能的团队建设
    项目管理沟通计划
    构建高效的研发与自动化运维
    某大型电商云平台实践
    互联网数据库架构设计思路
    IT基础架构规划方案一(网络系统规划)
    餐饮行业解决方案之客户分析流程
    餐饮行业解决方案之采购战略制定与实施流程
    餐饮行业解决方案之业务设计流程
    供应链需求调研CheckList
    企业应用之性能实时度量系统演变

    如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:

    _thumb_thumb_thumb_thumb_thumb_thumb

    作者:Petter Liu
    出处:http://www.cnblogs.com/wintersun/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。


    来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    相关推荐

    您需要登录后才可以回帖 登录 | 立即注册