当前位置:首页 » 《随便一记》 » 正文

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

10 人参与  2024年04月16日 14:19  分类 : 《随便一记》  评论

点击全文阅读


大家好,我是【同学小张】。持续学习,持续干货输出,关注我,跟我一起学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 grdef 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 grdef 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 grfrom rag import RAG_Bot ## 引入前面我们实现的rag文件和类chat_bot = RAG_Bot() ## 实例化一个chat_botdef 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 一起交流?,一起进步?。

点击全文阅读


本文链接:http://zhangshiyu.com/post/96054.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1