【AI大模型应用开发】3.2 RAG实战 - RAG应用+UI实现加载本地文件并对话

简介: 【AI大模型应用开发】3.2 RAG实战 - RAG应用+UI实现加载本地文件并对话

大家好,我是【同学小张】。持续学习,持续干货输出,关注我,跟我一起学AI大模型技能。

前面我们实现了RAG基本流程,今天我们在此基础上给它加个UI界面,在浏览器打开,实现上传本地文件、解析,并用大模型实现与该文档的对话。也就是一个阉割版demo版的ChatPDF或知识库对话系统。

界面采用Python的gradio库,这个库在机器学习和大模型界很火,它运行后会启动一个Web服务器,并在默认浏览器中打开一个新页面,显示Gradio界面。

别问为啥用这个,就是看大模型的界面好多都是这个库搭的,所以也就用一下。不会gradio没关系,就几行代码,很容易理解。或者可以直接用ChatGPT帮你写一个框架。

首先来安装这个库:

pip install 时加上了清华源,因为我这里使用默认源的话会安装超时,失败。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gradio 

0. 利用大模型帮你创建UI

使用Python的gradio库来创建一个UI界面,该界面可以上传本地文件。

不会gradio也没关系,我也不会,我们可以让大模型帮你写。

当然大模型生成的代码可能会有错误,告诉大模型运行的错误,让大模型一个个修正即可。

完整的对话过程可看这个链接:https://chat.openai.com/share/3db8b8a0-a775-48cc-9833-892fd36e43b8

最终生成的代码如下:

import gradio as gr
def upload_file(input_file):
    file_contents = input_file  # 上传文件对象
    return f"你上传的文件内容是:\n{file_contents}"
gr.Interface(upload_file, 
              inputs="file",
              outputs="text",
              title="文件上传器", 
              description="请点击按钮上传文件。",
              allow_flagging=False).launch()

运行结果(通过浏览器打开下面链接可看到界面):

界面如下:点击可弹出对话框让用户选择本地文件,选择后点击Submit按钮会上传文件,上传成功后在右侧output框里会显示文件信息。

1. 上传文件后的处理

(1)引入前面我们实现的RAG文件和类

(2)实例化一个chat_bot

(3)上传文件时,调用RAG的创建向量数据库接口,创建向量数据库

from rag import RAG_Bot ## 引入前面我们实现的rag文件和类
chat_bot = RAG_Bot() ## 实例化一个chat_bot
# 定义一个处理函数,用于接收上传的文件并进行处理
def upload_file(input_file):
    chat_bot.createVectorDB(input_file) ## 创建向量库,灌入数据
    return f"你上传的文件内容是:\n{input_file}"

2. 添加聊天窗口

其实这里可以另开一个界面,实现聊天窗口,因为聊天和创建向量数据库是独立的。这里为了演示方便,我们在同一个界面上添加一个聊天框。

本人愚笨,用ChatGPT 3.5问了半天,也没有得到正确的代码。于是想了个办法白嫖用了一下 GPT4,好不容易才得到了正确的代码,感觉还不如直接去看gradio的教程来的快。

看下代码:

import gradio as gr
def process_inputs(input_file, chat_input):
    outputs = ["", ""]
    if input_file is not None:  # 处理文件上传
        outputs[0] = f"你上传的文件内容是:\n{str(input_file)}"
    if chat_input != "":  # 处理聊天输入
        outputs[1] = f"你说的是:{chat_input},很高兴与你交流!"
    return tuple(outputs)
# 输入类型为文件上传和文本框
inputs = [gr.File(), gr.Textbox(label="聊天输入")]
# 输出类型为文件内容和聊天输出
outputs = [gr.Textbox(label="文件内容"), gr.Textbox(label="聊天输出")]
iface = gr.Interface(process_inputs, 
                     inputs=inputs,
                     outputs=outputs,
                     title="文件上传和聊天窗口",
                     description="请在适当的输入框中上传文件或进行聊天。",
                     allow_flagging=False)
iface.launch()
  • 运行效果

按照前面在这个代码中添加 【上传文件后的处理】,然后将用户的输入当作query传入RAG中进行对话。最终代码如下:

import gradio as gr
from rag import RAG_Bot ## 引入前面我们实现的rag文件和类
chat_bot = RAG_Bot() ## 实例化一个chat_bot
def process_inputs(input_file, chat_input):
    outputs = ["", ""]
    if input_file is not None:  # 处理文件上传
        chat_bot.createVectorDB(input_file) ## 创建向量库,灌入数据
        outputs[0] = f"你上传的文件内容是:\n{str(input_file)}"
    if chat_input != "":  # 处理聊天输入
        outputs[1] = chat_bot.chat(chat_input) ## 将聊天输入当作query,进行对话
    return tuple(outputs)
