如何用Gradio构建RAG召回测试前端?
摘要:构建AI应用的前端方案有很多,这里介绍一个开源前端库---Gradio,通过它可以使用简短的代码就可以快速的实现简单的AI应用前端。这里我们选择的场景为做RAG召回测试,通过调用先前封装好的LangChain代码,来快速的搭建这个前端页面。
使用Gradio构建AI前端 - RAG召回测试
一、摘要
构建AI应用的前端方案有很多,这里介绍一个开源前端库---Gradio,通过它可以使用简短的代码就可以快速的实现简单的AI应用前端。这里我们选择的场景为做RAG召回测试,通过调用先前封装好的LangChain代码,来快速的搭建这个前端页面。
二、AI项目前端方案的对比
可以做AI的前端方案很多,这里主要介绍比较热门的三个方案:
Gradio 是一款开源的 Python 库,核心定位是快速构建机器学习 / 深度学习模型的交互式 Web 演示界面,无需前端开发经验,一行代码即可将模型(或任意 Python 函数)转化为可通过浏览器访问的交互页面,方便开发者、研究者快速展示、测试和分享模型。
Streamlit 是一款开源的 Python 库,主打快速构建数据科学 / 机器学习领域的交互式 Web 应用,无需前端开发经验,以 “脚本即应用” 为核心理念 —— 普通的 Python 脚本只需添加少量 Streamlit 语法,就能一键转化为可交互的 Web 应用,是数据分析师、算法工程师快速落地可视化 / 分析工具的首选。
Vue(读音 /vjuː/,类似 view)是一款渐进式 JavaScript 框架,核心聚焦于前端视图层(UI)开发,由尤雨溪开发并开源,是目前最主流的前端框架之一(与 React、Angular 并称)。
相对三种方案,Gradio是直接被设计成AI的前端的,Streamlit适合做数据科学的前端。而Vue是一个更专业的前端框架。
这里我们介绍的就是Gradio。所以我们使用Gradio构建了一个RAG(检索增强生成)召回测试系统界面,主要功能是通过调用LC_RAG_02_RecallTest.py中的recall函数实现相似度检索,用户可以输入查询文本并设置返回结果数量,系统会展示检索到的最相似文档。
三、环境介绍
这里基于我另外一篇笔记:
https://www.cnblogs.com/aspnetx/p/19173914
在这个笔记中,介绍了如何使用python构建RAG系统,使用的是LangChain1.0的库。
整个项目可以在以下仓库中找到:
https://github.com/microsoftbi/Langchain_DEMO/tree/main/RAG
我会用到在其中的一个文件中封装好的做RAG召回测试的代码,来构建前端应用,借此展示Gradio环境中如何快速的搭建前端页面。
本文创建的代码文件名为:LC_RAG_07b_Gradio.py
调用先前召回测试的代码文件为:LC_RAG_02_RecallTest.py
四、主要功能模块
1. 召回测试函数 run_recall_test
功能:调用LC_RAG_02_RecallTest.py文件中封装好的recall函数执行检索并捕获输出结果。
def run_recall_test(query, top_k):
"""运行召回测试并返回结果"""
try:
# 调用recall函数,但需要捕获其输出
import io
from contextlib import redirect_stdout
# 创建一个字符串IO对象来捕获输出
f = io.StringIO()
with redirect_stdout(f):
recall(
query=query,
top_k=top_k,
vectorstore_dir="./RAG/chroma_db",
embedding_model="text-embedding-v4"
)
# 获取捕获的输出
output = f.getvalue()
return output
except Exception as e:
return f"错误: {str(e)}"
实现要点:
使用io.StringIO()创建字符串缓冲区
通过redirect_stdout上下文管理器捕获recall函数的打印输出
调用recall函数时指定参数:查询文本、返回数量、向量存储目录和嵌入模型
因为在先前封装好的代码中并没有返回值,而是直接通过print来输出结果,所以这里需要调用相关的包来读取这些输出。
