快速入门:部署和评估您的 RAG 助手#
本快速入门指南将会向您展示如何使用 FlexRAG 部署或评估 RAG 助手。FlexRAG 提供了多种方式来开发和评估您的 RAG 助手,包括配置 FlexRAG 内置的 RAG 助手并运行 GUI 应用程序,或者将 FlexRAG 作为库导入您的程序来开发您自己的 RAG 助手。
在 FlexRAG 中,RAG 助手类似于传统的对话机器人,但可以借助外部知识库来生成相应的回复。因此,大量和 RAG 相关的操作均会被封装在 RAG 助手中,如判断何时需要检索,如何进行检索,以及如何处理检索得到的文档。
FlexRAG 提供了一些内置的 RAG 助手,包括 BasicAssistant、ModularAssistant、ChatQAAssistant 等。您可以直接通过 FlexRAG 的入口点来运行这些 RAG 助手。由于 ModularAssistant 较为灵活且提供了大量的可更改选项,因此在本指南中,我们会向您展示如何运行该助手。
ModularAssistant 的基本结构如下图所示:
ModularAssistant 由四个主要部件组成,分别是一个检索器,一个重排器,一个上下文精炼器和一个生成器。
检索器 用于从知识库中检索和用户输入相关的文档。
重排器 用于将检索器检索到的文档按照和用户输入的相关度进行更准确的重排。
上下文精炼器 用于将检索到的文档进行进一步地精炼以更好地适配生成器,这一组件是可选的。
生成器 用于根据检索(精炼)到的上下文生成最终的回复。
每个组件都可以独立地配置,这将允许您通过改变配置来轻松地定制您的 RAG 助手。
部署 GUI 应用#
运行 RAG 助手最简单的方式就是使用 FlexRAG 内置的入口点来运行 GUI 应用。您可以通过下面的命令来运行一个模块化 RAG 助手 ModularAssistant。为了方便,这里使用了 FlexRAG 提供的基于维基百科的检索器,以及来自 OpenAI 的生成器。您需要将这里的 $OPENAI_KEY 替换为您的 OpenAI 访问密钥,或在 shell 中设置相应的变量。
python -m flexrag.entrypoints.run_interactive \
assistant_type=modular \ # Specifies the assistant type
modular_config.retriever_type='FlexRAG/enwiki_2021_atlas' \ # Specifies the retriever
modular_config.response_type=original \
modular_config.generator_type=openai \
modular_config.openai_config.model_name='gpt-4o-mini' \
modular_config.openai_config.api_key=$OPENAI_KEY \
modular_config.do_sample=False
运行上述命令后,您就可以通过浏览器访问 http://localhost:7860 来浏览您的 GUI 应用。您将会看到一个如下图所示的界面,您可以键入您的问题,该 RAG 助手将根据维基百科中的信息来生成相应的回复。
备注
在这个例子中,我们使用了一个基于维基百科知识库的 FlexRetriever 检索器,您也可以使用 FlexRAG 提供的其它检索器或构建您自己的检索器。您可以访问 准备检索器 一节以获取更多相关信息。
评估您的 RAG 助手#
FlexRAG 提供了方便的命令行工具来协助您评估您的 RAG 助手,您可以轻松地在多种知识密集型任务上评估您的 RAG 助手。下面的命令将会 Natural Questions (NQ) 数据集上评估这个模块化 RAG 助手 ModularAssistant
python -m flexrag.entrypoints.eval_assistant \
name=nq \
split=test \
assistant_type=modular \
modular_config.retriever_type="FlexRAG/enwiki_2021_atlas" \
modular_config.response_type=short \
modular_config.generator_type=openai \
modular_config.openai_config.model_name='gpt-4o-mini' \
modular_config.openai_config.api_key=$OPENAI_KEY \
modular_config.do_sample=False \
eval_config.metrics_type=[retrieval_success_rate,generation_f1,generation_em] \
eval_config.retrieval_success_rate_config.eval_field=text \
log_interval=100
正如此前,您依然需要将 $OPENAI_KEY 替换为您的 OpenAI API 密钥。
在上面的命令中 name=nq 和 split=test 这两个参数指出我们将在 NQ 数据集的测试集上进行评估。eval_config.metrics_type=[retrieval_success_rate,generation_f1,generation_em]这一参数指出我们将使用 检索成功率 、 响应F1值 以及 响应的完全匹配 来作为评价指标。
备注
如需获取更多有关 RAG 评估方面的信息,请参考 RAGEvalDatasetConfig 文档。 如需获取更多有关评估指标方面的信息,请参考 Metrics 文档。
在其它代码中应用 RAG 助手#
您也可以直接在您的代码中运行 RAG 助手。下面的代码片段将会向您展示如何运行一个采用 FlexRetriever 检索器和 OpenAIGenerator 生成器的模块化 RAG 助手 ModularAssistant :
from flexrag.assistant import ModularAssistant, ModularAssistantConfig
from flexrag.models import OpenAIGeneratorConfig
def main():
cfg = ModularAssistantConfig(
response_type="original",
retriever_type="FlexRAG/enwiki_2021_atlas",
generator_type="openai",
openai_config=OpenAIGeneratorConfig(
model_name="gpt-4o-mini",
api_key="<your-api-key>",
),
do_sample=False,
)
assistant = ModularAssistant(cfg)
response, contexts, metadata = assistant.answer("Who is Bruce Wayne?")
return
if __name__ == "__main__":
main()
正如此前,您需要将 <your-api-key> 替换为您的 API 密钥。
在上面的命令中,我们使用 answer 方法向助手提出问题,并接收三个返回值:response、contexts 和 metadata。其中,response 是该助手的最终回复,而 contexts 是助手检索到的相关文档,metadata 包含来自生成过程的附加信息。
备注
如需获取更多有关 RAG 助手方面的信息,请参考 Assistant 小节。
构建您自己的 RAG 助手#
您也可以通过继承 AssistantBase 类来构建您自己的 RAG 助手,并通过使用装饰器 ASSISTANTS 装饰您的类来注册该 RAG 助手。随后您就可以直接通过 FlexRAG 内置的入口点来运行 GUI 应用或评估您的 RAG 助手。更多关于如何构建您的助手,可以访问教程 构建您自己的 RAG 助手 以获取更多信息。