# 输入类型为文件上传和文本框
inputs = [gr.File(), gr.Textbox(label="聊天输入")]
# 输出类型为文件内容和聊天输出
outputs = [gr.Textbox(label="文件内容"), gr.Textbox(label="聊天输出")]
iface = gr.Interface(process_inputs, 
                     inputs=inputs,
                     outputs=outputs,
                     title="文件上传和聊天窗口",
                     description="请在适当的输入框中上传文件或进行聊天。",
                     allow_flagging=False)
iface.launch()
  • 运行结果

感想

别看这几行代码,完成的并不容易,因为我不会gradio,用大模型来帮忙写程序固然可以,但大部分情况下写的程序是不对的。

有句话说的很对:AI编程的上限取决于使用者的判断力和能力。

还是要会一点gradio,才能在大模型一直无法得到正确结果时给予正确的引导。

后面有时间还是要学一下gradio库。(要学的东西实在太多了…)


  • 大家好,我是同学小张
  • 欢迎 点赞 + 关注 👏,促使我持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏
  • 踩坑不易,感谢关注和围观

本站文章一览:

相关文章
|
4月前
|
Web App开发 前端开发 JavaScript
Playwright极速UI自动化实战指南
Playwright告别Selenium痛点,以智能等待、强大选择器、网络拦截与多设备模拟四大利器,提升自动化效率与稳定性。本文通过实战代码详解其加速秘籍,助你构建高效、可靠的UI测试方案。
|
4月前
|
人工智能 JavaScript 算法
Playwright携手MCP:AI智能体实现自主化UI回归测试
MCP 协议使得 AI 能够通过 Playwright 操作浏览器,其中快照生成技术将页面状态转化为 LLM 可理解的文本,成为驱动自动化测试的关键。该方式适用于探索性测试和快速验证,但目前仍面临快照信息缺失、元素定位不稳定、成本高、复杂场景适应性差以及结果确定性不足等挑战。人机协同被认为是未来更可行的方向,AI 负责执行固定流程,人类则专注策略与验证。
|
4月前
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
296 4
|
3月前
|
人工智能 自然语言处理 JavaScript
Playwright MCP在UI回归测试中的实战:构建AI自主测试智能体
Playwright MCP结合AI智能体,革新UI回归测试:通过自然语言驱动浏览器操作,降低脚本编写门槛,提升测试效率与覆盖范围。借助快照解析、智能定位与Jira等工具集成,实现从需求描述到自动化执行的闭环,推动测试迈向智能化、民主化新阶段。
|
4月前
|
JavaScript 前端开发 开发者
鸿蒙应用开发从入门到实战(六):ArkTS声明式UI和组件化
鸿蒙开发语言ArkTS在继承了Typescrip语法的基础上,主要扩展了声明式UI开发相关的能力。
262 1
|
4月前
|
人工智能 JavaScript 测试技术
当Playwright遇见MCP,AI智能体实现自主化UI回归测试
本文探讨如何通过Model Context Protocol(MCP)让AI智能体驱动Playwright实现端到端自动化测试。重点解析快照技术的实现原理与实战流程,同时深入剖析其在信息丢失、元素定位、成本效率及逻辑复杂性等方面的现实挑战。
|
3月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
942 49
|
4月前
|
人工智能 安全 中间件
阿里云 AI 中间件重磅发布,打通 AI 应用落地“最后一公里”
9 月 26 日,2025 云栖大会 AI 中间件:AI 时代的中间件技术演进与创新实践论坛上,阿里云智能集团资深技术专家林清山发表主题演讲《未来已来:下一代 AI 中间件重磅发布,解锁 AI 应用架构新范式》,重磅发布阿里云 AI 中间件,提供面向分布式多 Agent 架构的基座,包括:AgentScope-Java(兼容 Spring AI Alibaba 生态),AI MQ(基于Apache RocketMQ 的 AI 能力升级),AI 网关 Higress,AI 注册与配置中心 Nacos,以及覆盖模型与算力的 AI 可观测体系。
1137 52
|
3月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
566 30
|
3月前
|
设计模式 人工智能 自然语言处理
3个月圈粉百万,这个AI应用在海外火了
不知道大家还记不记得,我之前推荐过一个叫 Agnes 的 AI 应用,也是当时在 WAIC 了解到的。
554 1