为了满足多轮推理等需要动态检索的场景,UltraRAG 支持将 Retriever 部署为在线服务,供其他流程通过异步 HTTP 调用。

功能简介

我们基于 Flask 实现了 Retriever 的在线服务部署,支持异步请求与远程访问,可与本地或分布式环境下的 pipeline 协同工作。

部署在线retriever服务

部署流程与普通 pipeline 类似,只需执行一个专用于服务部署的 YAML 配置:
/images/yaml.svgexamples/deploy_retriever.yaml
# MCP Server
servers:
  retriever: servers/retriever

# MCP Client Pipeline
pipeline:
- retriever.retriever_init
- retriever.retriever_deploy_service
运行如下命令生成对应配置文件:
ultrarag build examples/deploy_retriever.yaml
然后编辑生成的参数配置:
/images/yaml.svgexamples/parameter/deploy_retriever_parameter.yaml
retriever:
  corpus_path: data/sample_hotpotqa_corpus_5.jsonl
  cuda_devices: 0,1
  faiss_use_gpu: true
  index_path: index/index.index
  infinity_kwargs:
    batch_size: 1024
    bettertransformer: false
    device: cuda
    pooling_method: auto
  retriever_path: openbmb/MiniCPM-Embedding-Light
  retriever_url: http://localhost:8080
📌 配置说明:
  • retriever_url:服务监听地址,格式为 http://<host>:<port>
    • 本地部署推荐:127.0.0.1:5112
    • 远程部署推荐:0.0.0.0:<port>(以支持跨主机访问)
推荐使用后台方式运行服务:
# 使用 screen 启动并挂起服务
screen -S retriever
ultrarag run examples/deploy_retriever.yaml
# 按 Ctrl + A + D 挂起
# 后续恢复:screen -r retriever
或使用 nohup 写入日志运行:
nohup ultrarag run examples/deploy_retriever.yaml > retriever.log 2>&1 &
服务启动后将监听指定端口,等待接收来自其他流程的检索请求。

调用在线 retriever 服务

调用在线服务仅需在 pipeline 中使用 retriever.retriever_deploy_search 工具(不再需要初始化 retriever):
/images/yaml.svgexamples/retriever_deploy_search.yaml
servers:
  retriever: servers/retriever
  benchmark: servers/benchmark

# MCP Client Pipeline
pipeline:
- benchmark.get_data
- retriever.retriever_deploy_search
这样即可将本地查询直接发送至远程检索服务,并获取对应的文档结果。