news 2026/6/15 10:23:18

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
给自己做一个 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 吧!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 22:17:14

职场笔杆子必看!2025公文写作软件TOP3对比

作为一名体制内笔杆子&#xff0c;写作公文的痛谁懂&#xff0c;临时的派稿任务&#xff0c;格式要求超严格&#xff0c;内容要求严谨合规&#xff0c;加班改稿也都是经常的事。 随着AI的不断发展&#xff0c;人工智能的写作能力越来越强&#xff0c;为写作带来显著的提效&…

作者头像 李华
网站建设 2026/6/10 10:38:41

Jenkins 2.528.3 与 GitLab 深度集成:实现自动构建

在 Jenkins 2.528.3 版本中&#xff0c;实现 GitLab 代码推送&#xff08;Push&#xff09;后自动触发构建&#xff0c;主要依赖于 GitLab Plugin 或 Generic Webhook Trigger Plugin。以下是两种主流方法的详细配置指南&#xff0c;帮助构建高效的自动化流水线。核心配置概览自…

作者头像 李华
网站建设 2026/6/14 4:09:22

算法基础-多源最短路

多源最短路 多源最短路&#xff1a;即图中每对顶点间的最短路径。floyd 算法本质是动态规划&#xff0c;⽤来求任意两个结点之间的最短路&#xff0c;也称插点法。通过不断在两点之间加 ⼊新的点&#xff0c;来更新最短路。 适⽤于任何图&#xff0c;不管有向⽆向&#xff0c;…

作者头像 李华
网站建设 2026/5/28 17:17:00

新生态・新动能:人工智能产业格局分析

‍当前&#xff0c;人工智能产业已成为驱动数字经济高质量发展的核心引擎&#xff0c;不断推动产业生态建设和效能提升,各地政府积极响应推进科研创新与算力基础设施建设&#xff0c;因地制宜出台特色政策。持续探索新型大模型&#xff0c;推动AI产业向更高水平迈进。 一、人工…

作者头像 李华
网站建设 2026/5/2 10:11:42

Spring Cloud Gateway 核心特性与实践指南

摘要 本文深入探讨Spring Cloud Gateway在微服务架构中的核心作用&#xff0c;包括路由、过滤、限流等关键功能的实现原理与实践应用。通过详细的代码示例和架构分析&#xff0c;帮助开发者掌握Spring Cloud Gateway的最佳实践方法。 1. 引言 1.1 Spring Cloud Gateway 简介 Sp…

作者头像 李华
网站建设 2026/5/11 6:33:36

血液H组二糖—解析血型奥秘与疾病标志的核心糖结构 146076-26-8

血液H组二糖是ABO血型系统中最关键的抗原决定前体结构&#xff0c;被视为血型特异性表达的分子基石。它不仅构成了人类红细胞表面最基本的抗原表位&#xff0c;更在细胞识别、微生物感染、肿瘤发展及免疫调节等一系列生物学过程中扮演着核心角色。作为寡糖研究中的重要标准品和…

作者头像 李华