如何用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来输出结果,所以这里需要调用相关的包来读取这些输出。
阅读全文