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

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

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

关键词Gradio WebUI Chatbot 流式输出 RTX 3090


1. 准备工作

首先,我们需要安装 Gradio。

bash 复制代码
conda activate llm_learn
pip install gradio

2. 编写 WebUI 代码

在工作目录下新建 web_demo.py

我们将以 Qwen2.5-7B 为例(因为它聊起天来更有趣)。

python 复制代码
from unsloth import FastLanguageModel
import torch
import gradio as gr
from threading import Thread
from transformers import TextIteratorStreamer

# ===========================
# 1. 模型加载 (只运行一次)
# ===========================
model_path = "lora_model" # 指向我们微调 Qwen 的目录
max_seq_length = 2048

print(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. 定义聊天逻辑 (支持流式)
# ===========================
def chat_stream(message, history):
    # message: 用户当前的输入
    # history: 之前的对话记录 [[user, bot], [user, bot]...]
    
    # 构造 Prompt (Qwen 格式)
    # 这里我们简化处理,只取最近一轮对话,实际项目可以拼接 history
    prompt = 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 = ""
    for new_text in streamer:
        partial_text += new_text
        yield partial_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. 启动服务

bash 复制代码
python web_demo.py

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

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

体验亮点

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

4. 进阶玩法

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

python 复制代码
demo.launch(share=True)

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

尽情享受你的私人 GPT 吧!

相关推荐
小雨下雨的雨2 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
我没胡说八道5 小时前
高校论文AI检测优化工具对比研究与实测分析(2026)
人工智能·深度学习·机器学习·计算机视觉·aigc·论文
秦亚伟5 小时前
AI浪潮重塑融资租赁行业新格局
人工智能
love530love5 小时前
LiveTalking 数字人项目 Windows 部署完全指南(EPGF 架构)
人工智能·windows·python·架构·livetalking·epgf
元启数宇5 小时前
喷淋AI布点实战:8小时人工布点→20分钟自动出图
人工智能
哈哈,柳暗花明5 小时前
人工智能专业术语详解(H)
人工智能·专业术语
圣殿骑士-Khtangc5 小时前
AI 编程工具 2026 实战横评:Cursor 3 vs Claude Code vs Copilot,开发者选型完全指南
人工智能·copilot
云器科技5 小时前
云器Lakehouse 2026年5月版本发布:拥抱 AI Agent,重塑数据智能开发新范式
人工智能
小鹰-上海鹰谷-电子实验记录本5 小时前
第六届党建引领科创生态座谈会 | 邓光辉博士出席分享AI赋能创新药科研新范式
人工智能·ai·电子实验记录本·药企合规
极客老王说Agent5 小时前
2026电信IDC机房巡检深度报告:人工巡检频次和深度够吗?实在Agent重塑智慧运维新范式
人工智能·ai·chatgpt