在实际应用中,RAG 系统往往需要在百万乃至千万级别的语料库中进行高效检索。为此,UltraRAG 支持将原始语料进行嵌入编码(embedding)并构建高效索引(index),以支撑大规模语义检索的需求。 本节将介绍如何基于 UltraRAG 编写对应的 pipeline,并完成语料的嵌入与索引过程。

步骤 1:编写 Pipeline YAML 文件

examples/ 目录下新建一个 YAML 文件(如 corpus_index.yaml),内容如下:
/images/yaml.svgexamples/corpus_index.yaml
# MCP Server
servers:
  retriever: servers/retriever

# MCP Client Pipeline
pipeline:
- retriever.retriever_init
- retriever.retriever_embed
- retriever.retriever_index

步骤 2:构建 Pipeline 并配置参数

运行以下命令构建 pipeline:
ultrarag build examples/corpus_index.yaml
随后会生成一个参数配置文件,可根据具体需求修改对应字段。例如:
/images/yaml.svgexamples/parameter/corpus_index_parameter.yaml
retriever:
  corpus_path: data/sample_hotpotqa_corpus_5.jsonl       # 输入语料路径(JSONL 格式)
  retriever_path: openbmb/MiniCPM-Embedding-Light        # 检索模型名称或路径
  embedding_path: embedding/embedding.npy                # 保存嵌入向量的路径
  index_path: index/index.index                          # 保存索引文件的路径
  faiss_use_gpu: true                                    # 是否启用 GPU 加速
  index_chunk_size: 50000                                # 构建索引时的分块大小
  cuda_devices: 0,1                                      # 使用的 GPU 设备编号
  overwrite: false                                       # 是否覆盖已存在的文件
  infinity_kwargs:                                       # 嵌入引擎相关配置
    batch_size: 1024
    bettertransformer: false
    device: cuda
    pooling_method: auto

步骤 3:运行 Pipeline 进行编码与索引

执行以下命令以运行语料库处理流程:
ultrarag run examples/corpus_index.yaml
📌 提示:由于编码与索引过程可能涉及大规模语料,运行时间较长,建议使用 screen 或 nohup 将任务挂到后台运行,例如:
nohup ultrarag run examples/corpus_index.yaml > log.txt 2>&1 &