在学习 AI 应用开发、RAG、知识库、Agent 的过程中“向量Vector”几乎是绕不开的核心概念。很多人在刚接触 Eino 官方仓库 时会发现框架中大量组件都和向量有关EmbeddingRetrieverVectorStoreIndexerRAGRecallRerank但真正理解这些组件背后的原理的人并不多。这篇文章不会只停留在 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 系统的基础。因为无论是知识库存储文档召回语义搜索MemoryAgent 长期记忆本质上都依赖文本 - 向量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 这类数据库本质上是结构化数据数据库例如idnameage1Tom20它们最擅长精确查询范围查询排序聚合事务但它们不擅长高维向量搜索例如1536维向量如果有1000万条向量数据库要做找出最相似的前10个向量这个计算量会极其恐怖。因为传统数据库必须逐条计算距离这会导致全表扫描CPU爆炸延迟极高因此AI 时代出现了向量数据库Vector Database向量数据库本质上是专门为“高维向量检索”设计的数据库。它最大的特点是可以在海量向量中快速找到最相似的数据例如用户问题“Go服务如何部署”系统先把问题 embedding生成 query vector去向量数据库检索找最相似的 TopK 文档这整个过程就是现代 RAG 的核心。目前主流向量数据库包括数据库特点Milvus企业级、高性能QdrantRust实现、轻量WeaviateGraph能力强Chroma本地开发友好pgvectorPostgreSQL扩展Elasticsearch支持混合检索其中Milvus 是国内最常见的企业级方案。四、Eino 中所有和向量相关的核心组件Eino 的设计理念非常重要把整个 RAG 流程组件化。因为真实企业环境里Embedding 模型会变向量库会变检索策略会变Rerank 会变所以 Eino 不会把这些能力写死。而是全部抽象成组件。Eino 中和向量最相关的核心组件包括组件作用Document文档对象Splitter文本切分Embedder向量生成VectorStore向量存储Indexer建立索引Retriever向量召回RAG ChainRAG 工作流这些组件共同组成知识库系统先看Document它代表知识库中的一条文档。例如doc : schema.Document{ ID: 1, Content: Golang 是 Google 开发的语言, }但真实场景里文档不会直接 embedding。因文档可能非常长。例如PDFWordMarkdown一本书因此必须先Chunk切分Eino 中通常会通过 Splitter 完成。例如每500 token切一块原因在于如果 chunk 太大embedding 不精准检索效果下降token 消耗暴涨如果 chunk 太小上下文丢失语义不完整因此Chunking 是 RAG 中极其重要的一环。很多知识库效果差根本不是 LLM 的问题。而是切分策略有问题。接着切分后的文本会进入Embedder生成向量。然后写入VectorStore例如MilvusQdrantPGVector最后用户提问时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 只是最后一步。真正决定知识库效果的其实是ChunkEmbeddingRecallRerank很多企业做 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 换 OpenAIVectorStore 换 MilvusRerank 换 BGE Reranker整个系统都不需要大改。这就是 Eino 强调组件化的真正原因。七、总结Eino 的向量体系本质是什么学到最后你会发现Eino 中所有和向量相关的组件本质都在解决同一个问题如何让机器理解“语义”。整个流程其实可以总结成文本 ↓ Embedding ↓ 向量化 ↓ 向量存储 ↓ 语义检索 ↓ RAG增强 ↓ LLM生成而向量数据库的本质也不是存文本而是存储“语义坐标”现代 AI 系统和传统搜索系统最大的区别就在这里传统搜索搜索关键词现代 AI搜索语义