深入理解 Eino 的向量体系:从 Embedding 到向量数据库
在学习 AI 应用开发、RAG、知识库、Agent 的过程中,“向量(Vector)”几乎是绕不开的核心概念。
很多人在刚接触 Eino 官方仓库 时,会发现框架中大量组件都和向量有关:
Embedding
Retriever
VectorStore
Indexer
RAG
Recall
Rerank
但真正理解这些组件背后的原理的人并不多。
这篇文章不会只停留在 API 调用层,而是会系统讲清:
什么是向量
什么是 Embedding
向量数据库为什么存在
Eino 中所有与向量相关的组件
RAG 的完整工作流
企业级知识库的真实架构
这篇文章读完之后,你会真正理解:
为什么现代 AI 系统,本质上都是“向量系统”。
一、什么是向量?为什么 AI 一定需要向量
很多人第一次听到“向量”时,会觉得这是数学或者机器学习里的复杂概念。
实际上,在 AI 领域:
向量本质上就是一组数字。
例如:
[0.12, -0.88, 0.34, 0.71, ...]这串数字可能有:
384维
768维
1024维
1536维
所谓“1536维向量”,意思就是:
这个数组里有1536个数字那问题来了:
文本为什么能变成数字?
例如:
“Golang 是 Google 开发的语言”为什么可以变成:
[0.23, -0.44, 0.77, ...]原因在于:
计算机本身不理解语言,它只能理解数字。
所以 AI 系统必须先把“文本语义”转换成“数学空间中的坐标”。
这个过程就叫:
Embedding(向量嵌入)
Embedding 模型会把:
文本 -> 高维向量而且:
语义相近的文本,向量距离也会接近。
例如:
“Go语言如何部署”和:
“Golang 服务上线”虽然关键词完全不同,但语义非常接近。
因此它们生成的向量,在数学空间中的距离也会非常接近。
这其实就是现代 AI 检索的核心思想:
用“向量距离”表示“语义距离”。
这也是为什么:
现代 AI 不再依赖传统数据库的 LIKE 搜索。
因为:传统数据库只能搜索“字符串”,而向量搜索可以搜索“语义”。
二、Embedding 到底是什么,它在 Eino 中承担什么角色
Embedding 本质上是:
一个“语义编码器”。
它会把文本压缩成一串数字。
例如:
“今天下雨了”可能变成:
[0.14, -0.81, 0.33, ...]而:
“外面正在下雨”生成的向量可能是:
[0.13, -0.79, 0.31, ...]两个向量非常接近。
说明:
模型认为它们的“语义”相似。
这就是 Embedding 最重要的价值。
在 Eino 中,Embedding 是整个 RAG 系统的基础。
因为:
无论是:
知识库存储
文档召回
语义搜索
Memory
Agent 长期记忆
本质上都依赖:
文本 -> 向量Eino 中通常会通过:
embedding.Embedder来抽象 Embedding 能力。
例如:
vec, err := embedder.EmbedStrings( ctx, []string{"Golang 是静态语言"}, )返回:
[][]float32也就是:
多个文本对应的多个向量。
很多人会问:
为什么不直接把文本存数据库?因为AI 检索并不是“关键词搜索”。而是:语义搜索
例如:
知识库中:
“Gin 使用 Run 启动 HTTP 服务”用户问:
“Gin 怎么开启监听”传统数据库:搜不到。
因为没有“开启监听”这个词。但 Embedding 会发现:这两个句子的语义高度相似。
于是:向量距离非常接近。系统就能召回正确文档。
所以:
Embedding 决定了整个 RAG 系统的“理解能力”。
很多时候:大家以为决定 AI 效果的是 LLM。
实际上:对于知识库系统来说:真正决定效果上限的,是召回质量。而召回质量,核心取决于:
Embedding 模型三、向量数据库到底是什么,为什么它和 MySQL 完全不同
理解向量数据库之前,要先理解:
传统数据库到底擅长什么。
MySQL、PostgreSQL 这类数据库,本质上是:
结构化数据数据库
例如:
| id | name | age |
|---|---|---|
| 1 | Tom | 20 |
它们最擅长:
精确查询
范围查询
排序
聚合
事务
但它们不擅长:
高维向量搜索
例如:
1536维向量如果有:
1000万条向量数据库要做:
找出最相似的前10个向量这个计算量会极其恐怖。
因为:
传统数据库必须:
逐条计算距离这会导致:
全表扫描
CPU爆炸
延迟极高
因此:
AI 时代出现了:
向量数据库(Vector Database)
向量数据库本质上是:
专门为“高维向量检索”设计的数据库。
它最大的特点是:
可以在海量向量中快速找到最相似的数据例如:
用户问题:
“Go服务如何部署”系统:
先把问题 embedding
生成 query vector
去向量数据库检索
找最相似的 TopK 文档
这整个过程:
就是现代 RAG 的核心。
目前主流向量数据库包括:
| 数据库 | 特点 |
|---|---|
| Milvus | 企业级、高性能 |
| Qdrant | Rust实现、轻量 |
| Weaviate | Graph能力强 |
| Chroma | 本地开发友好 |
| pgvector | PostgreSQL扩展 |
| Elasticsearch | 支持混合检索 |
其中:
Milvus 是国内最常见的企业级方案。
四、Eino 中所有和向量相关的核心组件
Eino 的设计理念非常重要:
把整个 RAG 流程组件化。
因为真实企业环境里:
Embedding 模型会变
向量库会变
检索策略会变
Rerank 会变
所以 Eino 不会把这些能力写死。
而是全部抽象成组件。
Eino 中和向量最相关的核心组件包括:
| 组件 | 作用 |
|---|---|
| Document | 文档对象 |
| Splitter | 文本切分 |
| Embedder | 向量生成 |
| VectorStore | 向量存储 |
| Indexer | 建立索引 |
| Retriever | 向量召回 |
| RAG Chain | RAG 工作流 |
这些组件共同组成:
知识库系统
先看:
Document
它代表知识库中的一条文档。
例如:
doc := &schema.Document{ ID: "1", Content: "Golang 是 Google 开发的语言", }但真实场景里:
文档不会直接 embedding。
因文档可能非常长。
例如:
PDF
Word
Markdown
一本书
因此:必须先:
Chunk(切分)
Eino 中通常会通过 Splitter 完成。
例如:
每500 token切一块原因在于:
如果 chunk 太大:
embedding 不精准
检索效果下降
token 消耗暴涨
如果 chunk 太小:
上下文丢失
语义不完整
因此:
Chunking 是 RAG 中极其重要的一环。很多知识库效果差:根本不是 LLM 的问题。而是切分策略有问题。接着切分后的文本会进入:Embedder生成向量。然后:写入:VectorStore
例如:
Milvus
Qdrant
PGVector
最后:
用户提问时:
Retriever 会:
query ↓ embedding ↓ vector search ↓ topK documents召回最相关的知识。
然后:
RAG Chain 会把这些知识拼接进 Prompt。
再交给 LLM 生成最终答案。
这就是 Eino 中完整的向量工作流。
五、RAG 为什么必须依赖向量检索
很多人学习 RAG 时,容易误以为:
RAG = 把文档塞给 LLM。
实际上并不是。
真正困难的问题是:
如何从几十万文档里找到最相关的内容
因为:
LLM 本身没有长期记忆。
它也不可能一次读取整个知识库。
因此:必须先检索。而检索的核心问题在于:用户的问题:通常不会和知识库原文一致。
例如:
知识库:
“Gin 使用 Run 方法启动 Web 服务”用户:
“Gin 如何开启 HTTP 监听”关键词完全不同。
传统搜索:
基本失效。
而向量检索:
会通过语义相似度召回。
因此:
RAG 的本质其实是:
Embedding + 向量检索 + LLM其中:
LLM 只是最后一步。
真正决定知识库效果的:
其实是:
Chunk
Embedding
Recall
Rerank
很多企业做 RAG 效果差,并不是模型不够强。
而是:
召回系统做得太差。
因此:
现代 AI 系统越来越强调:
Retrieval Engineering(检索工程)
而不是只关注 Prompt。
六、RAG 架构
用户问题 ↓ Query Rewrite ↓ Embedding ↓ Hybrid Search (BM25 + Vector) ↓ Rerank ↓ TopK Context ↓ LLM ↓ Answer这里面最重要的是:
Hybrid Search(混合检索)
因为:
并不是所有问题都适合向量搜索。
例如:
HTTP 500 MySQL 8.0 Redis Cluster这些词:
关键词搜索反而更重要。
因此:
现代 RAG 通常会:
BM25 + Vector Search一起使用。
之后:
再通过:
Rerank(二次排序)
重新打分。
例如:
向量检索先召回:
Top100然后:
CrossEncoder 模型重新排序。
最后:
只保留:
Top5给 LLM。这会大幅提高答案质量。而 Eino 的优势就在于:这些组件:都可以自由替换。
例如:
Embedding 换 OpenAI
VectorStore 换 Milvus
Rerank 换 BGE Reranker
整个系统都不需要大改。
这就是 Eino 强调:组件化的真正原因。
七、总结:Eino 的向量体系本质是什么
学到最后你会发现:
Eino 中所有和向量相关的组件,本质都在解决同一个问题:
如何让机器理解“语义”。
整个流程其实可以总结成:
文本 ↓ Embedding ↓ 向量化 ↓ 向量存储 ↓ 语义检索 ↓ RAG增强 ↓ LLM生成而向量数据库的本质也不是:
存文本而是:
存储“语义坐标”现代 AI 系统和传统搜索系统最大的区别就在这里:
传统搜索:
搜索关键词现代 AI:
搜索语义