找回密码
 立即注册
首页 业界区 业界 Spring with AI (4): 搜索扩展——向量数据库与RAG(上) ...

Spring with AI (4): 搜索扩展——向量数据库与RAG(上)

圣罩 前天 01:25
本文代码:
https://github.com/JunTeamCom/ai-demo/tree/release-4.0
https://github.com/JunTeamCom/ai-demo-tools/tree/release-4.0/data-loader
本章只讲解RAG整体流程、向量数据库、数据写入;
查询向量数据库、RAG应用在下一讲。
Spring with AI系列,只关注上层AI的应用程序(基于JAVA搭建),不关注底层的LLM原理、搭建等技术。
RAG能通过实时搜索数据库的方式,扩展已经训练固化的大模型的知识能力。
RAG(Retrieval-Augmented Generation)检索增强生成
retrieval /rɪˈtriːvl/ n.检索
augmented /ɔ:g'mentɪd/ adj.增强的
generation /ˌdʒenəˈreɪʃn/ n.生成
通过检索、增强大模型生成的内容。
在前文中,我们通过文本模板,补充了“规则”,进而增强了大模型生成的内容。
然而这只是简单的“文本匹配+配置文件”的方式,面对复杂问题和庞大的知识库,完全不具备现实意义。
RAG整体的流程和组成部分如下:
flowchart LR    subgraph VectorDB[向量数据库模块]        VectorStore[(向量数据库)]:::db    end    subgraph DocumentLoader[文档加载模块]        OriginalDocs[① 原始文档] --> Splitter[文档分割器]:::process        Splitter --> DocChunks[② 文档分块]        DocChunks --> CalcEmb[③ 计算向量嵌入]:::process        CalcEmb -->|存入| VectorStore    end    subgraph RAGApp[支持RAG的应用]        Question[问题] --> App[④ 应用]:::app        App -->|搜索相似文档| VectorStore        VectorStore -->|返回相似文档| App        App --> Prompt[⑤ 组装提示词]        Prompt --> LLM[大语言模型]        LLM --> Answer[答案]        Answer --> App        App --> Output[输出答案]    end    classDef process fill:#a5d6a7,stroke:#388e3c,stroke-width:2px    classDef app fill:#ffab91,stroke:#e64a19,stroke-width:2px    classDef db fill:#bbdefb,stroke:#1976d2,stroke-width:2px    classDef llm fill:#ffcc80,stroke:#f57c00,stroke-width:2px1 引言

自然语言,是怎么变成向量、并且用于检索的呢?
将句子拆分为最小语义单元(token),再通过词汇表为每个token分配唯一ID;这样自然语言就编码变成了向量。例如:["我", "爱", "北京"] → [3, 54, 65]。再进行编码、降维等处理,自然语言就变成了向量。
如何检索呢?本质上是计算问题与答案直接的相关性,也就是“距离”;而这个距离,是通过向量的“余弦相似度”测算的,计算两个向量夹角的余弦值来衡量它们相似度的一种方法,值越接近1表示越相似,越接近-1表示越不相似。这种算法的优点是:
不受向量长度影响:只关注方向一致性,适合不同长度的文本或特征向量。
计算复杂度低:尤其适合稀疏向量,只需考虑非零分量。
2 安装向量数据库

本文以Qdrant(功能全部署相对简单)为例。当然还有Milvus(阿里云向量数据库基础)、ChromaDB(Python原生支持)、FAISS(Meta开源产品)等选择,没有本质的差别。
比较完整的一个向量数据库列表:

  • Apache Cassandra
  • Chroma
  • Elasticsearch
  • GemFire
  • SAP Hana
  • Milvus
  • MongoDB
  • Neo4j
  • Pinecone
  • PostgreSQL with pgvector extension
  • Qdrant
  • Redis with RediSearch module
  • Weaviate
  • FAISS
可以看到,一些列存储数据库/KV数据库/文档数据库/图数据库也在列表。
Qdrant安装还是相对复杂的,所以一般是推荐开箱即用的Docker方式;不过考虑到性能、还有存储目录等因素,本文才用了原生安装方式:
https://github.com/qdrant/qdrant/releases
Windows一般选择qdrant-x86_64-pc-windows-msvc.zip版本;比如解压到E:\Softwares\Qdrant
  1. mkdir E:\Softwares\Qdrant
复制代码
然后创建几个子目录:
  1. mkdir E:\Softwares\Qdrant\storage
  2. mkdir E:\Softwares\Qdrant\config
  3. mkdir E:\Softwares\Qdrant\static
  4. notepad E:\Softwares\Qdrant\config\config.yaml
复制代码
然后编辑配置文件:
  1. service:
  2.   host: 0.0.0.0
  3.   http_port: 6333
  4.   grpc_port: 6334
  5. storage:
  6.   storage_path: "./storage"
复制代码
然后下载Web客户端:
https://github.com/qdrant/qdrant-web-ui/releases
将包内的文件,解压到static文件夹:
  1.     Directory: E:\Softwares\Qdrant\static
  2. Mode                 LastWriteTime         Length Name
  3. ----                 -------------         ------ ----
  4. d----           2026/2/19    17:35                assets
  5. -a---           2026/2/19    17:35          15086 favicon.ico
  6. -a---           2026/2/19    17:35           1790 index.html
  7. -a---           2026/2/19    17:35           6371 logo-red-black.svg
  8. -a---           2026/2/19    17:35           6359 logo-red-white.svg
  9. -a---           2026/2/19    17:35           9339 logo.png
  10. -a---           2026/2/19    17:35           6177 logo192.png
  11. -a---           2026/2/19    17:35          23528 logo512.png
  12. -a---           2026/2/19    17:35            484 manifest.json
  13. -a---           2026/2/19    17:35         436518 openapi.json
  14. -a---           2026/2/19    17:35         834374 qdrant-web-ui.spdx.json
  15. -a---           2026/2/19    17:35             67 robots.txt
复制代码
启动Qdrant:
  1. cd E:\Softwares\Qdrant\
  2. \.Qdrant.exe
复制代码
日志里显示:
  1. Version: 1.17.0, build: 4ab6d2ee
  2. Access web UI at http://localhost:6333/dashboard
复制代码
打开链接即可。
1.png

在Tutorial - Quick Start菜单,在第一页一路Run、即可创建一个Collection(类似MongoDB的Collection,可以认为是个表;这一步可以不做,只是为了理解向量数据库)

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

相关推荐

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