《Python Gradio》(四)常用效果

ChatInterface 是 Gradio 提供的一个专门用于构建聊天应用的类,它可以帮助你创建一个交互式的对话系统,支持用户输入和模型的实时响应。这个接口非常适合构建聊天机器人、问答系统或其他对话类应用。

1. 进度显示

import gradio as gr
import time

def response1(number):
    # 创建进度条
    progress = gr.Progress()
    result = 0.0
    for i in range(1, number + 1):
        # 设置进度条的进度
        # progress((i, number), desc="准备计算")
        progress(i / number, desc="准备计算")
        result += i
        time.sleep(0.1)

    return result

def response2(number):
    progress = gr.Progress()
    # 创建 tqdm 进度条,并让 progress 跟踪其进度
    pbar = progress.tqdm(iterable=range(number), desc='正在计算')
    result = 0.0
    for i in pbar:
        result += i
        time.sleep(0.1)

    return result


def test():
    app = gr.Interface(fn=response1, inputs='number', outputs='number')
    app.launch()


if __name__ == '__main__':
    test();

2. 迭代输出

import gradio as gr

def test():
    # 注意:只需将 fn 函数修改为 yield 生成器
    def response(number):
        data = '风起时,叶子轻轻摇,无声地诉说着秋的寂寥。云在天边低语,柔和轻飘,像是在远方寻找着归巢。'
        output = ''
        for index in range(number):
            time.sleep(1)
            output += data[index]
            yield output

    app = gr.Interface(fn=response, inputs='number', outputs='text')
    app.launch()


if __name__ == '__main__':
    test();

3. 输出标记

Flagging 的目的是将用户看到的输入、输出结果提交服务器端。这在有些场景下比较有用,例如:用户可以反馈模型的预测结果。

import gradio as gr


class MyFlaggingCallback(gr.FlaggingCallback):

    def setup(self, components, flagging_dir):
        """
        :param components: 输入和输出控件对象
        :param flagging_dir: 标记信息存储路径
        :return:
        """
        print('setup', components, flagging_dir)

    def flag(self, flag_data, flag_option, username):
        """
        :param flag_data: 输入和输出数据,例如:[12, 22]
        :param flag_option: 标记的值
        :param username: None
        :return:
        """
        print('flag', flag_data, flag_option, username)


def response(number):
    return number + 10


def test():
    # allow_flagging: never 禁用 auto 每次自动标记 manual 每次手动标记
    # flagging_dir: 默认 flagged,表示标记的记录存储路径
    demo = gr.Interface(response,
                        inputs='number',
                        outputs='number',
                        allow_flagging='manual',
                        flagging_dir='flagged',
                        flagging_options=['错误', '违法'],
                        flagging_callback=MyFlaggingCallback())
    demo.launch()


if __name__ == "__main__":
    test()

4. 会话保持

Gradio 会话保持(Session State)是指在用户会话过程中,保存用户请求的数据。这对于需要跟踪用户状态、或在用户交互中保留上下文的应用程序非常有用。

  • 全局会话保持:用户共享历史信息
  • 用户会话保持:用户独享历史信息

import gradio as gr


# 全局记录
def test01():
    states = []

    def response(content):
        states.append(content)
        return content, '\n'.join(states)

    app = gr.Interface(fn=response, inputs='text', outputs=['text', 'text'])
    app.launch()


# 用户记录
def test02():

    def response(content, history):
        history.append(content)
        return content, '\n'.join(history), history

    # 输入和输出必须有且只有 gr.State()
    # 临时记忆,刷新浏览器后信息丢失
    history = gr.State([])
    app = gr.Interface(fn=response,
                       inputs=['text', history],
                       outputs=['text', 'text', history])
    app.launch()

if __name__ == '__main__':
    test02()

5. 提示信息

import gradio as gr

def response(text):

    if text in ['i', 'I']:
        gr.Info('这是普通消息', duration=1)
        return 'no'

    if text in ['w', 'W']:
        gr.Warning('这是警告消息', duration=1)
        return 'no'

    if text in ['e', 'E']:
        raise gr.Error('这是错误消息', duration=3)

    return 'OK'


def test():
    demo = gr.Interface(response, inputs='text', outputs='text')
    demo.launch(show_error=True, debug=True)


if __name__ == "__main__":
    test()

未经允许不得转载:一亩三分地 » 《Python Gradio》(四)常用效果
评论 (0)

5 + 6 =