You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无LangChain:30K+分块、含大文档与表格的RAG QA规模化优化求助

解决方案:大规模RAG系统的检索精度、表格处理与成本优化

一、提升大规模分块的初始检索精度

1. 混合检索:文本索引+向量检索结合

用PostgreSQL的文本检索能力先缩小范围,再执行向量KNN,避免全量30K分块检索:

  • 在分块表中新增text_content字段,存储分块的标题、关键词或核心文本
  • 为该字段创建GIN全文索引:CREATE INDEX idx_chunk_text ON chunks USING GIN(to_tsvector('english', text_content));
  • 查询时先通过全文匹配过滤出候选分块,再做向量排序:
    SELECT id, content, embedding <-> :query_embedding AS distance
    FROM chunks
    WHERE to_tsvector('english', text_content) @@ to_tsquery('english', :query_text)
    ORDER BY distance
    LIMIT 50;
    

2. 语义化分块与主题聚类

  • 替换固定长度分块,用语义分块工具(如sentence-transformers的语义分割功能)按段落语义边界拆分内容,减少无关分块
  • 对所有文档做主题聚类:
    1. 用轻量嵌入模型生成每份文档的全局嵌入
    2. 用KMeans聚类将文档划分为N个主题簇,存储簇ID到分块表
    3. 查询时先匹配主题簇,再在簇内执行向量检索,大幅缩小检索范围

3. 轻量交叉编码器重排序

舍弃LLM全量重排序,改用轻量交叉编码器(如cross-encoder/ms-marco-MiniLM-L-6-v2)对初始检索的Top50分块重排序:

from sentence_transformers import CrossEncoder

model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
pairs = [[query, chunk.content] for chunk in initial_results]
scores = model.predict(pairs)
# 按分数排序结果
sorted_results = sorted(zip(initial_results, scores), key=lambda x: x[1], reverse=True)

二、高效处理表格密集型内容

1. 表格结构化存储+多模态检索

利用Docling提取表格的结构化数据,单独存储并构建多维度检索能力:

  • 创建独立的tables表,字段包括table_id, document_id, structured_data(JSONB格式存储表格行列数据), table_embedding
  • 生成两种表格嵌入:
    • 语义嵌入:将表格标题、列名、核心数值拼接为文本,用轻量模型生成嵌入
    • 结构化嵌入:用专门的表格嵌入模型(如table-transformers)生成适配结构化数据的嵌入
  • 查询时根据查询类型分支处理:
    • 数值/条件查询:直接通过JSONB的数值字段过滤(如WHERE structured_data->>'销售额' > '1000000')
    • 语义查询:结合表格嵌入与文本分块嵌入共同检索

2. 表格细粒度索引

将表格拆分为行级细粒度单元,兼顾结构化查询与语义检索:

  • 把表格的每一行(附带列名)转换为文本片段(如"区域:华东,销售额:1200000,同比增长:15%")
  • 为每个行单元生成嵌入,同时将数值字段单独存储为PostgreSQL的数值类型列
  • 检索时可同时支持语义匹配和精准数值过滤

3. 轻量模型生成表格元数据

不用LLaMA生成表格摘要,改用小模型(如DistilBERT)生成表格核心元数据:

  • 提取表格的主题、列含义、数值范围等元数据,生成短文本
  • 用轻量模型为元数据生成嵌入,用于快速定位相关表格,再查询结构化数据

三、成本控制与效率优化

1. 轻量嵌入模型选型

替换大模型,选用开源轻量嵌入模型:

  • 英文场景:sentence-transformers/all-MiniLM-L6-v2或BAAI/bge-small-en-v1.5
  • 多语言场景:BAAI/bge-small-multilingual-v1.5
    这些模型推理速度快、资源占用低,且检索效果接近大模型

2. 缓存机制落地

  • 用Redis缓存查询嵌入、检索结果、重排序结果,相同查询直接复用结果
  • 缓存分块的嵌入与元数据,避免重复生成

3. 批量处理与GPU加速

  • 生成嵌入时采用批量处理,利用sentence-transformers的encode方法的batch_size参数提升效率
  • 有GPU资源时启用CUDA加速,大幅降低嵌入生成的时间成本

4. 无效分块过滤

利用Docling的文档结构解析能力,自动过滤页眉、页脚、空白页、重复内容,从源头减少分块数量与噪声

内容的提问来源于stack exchange,提问作者Anton Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:04:49