当前位置: 首页 > news >正文

给自己做一个 ChatGPT:基于 Gradio 的本地 LLM 网页对话界面

给自己做一个 ChatGPT:基于 Gradio 的本地 LLM 网页对话界面

摘要:黑底白字的命令行虽然极客,但不够直观。今天我们将使用 Python 领域最流行的机器学习界面库Gradio,为我们在 RTX 3090 上微调的 Qwen/Llama 模型穿上一件漂亮的“外衣”。我们将实现流式输出 (Streaming),让 AI 的回答像打字机一样一个个字蹦出来,体验拉满!

关键词GradioWebUIChatbot流式输出RTX 3090


1. 准备工作

首先,我们需要安装 Gradio。

conda activate llm_learn pipinstallgradio

2. 编写 WebUI 代码

在工作目录下新建web_demo.py
我们将以Qwen2.5-7B为例(因为它聊起天来更有趣)。

fromunslothimportFastLanguageModelimporttorchimportgradioasgrfromthreadingimportThreadfromtransformersimportTextIteratorStreamer# ===========================# 1. 模型加载 (只运行一次)# ===========================model_path="lora_model"# 指向我们微调 Qwen 的目录max_seq_length=2048print(f"🚀 正在加载模型:{model_path}...")model,tokenizer=FastLanguageModel.from_pretrained(model_name=model_path,max_seq_length=max_seq_length,dtype=None,load_in_4bit=True,)FastLanguageModel.for_inference(model)# ===========================# 2. 定义聊天逻辑 (支持流式)# ===========================defchat_stream(message,history):# message: 用户当前的输入# history: 之前的对话记录 [[user, bot], [user, bot]...]# 构造 Prompt (Qwen 格式)# 这里我们简化处理,只取最近一轮对话,实际项目可以拼接 historyprompt=f"""<|im_start|>user{message}<|im_end|> <|im_start|>assistant """inputs=tokenizer([prompt],return_tensors="pt").to("cuda")# 定义流式输出器streamer=TextIteratorStreamer(tokenizer,skip_prompt=True,skip_special_tokens=True)generation_kwargs=dict(inputs,streamer=streamer,max_new_tokens=512,temperature=0.3,)# 在独立线程中运行生成,主线程读取流thread=Thread(target=model.generate,kwargs=generation_kwargs)thread.start()# 逐步返回生成的文字partial_text=""fornew_textinstreamer:partial_text+=new_textyieldpartial_text# ===========================# 3. 搭建界面# ===========================demo=gr.ChatInterface(fn=chat_stream,title="🤖 我的专属 Qwen 助手 (RTX 3090版)",description="这是我在本地微调并部署的大模型,支持流式对话!",examples=["RTX 3090 适合做深度学习吗?","请用 Python 写一个快排","你是谁?"],theme=gr.themes.Soft())if__name__=="__main__":# share=True 可以生成一个公网链接发给朋友体验demo.launch(server_name="0.0.0.0",share=False)

3. 启动服务

python web_demo.py

终端会输出:
Running on local URL: http://0.0.0.0:7860

打开浏览器访问http://localhost:7860

体验亮点

  • 打字机效果:当你问问题时,AI 的回答是实时蹦出来的,不用等十几秒才看到结果。
  • 历史记录gr.ChatInterface自动帮你处理了对话气泡的 UI。
  • 专属知识:试试问它“RTX 3090 适合做深度学习吗?”,它会用你微调过的知识回答你!

4. 进阶玩法

如果你想让朋友也能通过互联网访问这个界面,只需将最后一行代码改为:

demo.launch(share=True)

Gradio 会自动生成一个为期 72 小时的免费公网链接(类似https://xxxx.gradio.live)。

尽情享受你的私人 GPT 吧!

http://www.jsqmd.com/news/130874/

相关文章:

  • 【鸿蒙开发者跨平台开发可选工具】Windows 11 安装 Android Studio 完整指南
  • Axelspace:与Pale Blue, Inc.签署在轨演示服务合同的公告
  • 面试官:大模型对齐中的 RLHF 与 DPO有什么本质区别?为何 DPO 能替代 RLHF?
  • XGBoost-机器学习【笔记向,持续加工中】
  • 鸿蒙学习实战之路-相对布局 RelativeContainer 全攻略
  • 易路iBuilder: 独立业务智能体平台,企业无需更换系统,快速构建AI就绪型组织
  • 成为博客的第一天
  • Java虚拟机面试题:内存管理(下)
  • 区间选点问题 贪心算法的理解
  • 应用层自定义协议
  • 昇腾310P平台强化学习训练环境搭建实战:基于Qwen2.5-7B的完整部署流程
  • 光伏设计新选择:鹧鸪云
  • “网速快,打开网页慢”问题之解决
  • 鸿蒙学习实战之路-样式结构重用全攻略
  • 活着-洪真英
  • 程序员接单:2025 全渠道平台指南与实操建议
  • AI驱动下的连锁餐饮巡店模式:从人工核验到智能闭环
  • 初探 Python 製作一個 簡單聊天機器人
  • 12.23笔记
  • 鸿蒙学习实战之路-层叠布局 Stack 全攻略
  • web端使用roslib.js-ros2djs-ros3djs实现ros机器人在网页端可视化
  • 鸿蒙学习实战之路-Tabs标签页组件全攻略
  • 8个AI论文工具,助继续教育学生轻松完成写作!
  • 2025年鱼竿十大品牌排名全解析:鱼竿排名第一名到第十名品牌深度介绍 - 品牌2026
  • 企业高效定位高潜客户的技术路径与实践方法论
  • 鸿蒙学习实战之路-HarmonyOS 资源分类与访问指南
  • Harmony学习之分布式能力入门
  • CAXA CAD让设计变更评审会不再扯皮
  • 2025 年山东威海鱼竿生产厂家实力盘点:威海鱼竿生产厂家实力剖析 - 品牌2026
  • TRAE 国际版内置模型已支持 GPT-5.1!