【大模型】介绍什么是 ES 库和 ES 检索
- ES 库:通常指 Elasticsearch 数据库,它不是传统数据库(如 MySQL),而是专门用于搜索、检索和分析海量文本数据。
ES 检索:利用 Elasticsearch 的倒排索引和 BM25 等算法进行关键词全文检索。
在 AI 知识库中:ES 负责精准关键词搜索,向量数据库负责语义搜索,两者结合形成当前主流的混合检索(Hybrid Search),兼顾准确性和语义理解能力。
为什么会有 ES?
假设有 1000 万篇文档。如果放在 MySQL 中:
SELECT * FROM article WHERE content LIKE '%人工智能%'问题:非常慢、数据越多越慢、不支持智能搜索、排序能力差,而 ES 就是专门解决这个问题的。
ES 的本质
可以把 ES 看成:
Elasticsearch ┌──────────────────┐ │ 文档库 │ ├──────────────────┤ │ 建立倒排索引(Index)│ ├──────────────────┤ │ 全文搜索 │ │ 模糊搜索 │ │ 排序 │ │ 聚合分析 │ └──────────────────┘它最核心的技术就是:倒排索引(Inverted Index)
什么是倒排索引?
例如有三篇文档:Doc1 今天学习人工智能;Doc2 今天学习Python;Doc3 人工智能发展很快
普通数据库保存的是:Doc1 -> 今天 学习 人工智能;Doc2 -> 今天 学习 Python;Doc3 -> 人工智能 发展 很快
ES 会建立一个反向索引:
今天 ├── Doc1 └── Doc2 学习 ├── Doc1 └── Doc2 人工智能 ├── Doc1 └── Doc3 Python └── Doc2 发展 └── Doc3这样搜索人工智能;ES 根本不用扫描所有文档,直接找到 人工智能 ➡️ Doc1 Doc3,速度非常快。
ES 检索是什么?
就是在 Elasticsearch 中搜索数据。
例如:用户输入:LangChain 怎么调用工具?
ES 会:
① 分词 LangChain 调用 工具↓
② 去倒排索引找 LangChain ↓ Doc12 Doc56 Doc98↓
③ 算相关度 BM25↓
④ 返回最相关文档这整个过程就是 ES 检索。
ES 能检索什么?
几乎任何文本:
PDF、Word、Markdown、网页、聊天记录、代码、日志(Log)、商品、新闻、论文、邮件
例如:
公司知识库 ↓ 100万份PDF ↓ 全部导入ES ↓ 员工输入: "年假怎么算" ↓ ES找到员工手册ES 与 AI 知识库是什么关系?
现在的大模型知识库通常有两种检索方式。
AI知识库 │ ├──────────────┐ │ │ ES检索 向量检索 (BM25) (Embedding) │ │ └──────┬───────┘ 混合检索第一种:ES(关键词检索)
例如:用户搜索 GPT-4 Turbo
ES 找:GPT 4 Turbo,匹配包含这些词的文档。优点是很快、很准(关键词完全一致)、成熟稳定;缺点是不会理解语义。
例如:汽车、机动车,ES 默认认为不是一个词。
第二种:向量检索(Vector Search)
把文字变成向量:
汽车 ↓ [0.21 0.53 0.88 ...]机动车:
↓ [0.22 0.54 0.86 ...]距离很近。因此:汽车≈机动车。
AI 能理解:同义词、近义词、语义,这就是 RAG 的核心。
为什么很多 AI 公司还要用 ES?
因为 ES 有很多向量数据库不擅长的能力。
例如:用户问:2024年的合同
ES 可以精准过滤:年份=2024
再比如:
文件类型=PDF 部门=法务 时间>2025 作者=张三这些条件筛选,ES 做得非常成熟。
大模型知识库里的 ES
目前很多公司的架构是:
用户问题 │ ▼ Query Rewrite │ ┌──────────┴──────────┐ ▼ ▼ ES(BM25) Vector DB 关键词检索 语义检索 ▼ ▼ └──────────┬──────────┘ ▼ Hybrid Search ▼ Rerank(重排序) ▼ Top K ▼ LLM这就是目前主流的RAG(检索增强生成)架构。
