[智能体-299]:文档、文档对象Document、 向量库数据库、Chroma数据库访问对象、文本向量化embedding、检索器retriever他们各自的含义和他们的协作关系,层次关系
一、各组件定义组件定义说明文档Document原始非结构化文本内容如一段话、一篇文章、PDF 中的一页等是信息的原始载体尚未被程序处理文档对象Document Object将原始文档封装为结构化对象通常包含page_content文本和metadata元数据在 LangChain 中是langchain_core.documents.Document类的实例文本向量化Embedding使用嵌入模型将文本转换为固定长度的浮点数向量如 768 维语义相近的文本向量在空间中距离更近是连接“语言”与“向量计算”的桥梁向量数据库Vector Database专门用于高效存储和检索高维向量的数据库支持近似最近邻ANN搜索如Chroma、FAISS、Pinecone、WeaviateChroma 数据库访问对象Chroma 提供的客户端对象如Chroma实例用于管理集合collection、插入/查询向量是向量数据库的具体实现接口在 LangChain 中表现为VectorStore检索器Retriever封装了“接收查询 → 向量化 → 检索 → 返回相关文档”全流程的高层接口通常由VectorStore.as_retriever()生成供 RAG 系统调用二、层次关系自底向上编辑Level 0: 原始文档Raw Text ↓ Level 1: 文档对象Document Object ← 结构化表示 ↓ Level 2: 文本向量化Embedding ← 语义数值化 ↓ Level 3: 向量数据库Vector DB ← 存储向量 文档 ↓ Level 4: Chroma 数据库访问对象VectorStore← 数据库操作接口 ↓ Level 5: 检索器Retriever ← 应用层统一检索入口✅特点每一层依赖下一层上层对下层透明。例如 Retriever 不关心底层用的是 Chroma 还是 FAISS。三、协作流程数据流两个阶段索引阶段离线文档 → 向量化 → 存入 Chroma。检索阶段在线查询 → 向量化 → 在 Chroma 中找相似项 → 返回原文档。四、完整代码示例使用本地模型无需 OpenAI✅ 使用sentence-transformers/all-MiniLM-L6-v2免费、轻量、768 维✅ 全部本地运行无网络依赖除首次下载模型✅ 展示所有组件创建与协作安装依赖pip install langchain langchain-chroma chromadb sentence-transformersPython 代码Python# -*- coding: utf-8 -*- from langchain_core.documents import Document from langchain_chroma import Chroma from langchain_community.embeddings import HuggingFaceEmbeddings # ---------------------------- # 1. 原始文档 → Document 对象 # ---------------------------- raw_texts [ 机器学习让计算机从数据中自动学习模式而无需显式编程。, 深度学习是机器学习的一个分支使用深层神经网络处理复杂数据。, 自然语言处理使计算机能够理解、分析、生成人类语言。 ] documents [ Document(page_contenttext, metadata{id: i, topic: AI}) for i, text in enumerate(raw_texts) ] print(✅ 文档对象已创建) for doc in documents: print(f ID {doc.metadata[id]}: {doc.page_content[:40]}...) # ---------------------------- # 2. 初始化本地 Embedding 模型 # ---------------------------- embedding_model HuggingFaceEmbeddings( model_namesentence-transformers/all-MiniLM-L6-v2 ) # 测试向量化 vec embedding_model.embed_query(什么是深度学习) print(f\n✅ Embedding 维度: {len(vec)}) # 应为 384 或 768此模型为 384 # ---------------------------- # 3. 创建 Chroma 向量数据库内存模式 # ---------------------------- vectorstore Chroma.from_documents( documentsdocuments, embeddingembedding_model, collection_nameai_knowledge ) print(\n✅ 向量已存入 Chroma) # ---------------------------- # 4. 获取 Chroma 访问对象即 VectorStore # ---------------------------- # 此处 vectorstore 就是 Chroma 数据库访问对象 print(f✅ Chroma 访问对象类型: {type(vectorstore)}) # ---------------------------- # 5. 创建 Retriever # ---------------------------- retriever vectorstore.as_retriever(search_kwargs{k: 2}) print(\n✅ Retriever 已创建) # ---------------------------- # 6. 执行检索 # ---------------------------- query 深度学习和机器学习的关系是什么 results retriever.invoke(query) print(f\n 查询: {query}) print( 检索结果:) for i, doc in enumerate(results, 1): print(f {i}. {doc.page_content}) print(f [元数据: {doc.metadata}])预期输出部分✅ 文档对象已创建 ID 0: 机器学习让计算机从数据中自动学习模式... ID 1: 深度学习是机器学习的一个分支使用深... ID 2: 自然语言处理使计算机能够理解、分析... ✅ Embedding 维度: 384 ✅ 向量已存入 Chroma ✅ Chroma 访问对象类型: class langchain_chroma.vectorstores.Chroma ✅ Retriever 已创建 查询: 深度学习和机器学习的关系是什么 检索结果: 1. 深度学习是机器学习的一个分支使用深层神经网络处理复杂数据。 [元数据: {id: 1, topic: AI}] 2. 机器学习让计算机从数据中自动学习模式而无需显式编程。 [元数据: {id: 0, topic: AI}]五、关键总结组件是否必需可替换性示例替代方案Document 对象是否标准接口LangChain 标准格式Embedding 模型是是OpenAI / BGE / Cohere向量数据库是是FAISS / Pinecone / MilvusChroma 访问对象否若换 DB是FAISS 的FAISS类Retriever是在 RAG 中否抽象层所有 VectorStore 都支持.as_retriever()设计优势通过分层抽象你可以换 Embedding 模型 → 只改一行换向量数据库 → 只改初始化方式上层 Retriever 接口完全不变