Gradio是HuggingFace的开源项目,GitHub 28k+ star。能够方便地构建AI应用的网页界面。
最大的优点是简便。对于不熟悉前端的程序员,能够迅速地构建基于web的AI应用。
Hello World
import gradio as gr
def print_text(text):
return "Hello World, " + text
interface = gr.Interface(fn=print_text, inputs="text", outputs="text")
interface.launch()
gradio的核心是它的gr.Interface
,用来构建可视化界面,其中的参数:
fn
:放你用来处理的函数inputs
:写你的输入类型,输入的是文本,所以是"text"outputs
:写你的输出类型,输出的也是文本,所以也是"text"
最后我们用interface.lauch()
把页面一发布,一个本地静态交互页面就完成了!
Gradio 提供了许多基础组件,用于构建交互式的机器学习模型演示。这些组件分为两大类:输入组件和输出组件。以下是一些常用的基础组件:
输入组件 (Inputs)
- Text: 文本输入框,用于输入文本数据。
- Textarea: 多行文本输入框,适用于较长的文本。
- Number: 数字输入框,用于输入数字。
- Slider: 滑动条,用于选择一个范围内的数字。
- Checkbox: 复选框,用于选择布尔值。
- Radio: 单选按钮,用于从多个选项中选择一个。
- Dropdown: 下拉菜单,用于从多个选项中选择一个。
- Image: 图像上传组件,用于上传和显示图像。
- File: 文件上传组件,用于上传文件。
- Audio: 音频上传组件,用于上传和播放音频文件。
- Video: 视频上传组件,用于上传和播放视频文件。
输出组件 (Outputs)
- Text: 文本输出框,用于显示文本数据。
- Label: 标签输出,用于显示分类标签和置信度。
- Image: 图像输出框,用于显示图像。
- Audio: 音频输出框,用于播放音频文件。
- Video: 视频输出框,用于播放视频文件。
- Dataframe: 数据帧输出框,用于显示表格数据。
- JSON: JSON输出框,用于显示JSON格式的数据。
- HTML: HTML输出框,用于显示HTML内容。
- Plot: 绘图输出框,用于显示图表和绘图。
访问千问大模型
from openai import OpenAI
client = OpenAI(
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
api_key="sk-27c202869xxxxxxxacba4a9300767e0d",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
def gpt_chatbot(user_input):
completion = client.chat.completions.create(
model="qwen-long",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '这是一个谈话的内容,请做一个简短内容总结。'}],
)
SummaryContent=completion.choices[0].message.content
return SummaryContent
import gradio as gr
# Create Gradio interface
def chatbot_interface(user_input):
return gpt_chatbot(user_input)
iface = gr.Interface(
fn=chatbot_interface, # The function that handles user input
inputs="text", # User types text
outputs="text", # GPT responds with text
title="Qwen Chatbot",
description="Ask me anything! I'm your AI assistant."
)
iface.launch(share=False, inline=True, server_name='127.0.0.1', server_port=8000)
语音转换
import gradio as gr
from transformers import pipeline
model_id = "sanchit-gandhi/whisper-small-dv" # update with your model id
pipe = pipeline("automatic-speech-recognition", model=model_id)
def transcribe_speech(filepath):
output = pipe(
filepath,
max_new_tokens=256,
generate_kwargs={
"task": "transcribe",
"language": "sinhalese",
}, # update with the language you've fine-tuned on
chunk_length_s=30,
batch_size=8,
)
return output["text"]
demo = gr.Blocks()
mic_transcribe = gr.Interface(
fn=transcribe_speech,
inputs=gr.Audio(sources="microphone", type="filepath"),
outputs=gr.components.Textbox(),
)
file_transcribe = gr.Interface(
fn=transcribe_speech,
inputs=gr.Audio(sources="upload", type="filepath"),
outputs=gr.components.Textbox(),
)
with demo:
gr.TabbedInterface(
[mic_transcribe, file_transcribe],
["Transcribe Microphone", "Transcribe Audio File"],
)
demo.launch(share=True)