来源:互联网 更新时间:2026-08-03 13:44
在这篇文章中,我们将看到如何利用 Gradio 的热重载模式快速构建一个功能齐全的 AI 应用。但在进入正题之前,先了解一下什么是重载模式以及 Gradio 为什么要采用自定义的自动重载逻辑。如果已熟悉 Gradio 并急于开始构建,请直接跳转到第三部分构建文档分析应用。

简而言之,重载模式可以在不重启 Gradio 服务器的情况下,自动引入你源代码中的最新更改。如果这听起来还有些模糊,不妨继续阅读。
Gradio 是一个广受欢迎的 Python 库,专门用于创建交互式机器学习应用。开发者可以完全在 Python 中设计 UI 布局,并嵌入一些 Python 逻辑来响应 UI 事件。如果你已经掌握了 Python 基础,那么学习 Gradio 将会非常轻松。
通常,Gradio 应用像运行任何其他 Python 脚本一样启动,只需执行 python app.py (Gradio 代码文件可以任意命名) 。这会启动一个 HTTP 服务器,渲染应用的 UI 并响应用户操作。如果需要修改应用,通常会停止服务器 (通常使用 Ctrl + C) ,编辑源文件后重新运行脚本。
开发过程中频繁停止和重启服务器会造成明显的延迟。如果能有一种方式能自动更新代码变更并即刻测试新思路,那将大为便利。
这正是 Gradio 的重载模式的用武之地。你只需运行 gradio app.py 而不是 python app.py,即可在重载模式下启动应用!
Gradio 应用通常与 uvicorn (一个 Python Web 框架的异步服务器) 一同运行。尽管 Uvicorn 提供了自动重载功能,但 Gradio 出于以下原因自行实现了重载逻辑:
接下来,我们将展示如何利用 Gradio 的重载模式迅速开发一个 AI 应用。
本应用将允许用户上传文档图片并提出问题,随后以自然语言形式获得答案。我们将利用免费的 Hugging Face 推理 API,你可以在自己的电脑上轻松操作,无需 GPU!
首先,让我们在名为 app.py 的文件中输入以下代码,并通过执行 gradio app.py 在重载模式下启动它:
import gradio as gr
demo = gr.Interface(lambda x: x, "text", "text")
if __name__ == "__main__":
demo.launch()
这会创建以下简单的用户界面。
鉴于我们希望用户能够上传图像文件及其问题,将输入组件更改为 gr.MultimodalTextbox()。注意用户界面是如何立即更新的!
虽然这个用户界面已经可以工作,但如果输入文本框位于输出文本框下方会更合适。通过使用 Blocks API 可以实现这一点,并且还通过添加占位符文本来定制输入文本框,以引导用户。
现在 UI 已经令人满意,我们将开始实现 chatfn 的逻辑。
使用 Hugging Face 的推理 API,因此从 huggingfacehub 包中导入 InferenceClient (预装在 Gradio 中) 。使用 impira/layoutlm-document-qa 模型来回答用户的问题,然后使用 HuggingFaceH4/zephyr-7b-beta 大语言模型提供自然语言回答。
from huggingface_hub import InferenceClient
client = InferenceClient()
def chat_fn(multimodal_message):
question = multimodal_message["text"]
image = multimodal_message["files"][0]
answer = client.document_question_answering(image=image, question=question, model="impira/layoutlm-document-qa")
answer = [{"answer": a.answer, "confidence": a.score} for a in answer]
user_message = {"role": "user", "content": f"Question: {question}, answer: {answer}"}
message = ""
for token in client.chat_completion(messages=[user_message],
max_tokens=200,
stream=True,
model="HuggingFaceH4/zephyr-7b-beta"):
if token.choices[0].finish_reason is not None:
continue
message += token.choices[0].delta.content
yield message
这是我们的应用演示!
还会添加一个系统消息,以便大语言模型保持回答简短,不包括原始置信度分数。为避免每次更改时都重新实例化 InferenceClient,将其放在不需重载的代码块中。
if gr.NO_RELOAD:
client = InferenceClient()
system_message = {
"role": "system",
"content": """
You are a helpful assistant.
You will be given a question and a set of answers along with a confidence score between 0 and 1 for each answer.
You job is to turn this information into a short, coherent response.
For example:
Question: "Who is being invoiced?", answer: {"answer": "John Doe", "confidence": 0.98}
You should respond with something like:
With a high degree of confidence, I can say John Doe is being invoiced.
Question: "What is the invoice total?", answer: [{"answer": "154.08", "confidence": 0.75}, {"answer": "155", "confidence": 0.25}
You should respond with something like:
I believe the invoice total is $154.08 but it can also be $155.
"""}
这是演示的现在情况!系统消息确实帮助保持了机器人的回答简短而不包含长的小数。
作为最终改进,在页面上添加一个 Markdown 标题:
在本文中,使用 Gradio 和 Hugging Face 推理 API 开发了一个实用的 AI 应用。从开发初期,就不确定最终产品会是什么样子,所以能够即时重新加载 UI 和服务器逻辑让人能迅速尝试各种想法。整个应用的开发过程大约只用了一个小时!
Ondo将于今日上线股票永续合约
Intel喜讯连连:18A工艺良率提升到85%、CPU将涨价15%
晶核艾尔莎角色盘点 晶核艾尔莎强度分析与实战表现
区块链OTC交易所有哪几家比较正规?
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
AMD英特尔集体失眠!英伟达Rosa CPU搭载Rigel核:单核性能碾压x86
遗忘之海密室通关教程 遗忘之海密室全关卡解谜思路与难点解析
CC币价格预测(2026-2035):Canton币今日价格走势+长期价格预测
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
异环伊洛伊阵容怎么搭配
新破天一剑太极刀任务攻略 破天一剑怎么取太极刀
潜水员戴夫丛林DLC接吻的鱼任务攻略
五千元以下的笔记本几乎消失!经销商:至少一年看不到涨价尽头
Windows环境下Claude Code从C盘迁移至D盘的完整操作教程
华为Mate 70系列首发的红枫镜头下放至千元档:全员普及原色影像
币安投票上币与下币机制解析:买票争议与规则边界
合集38个项目筹集5.406亿美元 Figure融资2亿
蚂蚁庄园今日答案最新2026.7.5
微软Copilot AI漏洞可致敏感数据泄露,企业用户需及时更新
《探索流放之路物品等级的奥秘》 揭秘物品等级的效果和怎么查看
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc