电影《美丽从心》剧情简介
2026-06-30 3373939
2026-06-30 0
很多同学以为RAG的存储就是个向量数据库,存向量就行了。这个理解过于简化了。一个生产级RAG系统,存储层需要同时搞定四类数据:

① 向量数据存储层
② 原始文本存储层
③ 结构化元数据存储层
④ 管理信息存储层
以Milvus为例,创建RAG知识库Collection的核心代码:
复制代码from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataTypeconnections.connect(host="localhost", port="19530")fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=65535),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=1536),
FieldSchema(name="source", dtype=DataType.VARCHAR, max_length=512),
]schema = CollectionSchema(fields=fields, description="RAG Knowledge Base")
collection = Collection(name="rag_knowledge", schema=schema)# 创建HNSW索引
index_params = {
"index_type": "HNSW",
"metric_type": "COSINE",
"params": {"M": 16, "efConstruction": 256}
}
collection.create_index(field_name="embedding", index_params=index_params)
分块(Chunking)是RAG实现中最关键的环节之一。如果传整篇文档或过大的块,既昂贵又可能超出模型Token限制;块太小又可能缺少足够上下文。
原理:按固定字符数或Token数切分,块与块之间允许重叠。
特点:
建议:使用BERT Token而非字符数作为计数单位,因为Token基于有意义的语言单元,能保留更多语义信息。
适用场景:非结构化文档,如调查反馈、论坛帖子、邮件、个人笔记等。
原理:使用Embedding将概念相似的内容分组,创建语义连贯的块。
特点:
适用场景:各部分主题有重叠的文档,如金融或医疗领域的专业文档。
原理:使用正则表达式等文本解析技术,根据文档结构模式切分。
特点:
工具:Python(re、BeautifulSoup、lxml、marko)等。
适用场景:专利申请、研究论文、保险单、剧本等。
原理:结合OCR与深度学习模型提取文档结构(页眉、页脚、标题、表格等)。
特点:
工具:Azure Document Intelligence、LayoutParser等。
适用场景:新闻文章、网页、简历等半结构化文档。
原理:使用LLM查找文档中的实体和关系,构建知识图谱。
特点:
工具:Microsoft GraphRAG、Neo4J。
适用场景:体育分析、历史数据等需要跨文档进行复杂查询的领域。
原理:使用LLM生成图像的文字描述或表格摘要作为分块内容。
特点:
注意:若分块逻辑将图像描述拆成多个块,每个块都应包含图像URL,确保检索时能访问原始图像。
核心思想:用小块进行高效精准检索,检索到后追溯其所属的大块,用大块内容生成回答。这样既保证了检索精度,又确保LLM有足够的上下文。
学术界的混合自适应分块检索算法(Hybrid Adaptive Chunking and Retrieval)是这一方向的前沿探索:
实验结果表明,该算法在忠实度保持1.0的前提下,答案相关性提升7.6% -4。
为每个块生成示例问题——即这个块最能回答什么样的问题。检索时,系统将用户问题与示例问题比对,大幅提升匹配准确度。
分块之前,建议先做文档加载和预处理:
建议:先合并加载和分块逻辑,当业务需要时再分离。
如果文档频繁更新,需要考虑增量更新策略:
| 策略 | 工程成本 | 处理成本 | 适用场景 |
|---|---|---|---|
| 固定大小分块 | 低 | 低 | 非结构化文本 |
| 语义分块 | 高 | 高 | 主题交错的文档 |
| 自定义代码 | 中 | 低 | 结构可推断的文档 |
| 布局分析 | 中 | 中 | 新闻、网页、简历 |
| 图分块 | 高 | 高 | 跨文档复杂查询 |
| LLM增强 | 中 | 高 | 含图像、表格的文档 |
选型建议:从固定大小分块开始,结合Small2Big策略;当数据量增大、场景复杂后,再逐步引入语义分块或多策略组合。记住——分块策略是RAG系统的半永久性设计决策,更换成本较高,上线前务必做充分测试。
第一步,存之前先做两件事:
第二步,存的不是原文,是向量。
所以简单说:文档被切成块,每个块变成一个向量,向量和原文一起存进向量库。
常见的几种切割策略(按从简单到复杂说):
实际中我们会根据文档类型和业务场景选。比如做客服问答,可能按一问一答切;做长文档摘要,可能切大块一点,比如 1000 token 加重叠。