gradio

简介

在人工智能飞速发展的今天,向世界展示你的ai模型变得越来越重要,这就是gradio发挥作用的地方:一个简单且直观的工具,让初学者也能够快速展示部署的模型。
gradio是一个开源的python库,用于快速创建一个简单交互界面。通常运用于聊天机器人,机器学习模型等领域。

使用

1. 核心组件
  • Interface Interface类是gradio的核心类,他允许用户定义输入和输出类型,,创建交互式的Web界面。
  • 输入 gradio支持多种类型的输入,如文本,图片,甚至是音频。
  • 输出 gradio支持的输出类型和输入对应,也包括文本,图片,音频。
2. 实例-创建简单聊天机器人

python要求版本不小于3。8,通过pip install gradio命令安装。

gradio里专门提供了创建聊天机器人的类ChatInterface,通过提供response函数和一些样式设计参数,快速搭建一个聊天机器人。之后通过调用gradio的launch函数,就能够在本地默认是7860端口进行访问。

下面实现一个只会输出hello world!的傻瓜式机器人:

1
2
3
4
5
6
7
8
9
import gradio as gr # 导入gradio包

def response(message, history): # 实现输出的函数,必须接受两个参数,一个输入消息,一个历史聊天记录
return "hello world!"

chat = gr.ChatInterface( #创建聊天实例
fn = response, # 第一个参数为输出函数,后面可以跟一些样式的设计,文章后面会有介绍
)
chat.launch() # 在本地搭建,默认是7860号端口

当然,有了输出函数的定义,我们的思路就很简单了:根据输入和历史对话生成输出

这只是最简单的一个文本聊天界面,可以通过参数来实现更复杂的界面和输入,也可以把模型放到输出函数以实现更优秀的输出。

3. 一些ChatInterface构建时常用的参数
  • fn(必需的)
    输出函数,如果是ChatInterface类,则必须接受两个参数:字符串输入消息和表示历史聊天记录的[user_message,bot_message]形式的双元素列表列表,并返回字符串响应。
  • multiimodal
    默认值: False
    如果为True,聊天界面将使用gr.MultimodalTextbox组件进行输入,允许上传多媒体文件。
  • textbox
    默认值: None
    如果项自定义文本框属性,则为聊天界面使用gr.Textbox或gr.MultimodalTextbox组件的实例。
  • examples
    默认值: None
    如果提供,则会将提供的内容放在聊天机器人聊天框的下方,可以单击以填充聊天机器人。
  • title
    默认值: None
    界面的标题,以大字体显示在聊天机器人山房,也用作选项卡标题。
  • theme
    默认值: None
    要使用的主题,需要从gradio.themes加载。

openai api

openai api的获取和使用可以参考这篇博客官方文档

gpt聊天网页

有了gradio和openai api后就可以部署一个简单的gpt聊天界面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import time
import gradio as gr
# from dotenv import load_dotenv
import openai
from openai import OpenAI
import os

client = OpenAI(
max_retries = 1, #最多尝试次数
timeout = 60, #最长等待时间
api_key="Your Openai API Key"
)

def response(message, history):
chat = client.chat.completions.create(
model = "gpt-3.5-turbo", #模型使用gpt-3.5
messages = [
{"role": "system", "content": "You are a chatbot. You can help people with their questions about anything."},
{"role": "user", "content": message},
]
)
response = chat.choices[0].message.content
for i in range(len(response)): #流式回答
time.sleep(0.05)
yield response[: i+1]


chat = gr.ChatInterface(
response,
textbox = gr.Textbox(placeholder = "Ask me any question about my blog or others", container = False, scale = 10),
title = "Blog Chat",
description = "Ask me any question about my blog or others",
undo_btn = None,
examples=["Hello", "Am I cool?", "Are tomatoes vegetables?"],
cache_examples=True,
)
chat.launch()

更多语法和更复杂的用法还在学习中ing。