Spring Ai学习--向量检索
一、检索相关的主要类与协作流程在 Spring AI 中向量检索Vector Search是构建 RAG检索增强生成应用的基础能力主要涉及以下核心接口/类类/接口职责说明EmbeddingModel向量化引擎负责将文本或带元数据的文档转换为向量嵌入Document数据载体表示一段待检索的文本片段不是完整的原始文件通常由 Reader 读取并分割得到VectorStore向量存储与检索的统一抽象负责向量的持久化、相似性搜索和删除操作SearchRequest封装检索参数包括查询文本、返回数量、相似度阈值、元数据过滤条件等整体协作流程原始数据 →Reader读取并切分为Document→TextSplitter可选进一步分割 →EmbeddingModel将Document向量化 → 写入VectorStore→ 检索时构造SearchRequest→ 通过VectorStore.similaritySearch获取语义相似的文档。二、核心类详解1. EmbeddingModel – 文本向量化模型Embedding 的本质是将自然语言映射到高维空间中的一个向量点。语义越接近的文本其向量在空间中的距离余弦相似度或欧氏距离也越近。EmbeddingModel接口提供了多种便捷方法public interface EmbeddingModel extends ModelEmbeddingRequest, EmbeddingResponse { EmbeddingResponse call(EmbeddingRequest request); default float[] embed(String text) { /* ... */ } float[] embed(Document document); default Listfloat[] embed(ListString texts) { /* ... */ } default Listfloat[] embed(ListDocument documents, EmbeddingOptions options, BatchingStrategy batchingStrategy) { /* ... */ } default EmbeddingResponse embedForResponse(ListString texts) { /* ... */ } default int dimensions() { return this.embed(Test String).length; } }可以直接将字符串向量化embed(String text)也可以为Document生成嵌入此时Document可携带额外元数据。调用call(EmbeddingRequest request)可获得完整的响应结果request中可指定使用的模型及参数。dimensions()返回向量维度常用于创建 VectorStore 时指定索引维度。2. Document – 文本数据载体Document是 Spring AI 中表示一段文本的最小单元结构如下public class Document { private String id; // 唯一标识 private String content; // 文本内容 private Media media; // 多模态内容可选 private MapString, Object metadata; // 元数据如来源、页码、标题等不参与向量化 private float[] embedding; // 对应的向量由 EmbeddingModel 生成 }常用 DocumentReader – 从不同数据源读取并生成 Document纯文本文件 – TextReaderTextReader reader new TextReader(classpath:data/readme.txt); ListDocument docs reader.read();PDF 文件PdfDocumentReader基于 PdfBox可指定页码范围PdfDocumentReader reader new PdfDocumentReader(classpath:data/sample.pdf); ListDocument docs reader.read();PagePdfDocumentReader按页拆分每页生成一个DocumentPagePdfDocumentReader reader new PagePdfDocumentReader(classpath:data/sample.pdf); ListDocument docs reader.read();JSON 格式 – JsonReader支持使用 JSONPath 提取指定字段作为文档内容。JsonReader reader new JsonReader(classpath:data/items.json, $.items[*].description); ListDocument docs reader.read();通用文档解析 – TikaDocumentReader支持 PDF、Word、Excel、PPT、HTML 等几乎所有常见格式。TikaDocumentReader reader new TikaDocumentReader(classpath:data/guide.docx); ListDocument docs reader.read();Markdown 文件 – MarkdownDocumentReader按标题层级、段落自动切分并将标题信息存入元数据。MarkdownDocumentReader reader new MarkdownDocumentReader(classpath:data/note.md); ListDocument docs reader.read();Reader支持格式切分方式元数据丰富度适用场景TextReader.txt 等纯文本单个文件作为一个 Document除非另行分割自动添加文件名等基础信息简单文本处理PdfDocumentReaderPDF可指定页码范围默认为整个文档包含页数、文件名等非结构化 PDF 提取PagePdfDocumentReaderPDF每页生成一个 Document自动添加页码、文件名需要按页检索 PDF 的场景JsonReaderJSON通过 JSONPath 指定字段每个匹配项为一个 Document可保留原始 JSON 键值作为元数据从 JSON 数据源提取结构化内容TikaDocumentReaderPDF、Word、Excel、PPT、HTML 等解析后整体返回可配合 TextSplitter 二次切分提取格式相关的元数据如作者、标题等多格式混合环境统一文档处理MarkdownDocumentReader.md按标题层级、段落自动切分记录标题层级、章节结构Markdown 知识库、技术文档索引文本分割器读取后的Document通常还需要进一步切分成更小的块以满足模型的 Token 限制、保持语义完整性和提高检索精度。Spring AI 提供了多种TextSplitter实现核心差异体现在分割策略、重叠设计和适用场景上。分割器分割策略重叠支持优点缺点适用场景TokenTextSplitter按 Token 数量切分基于分词器支持chunkOverlap重叠精确控制 Token 长度适配模型上下文窗口依赖分词器分割粒度较细可能割裂长句对 Token 敏感的大模型应用如 RAGCharacterTextSplitter按字符数切分支持chunkSize和chunkOverlap实现简单不依赖分词库性能高不考虑语义可能在词中断开Token 数不可控快速原型、粗略切分MarkdownTextSplitter按 Markdown 结构标题、段落切分支持段落间重叠保留文档层次结构维护语义完整性仅适用于 Markdown 格式灵活性较低Markdown 文档精细索引DocumentSplitter (基于 SpEL 表达式)自定义表达式如按 JSONPath、XML 节点等灵活配置极强的定制能力可针对结构化文档切割使用复杂度高需额外学习成本特殊数据结构如 API 文档处理选择建议通用 RAG 应用优先选择TokenTextSplitter配合chunkOverlap保留上下文衔接。对 Markdown 文档体系使用MarkdownTextSplitter可获得更优的语义保持。快速试验或性能要求高时可使用CharacterTextSplitter但需注意 Token 溢出风险。示例配置TokenTextSplitterTokenTextSplitter splitter TokenTextSplitter.builder() .withChunkSize(500) // 每块最大 Token 数 .withChunkOverlap(50) // 块之间重叠 Token 数 .build(); ListDocument chunks splitter.apply(documents);3. VectorStore – 向量存储与检索VectorStore接口统一了向量的写入、删除与检索操作public interface VectorStore extends DocumentWriter { // 添加文档 void add(ListDocument documents); // 按照ID删除 void delete(ListString idList); // 按照语义检索 default ListDocument similaritySearch(String query) { /* ... */ } // 增加参数检索 ListDocument similaritySearch(SearchRequest request); }4. SearchRequest – 检索请求封装SearchRequest用于构建语义检索条件支持设置返回数量、相似度阈值和元数据过滤。SearchRequest request SearchRequest.query(如何配置向量数据库) .withTopK(3) // 返回最相似的 3 条结果 .withSimilarityThreshold(0.75) // 相似度阈值 .withFilterExpression(author spring and year 2025);过滤表达式withFilterExpression作用于Document的metadata字段可以实现精确筛选。最终通过vectorStore.similaritySearch(request)执行检索。三、常用的 VectorStore 实现Spring AI 支持多种向量数据库均通过实现VectorStore接口与框架集成可按需选择。1. SimpleVectorStore类型纯内存存储基于Map实现特点无需外部依赖启动快适合原型开发和测试缺点数据不持久化重启即丢失示例VectorStore vectorStore new SimpleVectorStore(embeddingModel);2. PgVectorStore类型基于 PostgreSQL 的pgvector扩展特点与关系型数据库深度集成支持 ACID 事务元数据过滤可使用标准 SQL 语法适用已使用 PostgreSQL 的团队可复用现有运维能力spring: ai: vectorstore: pgvector: host: localhost port: 5432 database: vectordb username: user password: pass table-name: spring_ai_docs dimensions: 1536 # 需与 EmbeddingModel 的维度一致3. RedisVectorStore类型基于 Redis Stack 的向量相似性搜索特点低延迟、高吞吐支持 FLAT、HNSW 等索引算法适用对实时性要求高的场景如推荐系统、实时问答spring: ai: vectorstore: redis: host: localhost port: 6379 index: my-index4. ChromaVectorStore类型轻量级开源向量数据库专为 AI 应用设计特点部署简单Docker 或嵌入式提供 Web UI支持元数据过滤适用中小规模 RAG 应用追求开箱即用5. 专业向量数据库 – Milvus / Qdrant / Weaviate这三种均为高性能、分布式的专业向量数据库适合企业级大规模数据场景。产品特点适用场景Milvus分布式架构支持十亿级向量索引类型丰富大型知识库、图像搜索QdrantRust 编写高吞吐集成过滤与推荐能力高性能 RAG复杂过滤Weaviate原生支持 GraphQL内置向量化模块需要对象存储与向量结合的场景

相关新闻

了然OFC_2026大菠萝OFC学习工具横评

了然OFC_2026大菠萝OFC学习工具横评

引言:大菠萝为什么比看起来难 OFC(Open Face Chinese,中文常叫"大菠萝扑克")规则很好懂:每人陆续拿牌,把牌摆进头道(3张)、中道(5张)、尾道(5张)三道里,和别人分道比大小。但真上手你会发现,它的策略深度远超第一印象——因为牌是一张张发、且摆下去就不能再动,你得在…

2026/7/3 5:44:07阅读更多 →
[AI in Education] 上海高中英语作文评分 prompt

[AI in Education] 上海高中英语作文评分 prompt

用法同语文作文,题目一定要发,然后再发学生的习作,否则打分不准。推荐配套模型doubao-seed-2-0-pro:速度较慢,平均偏差 1.5(略偏打高)。qwen3.6-plus:速度较慢,平均偏差 …

2026/7/3 5:44:07阅读更多 →
别把换AI接口当成改URL:影子流量、灰度发布与回滚实战

别把换AI接口当成改URL:影子流量、灰度发布与回滚实战

很多团队迁移 AI 接口时,执行方案只有三步:替换 Base URL,换一把 API Key,发送一句“你好”确认能返回。测试成功后,全量流量立即切到新上游。真正的问题往往在几小时或几天后才出现:普通问答正常&#xff…

2026/7/3 5:44:07阅读更多 →
如何快速搭建AI结对编程环境:Aider终端助手的完整指南

如何快速搭建AI结对编程环境:Aider终端助手的完整指南

如何快速搭建AI结对编程环境:Aider终端助手的完整指南 【免费下载链接】aider aider is AI pair programming in your terminal 项目地址: https://gitcode.com/GitHub_Trending/ai/aider 你是否厌倦了在IDE和AI聊天窗口之间来回切换?是否希望AI编…

2026/7/3 6:54:10阅读更多 →
RevokeMsgPatcher防撤回补丁原理与实战:让微信QQ消息永久可见

RevokeMsgPatcher防撤回补丁原理与实战:让微信QQ消息永久可见

1. 项目概述与核心价值在即时通讯软件成为工作与生活核心工具的今天,微信和QQ的“消息撤回”功能,时常让人感到一丝无奈。无论是同事发错的重要文件、朋友撤回的八卦消息,还是群聊里一闪而过的关键通知,一旦被撤回,就仿…

2026/7/3 6:54:10阅读更多 →
构建企业级PHP AI安全网关:基于静态分析与语义追踪的WAF革新实践

构建企业级PHP AI安全网关:基于静态分析与语义追踪的WAF革新实践

1. 项目概述:为什么我们需要一个“会思考”的WAF?在传统企业安全防御体系中,Web应用防火墙(WAF)一直扮演着守门员的角色。但干了这么多年安全,我越来越觉得,传统的基于规则和签名的WAF&#xff…

2026/7/3 6:54:10阅读更多 →
终极Aider AI编程助手安装指南:3分钟从零到精通

终极Aider AI编程助手安装指南:3分钟从零到精通

终极Aider AI编程助手安装指南:3分钟从零到精通 【免费下载链接】aider aider is AI pair programming in your terminal 项目地址: https://gitcode.com/GitHub_Trending/ai/aider 想要在终端中拥有一个强大的AI结对编程伙伴吗?Aider正是你需要的…

2026/7/3 6:54:10阅读更多 →
Web渗透测试:全面指南与实战技巧

Web渗透测试:全面指南与实战技巧

Web渗透测试:全面指南与实战技巧Web渗透测试是识别和修复Web应用程序安全漏洞的关键过程。通过模拟恶意攻击者的行为,渗透测试人员可以发现潜在的安全风险,帮助组织加强防御措施。以下内容将详细介绍Web渗透测试的核心概念、常用工具、实战技…

2026/7/3 6:54:10阅读更多 →
文件上传漏洞攻防全解析:从原理到实战的Webshell绕过与防御

文件上传漏洞攻防全解析:从原理到实战的Webshell绕过与防御

1. 项目概述:文件上传漏洞的攻防本质在Web安全领域,文件上传漏洞一直是一个“古老”但极具威胁的入口点。它不像SQL注入那样需要复杂的逻辑构造,也不像XSS那样依赖用户交互,很多时候,它就是一个简单的表单,…

2026/7/3 6:49:10阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/2 12:10:34阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/2 12:10:34阅读更多 →
LV3296与PIC18F45K22的UART通信与USB扩展方案

LV3296与PIC18F45K22的UART通信与USB扩展方案

1. LV3296与PIC18F45K22的硬件搭档解析在嵌入式数据采集系统中,LV3296条形码扫描模块与PIC18F45K22微控制器的组合堪称经典搭配。LV3296作为一款工业级条码扫描头,其核心是一颗高性能CMOS图像传感器,配合专用解码芯片,能自动识别包…

2026/7/3 0:03:41阅读更多 →
AI初创生存指南:6个月完成可信度验证闭环

AI初创生存指南:6个月完成可信度验证闭环

1. 这不是“逆袭指南”,而是一份AI初创公司真实生存手记“How To Beat Odds As an AI Startup?”——这个标题乍看像一句热血口号,但在我带过7个从0到1的AI产品团队、亲手踩过融资失败、技术债崩盘、客户POC卡在最后一公里等23类典型坑之后,…

2026/7/3 0:03:41阅读更多 →
多模态+推理链+RAG 2.0+智能体:工业级AI系统落地四支柱

多模态+推理链+RAG 2.0+智能体:工业级AI系统落地四支柱

1. 这不是又一篇“AI趋势速览”,而是一份实操者手记:当多模态、推理链、检索增强与智能体协作真正撞进工程现场“LAI #73”这个编号本身就像一个暗号——它不属于某家大厂的白皮书,也不是学术会议的议程表,而是长期泡在模型训练集…

2026/7/3 0:03:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/3 1:12:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/3 1:36:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/3 2:08:15阅读更多 →