AI初认识(RAG核心)

0 阅读6分钟

二、RAG核心

1.向量 (Vector) 与 Embeddings

1.1 向量 (Vector) 与 Embeddings 的定义

向量,可以理解为从原点 (0, 0, ...) 指向空间中某个点的有向线段,在机器学习中,向量是数据的数学表示形式,让计算机能够理解和计算数据之间的关系。

Embeddings 是将离散的、非数值型的数据(如文字、图片、音频)转换为连续的、稠密的向量的技术。 Embeddings 就是给每个事物(词、句子、图片)分配一个独特的坐标,让语义相似的事物在空间中彼此靠近。

概念比喻
原始文本"苹果"、"香蕉"、"汽车"
Embeddings给每个词分配一个地址(坐标)
向量空间一个巨大的地图
语义相似度地图上的距离(近的意思相近)

1.2 向量 vs Embeddings 的关系

维度向量 (Vector)Embeddings (嵌入)
定义数学概念:一组有序数字应用概念:将数据转换成的向量
本质母概念(大类)子概念(特指语义向量)
关系所有 Embeddings 都是向量但并非所有向量都是 Embeddings

一句话总结:Embeddings 是一种特殊用途的向量,专门用于表示语义信息。

1.3 具体例子

例子1:词向量 (Word Embeddings)
"国王"  →  [0.32, -0.45, 0.89, 0.12, -0.67, ...]  ← 这就是向量
"皇后"  →  [0.31, -0.44, 0.88, 0.53, -0.66, ...]  ← 语义相近,向量距离近
"苹果"  →  [0.12, 0.78, -0.23, 0.91, 0.34, ...]   ← 语义不同,向量距离远
例子2:在 RAG 中的应用
文本块1:"苹果是一种水果"  →  向量 A
文本块2:"香蕉是热带水果"  →  向量 B(与A距离近)
文本块3:"汽车需要加油"    →  向量 C(与A距离远)

用户问题:"苹果好吃吗?"   →  向量 Q
检索系统:找与 Q 距离最近的向量 → 返回向量 A 对应的文本

2 相似度计算方法

方法关注点取值范围适用场景是否受长度影响
余弦相似度方向[-1, 1]文本语义匹配(最常用)❌ 否
欧氏距离直线距离[0, +∞)图像、聚类分析✅ 是
点积方向+长度(-∞, +∞)归一化后的向量⚠️ 取决于是否归一化
曼哈顿距离网格距离[0, +∞)高维稀疏数据✅ 是

3. 把文本切分成 chunks

新手首选:直接使用 LangChain 的 RecursiveCharacterTextSplitter

原始文本:"今天天气真好。我们去公园散步吧。“

方法切分效果语义完整性说明
按句子切分Chunk1: 今天天气真好。 Chunk2: 我们去公园散步吧。 ✅最理想的结果
按字符数Chunk1: 今天天气真 Chunk2: 好。我们去 Chunk3: 公园散步吧 Chunk4: "极低 ❌句子被切碎
固定字符+重叠Chunk1: 今天天气真好。 Chunk2: 真好。我们去公 Chunk3: 我们去公园散步吧"中 ⚠️保留了一些上下文,仍有割裂
递归方法默认情况:Chunk1: 今天天气真好。 Chunk2: 我们去公园散步吧。 ✅智能识别句子边界
方法切分依据语义完整性实现难度适用场景
按句子切分标点符号规范文本、对话
按字符数切分固定长度最低实时处理、日志
固定字符+重叠长度+重叠长文档、防信息丢失
递归切分分层递归最高较高通用场景(推荐)

4. 向量检索

检索的方式有哪些?列举两种:

4.1 匹配方式

维度关键词搜索语义搜索
匹配逻辑字面匹配意图匹配
如何工作在文档中查找包含相同词语的内容理解问题含义,找含义相近的内容
是否要求词一致✅ 必须包含相同的关键词❌ 不需要,同义词、相关概念也可

例子1:搜索"笔记本电脑"

文档内容关键词搜索语义搜索说明
"笔记本电脑价格"✅ 匹配✅ 匹配包含"笔记本"
"便携电脑推荐"❌ 不匹配✅ 匹配"便携电脑" ≈ "笔记本电脑"
"台式机性能"❌ 不匹配❌ 不匹配不相关
"laptop评测"❌ 不匹配✅ 匹配英文同义词

例子2:搜索"心情不好怎么办"

文档内容关键词搜索语义搜索说明
"心情不好缓解方法"✅ 匹配✅ 匹配包含关键词
"如何调节情绪"❌ 不匹配✅ 匹配"调节情绪" ≈ "心情不好怎么办"
"抑郁症治疗"❌ 不匹配⚠️ 可能匹配语义相关但程度不同
"今天天气"❌ 不匹配❌ 不匹配不相关

4.2 常见向量数据库

数据库类型核心特点适用场景
Chroma开源、轻量级专为LLM应用开发设计,开发者友好,可嵌入Python脚本运行,安装简单,与LangChain等框架集成度高本地快速原型开发、轻量级应用、教育学习。
Milvus开源、高性能功能强大的专业向量数据库,支持十亿级向量规模的索引与搜索。提供多种索引算法(如IVF、HNSW)和部署模式(Lite/Standalone/Distributed)对性能和规模要求高的生产环境,如大型RAG、推荐系统、多模态搜索。
Qdrant开源、云原生使用Rust语言编写,性能高且安全。提供丰富的API和高级过滤功能,支持复杂的标量过滤与向量检索的混合查询需要复杂过滤条件的RAG应用、实时AI应用。
Weaviate开源、全功能自带模块化集成能力,内置向量化模块,可方便地对接OpenAI、Cohere等嵌入模型,支持GraphQL查询希望快速构建、需要良好开箱体验和灵活数据模型的项目。
Pinecone云托管、SaaS完全托管的云服务,无需运维,自动处理索引构建、扩缩容和高可用,提供SLA保障希望快速上线、缺乏专业运维团队、需要弹性扩展的企业级应用。
Pgvector开源、PostgreSQL扩展在广泛使用的关系型数据库PostgreSQL中添加了向量类型和相似度搜索功能,允许在传统数据库中统一管理结构化数据和向量数据模型以结构化为主、仅有少量向量检索需求、希望简化技术栈的场景。
OpenSearch开源、搜索与分析套件提供混合搜索能力,通过k-NN插件同时支持传统的全文搜索和向量检索,非常适合需要结合关键词匹配和语义理解的场景需要同时实现全文搜索和向量检索的应用,如电商搜索、内容平台。