Gradio 的月活用户达到 100 万!

阅读更多
Gradio logo
  1. 构建演示
  2. ChatInterface

Gradio 新手?从这里开始: 入门指南

查看发布历史

ChatInterface

gradio.ChatInterface(fn, type="messages", ···)

描述

ChatInterface 是 Gradio 用于创建聊天机器人 UI 的高级抽象,它允许您用几行代码围绕聊天机器人模型创建一个基于 Web 的演示。只需要一个参数:fn,它接受一个函数,该函数根据用户输入和聊天记录来控制聊天机器人的响应。可以使用其他参数来控制演示的外观和行为。

示例用法

基本示例:一个回声用户消息的聊天机器人

import gradio as gr

def echo(message, history):
    return message

demo = gr.ChatInterface(fn=echo, type="messages", examples=["hello", "hola", "merhaba"], title="Echo Bot")
demo.launch()

自定义聊天机器人:一个带有自定义 gr.Chatbotgr.ChatInterface,包括占位符和点赞/踩按钮。当 .like() 事件附加到 gr.Chatbot 时,会自动添加点赞/踩按钮。为了将事件监听器附加到您的自定义聊天机器人,请将 gr.Chatbot 以及 gr.ChatInterface 都包裹在像这样的 gr.Blocks

import gradio as gr

def yes(message, history):
    return "yes"

def vote(data: gr.LikeData):
    if data.liked:
        print("You upvoted this response: " + data.value["value"])
    else:
        print("You downvoted this response: " + data.value["value"])

with gr.Blocks() as demo:
    chatbot = gr.Chatbot(placeholder="<strong>Your Personal Yes-Man</strong><br>Ask Me Anything")
    chatbot.like(vote, None, None)
    gr.ChatInterface(fn=yes, type="messages", chatbot=chatbot)
    
demo.launch()

初始化

参数
🔗
fn: Callable

包装聊天界面的函数。通常(假设 `type` 设置为 "messages"),该函数应接受两个参数:一个 `str`,表示输入消息;以及一个 `list` 的 openai 风格字典:{"role": "user" | "assistant", "content": `str` | {"path": `str`} | `gr.Component`},表示聊天记录。该函数应返回/yield 一个 `str`(用于简单消息)、一个支持的 Gradio 组件(例如 gr.Image 以返回图像)、一个 `dict`(用于完整的 openai 风格消息响应),或一个此类消息的 `list`。

🔗
multimodal: bool
默认值 = False

如果为 True,聊天界面将使用 `gr.MultimodalTextbox` 组件作为输入,该组件允许上传多媒体文件。如果为 False,聊天界面将使用 gr.Textbox 组件作为输入。如果此项为 True,则 `fn` 的第一个参数应接受的不是 `str` 消息,而是一个带有键 "text" 和 "files" 的 `dict` 消息

🔗
type: Literal['messages', 'tuples'] | None
默认值 = None

传递到 `fn` 的聊天历史参数中的消息格式。如果为 "messages",则将历史记录作为字典列表传递,其中包含 openai 风格的 "role" 和 "content" 键。"content" 键的值应为以下之一 - (1) 有效 Markdown 格式的字符串 (2) 具有 "path" 键和值(对应于要显示的文件)的字典,或 (3) Gradio 组件的实例:目前支持 gr.Image、gr.Plot、gr.Video、gr.Gallery、gr.Audio 和 gr.HTML。"role" 键应为 'user' 或 'assistant' 之一。任何其他角色都不会在输出中显示。如果此参数为 'tuples'(已弃用),则将聊天历史记录作为 `list[list[str | None | tuple]]` 传递,即列表的列表。内部列表应包含 2 个元素:用户消息和响应消息。

🔗
chatbot: Chatbot | None
默认值 = None

要用于聊天界面的 gr.Chatbot 组件的实例,如果您想自定义聊天机器人的属性。如果未提供,则将创建一个默认的 gr.Chatbot 组件。

🔗
textbox: Textbox | MultimodalTextbox | None
默认值 = None

要用于聊天界面的 gr.Textbox 或 gr.MultimodalTextbox 组件的实例,如果您想自定义文本框的属性。如果未提供,则将创建一个默认的 gr.Textbox 或 gr.MultimodalTextbox 组件。

🔗
additional_inputs: str | Component | list[str | Component] | None
默认值 = None

要用作聊天机器人的附加输入的 gradio 组件(或其字符串快捷方式)的实例或实例列表。如果组件尚未在周围的 Blocks 中呈现,则组件将显示在聊天机器人下方的一个手风琴中。这些组件的值将作为参数按顺序传递到 `fn` 中,在聊天记录之后。

🔗
additional_inputs_accordion: str | Accordion | None
默认值 = None

如果提供字符串,则这是用于包含附加输入的 `gr.Accordion` 的标签。也可以提供 `gr.Accordion` 对象来配置包含附加输入的容器的其他属性。默认为 `gr.Accordion(label="附加输入", open=False)`。此参数仅在提供 `additional_inputs` 时使用。

🔗
additional_outputs: Component | list[Component] | None
默认值 = None

用作聊天函数的附加输出的 gradio 组件的实例或实例列表。这些必须是已在同一 Blocks 作用域中定义的组件。如果提供,聊天函数应返回这些组件的附加值。请参阅 demo/chatinterface_artifacts

🔗
editable: bool
默认值 = False

如果为 True,用户可以编辑过去的消息以重新生成响应。

🔗
examples: list[str] | list[MultimodalValue] | list[list] | None
默认值 = None

该函数的示例输入;如果提供,则会出现在聊天机器人中,并且可以单击以填充聊天机器人输入。应为表示纯文本示例的字符串列表,或表示多模式示例的字典列表(带有键 `text` 和 `files`)。如果提供了 `additional_inputs`,则示例必须是列表的列表,其中每个内部列表的第一个元素是字符串或字典示例消息,其余元素是附加输入的示例值——在这种情况下,示例将显示在聊天机器人下方。

🔗
example_labels: list[str] | None
默认值 = None

示例的标签,将显示而不是示例本身。如果提供,则应为与示例列表长度相同的字符串列表。仅当示例显示在聊天机器人中时(即,当未提供 `additional_inputs` 时)适用。

🔗
example_icons: list[str] | None
默认值 = None

示例的图标,将显示在示例上方。如果提供,则应为与示例列表长度相同的字符串 URL 或本地路径列表。仅当示例显示在聊天机器人中时(即,当未提供 `additional_inputs` 时)适用。

🔗
run_examples_on_click: bool
默认值 = True

如果为 True,单击示例将通过聊天机器人 fn 运行示例,并且响应将显示在聊天机器人中。如果为 False,单击示例将仅使用示例消息填充聊天机器人输入。如果 `cache_examples` 为 True,则无效

🔗
cache_examples: bool | None
默认值 = None

如果为 True,则在服务器中缓存示例,以便在示例中快速运行时。HuggingFace Spaces 中的默认选项为 True。其他地方的默认选项为 False。

🔗
cache_mode: Literal['eager', 'lazy'] | None
默认值 = None

如果为 "eager",则在应用程序启动时缓存所有示例。如果为 "lazy",则在应用程序的任何用户首次使用后,为所有用户缓存示例。如果为 None,将使用 GRADIO_CACHE_MODE 环境变量(如果已定义),否则默认为 "eager"。

🔗
title: str | None
默认值 = None

界面的标题;如果提供,则以大字体显示在聊天机器人上方。也用作在浏览器窗口中打开时的选项卡标题。

🔗
description: str | None
默认值 = None

界面的描述;如果提供,则以常规字体显示在聊天机器人上方和标题下方。接受 Markdown 和 HTML 内容。

🔗
theme: Theme | str | None
默认值 = None

Theme 对象或表示主题的字符串。如果为字符串,则将查找具有该名称的内置主题(例如 "soft" 或 "default"),或者将尝试从 Hugging Face Hub 加载主题(例如 "gradio/monochrome")。如果为 None,将使用默认主题。

🔗
flagging_mode: Literal['never', 'manual'] | None
默认值 = None

“never”、“manual” 之一。如果为 "never",用户将看不到标记输入和输出的按钮。如果为 "manual",用户将看到标记按钮。

🔗
flagging_options: list[str] | tuple[str, ...] | None
默认值 = ('Like', 'Dislike')

表示用户在标记消息时可以从中选择的选项的字符串列表。默认为 ["Like", "Dislike"]。这两个区分大小写的字符串将分别在每个机器人消息旁边呈现为“竖起大拇指”和“竖起大拇指向下”图标,但任何其他字符串都将出现在单独的标记图标下。

🔗
flagging_dir: str
默认值 = ".gradio/flagged"

存储标记数据的目录的路径。如果目录不存在,将创建该目录。

🔗
css: str | None
默认值 = None

自定义 css 作为代码字符串。此 css 将包含在演示网页中。

🔗
css_paths: str | Path | list[str | Path] | None
默认值 = None

自定义 css 作为 pathlib.Path 到 css 文件的路径或此类路径的列表。将读取、连接这些 css 文件,并将其包含在演示网页中。如果还设置了 `css` 参数,则首先包含来自 `css` 的 css。

🔗
js: str | Literal[True] | None
默认值 = None

自定义 js 作为代码字符串。自定义 js 应采用单个 js 函数的形式。页面加载时,将自动执行此函数。为了获得更大的灵活性,请使用 head 参数将 js 插入到 <script> 标签中。

🔗
head: str | None
默认值 = None

要插入到演示网页 head 中的自定义 html 代码。这可以用于向页面添加自定义元标记、多个脚本、样式表等。

🔗
head_paths: str | Path | list[str | Path] | None
默认值 = None

自定义 html 代码作为 pathlib.Path 到 html 文件的路径或此类路径的列表。将读取、连接这些 html 文件,并将其包含在演示网页的 head 中。如果还设置了 `head` 参数,则首先包含来自 `head` 的 html。

🔗
analytics_enabled: bool | None
默认值 = None

是否允许基本遥测。如果为 None,将使用 GRADIO_ANALYTICS_ENABLED 环境变量(如果已定义),否则默认为 True。

🔗
autofocus: bool
默认值 = True

如果为 True,则在页面加载时自动聚焦到文本框。

🔗
autoscroll: bool
默认值 = True

如果为 True,则在新消息出现时,将自动滚动到聊天机器人的底部,除非用户向上滚动。如果为 False,则不会自动滚动到聊天机器人的底部。

🔗
submit_btn: str | bool | None
默认值 = True

如果为 True,将在文本框内显示带有提交图标的提交按钮。如果为字符串,则将使用该字符串作为提交按钮文本来代替图标。如果为 False,则不显示提交按钮。

🔗
stop_btn: str | bool | None
默认值 = True

如果为 True,将在生成器执行期间显示带有停止图标的按钮,以停止生成。如果为字符串,则将使用该字符串作为提交按钮文本来代替停止图标。如果为 False,则不显示停止按钮。

🔗
concurrency_limit: int | None | Literal['default']
默认值 = "default"

如果设置,这是可以同时运行的聊天机器人提交的最大数量。可以设置为 None 表示没有限制(可以同时运行任意数量的聊天机器人提交)。设置为 "default" 以使用默认并发限制(由 `.queue()` 中的 `default_concurrency_limit` 参数定义,默认情况下为 1)。

🔗
delete_cache: tuple[int, int] | None
默认值 = None

一个元组,对应于 [频率,时长],均以秒为单位表示。每隔 `frequency` 秒,如果自文件创建以来已过去 `age` 秒以上,则将删除此 Blocks 实例创建的临时文件。例如,将其设置为 (86400, 86400) 将每天删除临时文件。当服务器重新启动时,缓存将完全删除。如果为 None,则不会发生缓存删除。

🔗
show_progress: Literal['full', 'minimal', 'hidden']
默认值 = "minimal"

在事件运行时如何显示进度动画:“full” 显示一个覆盖输出组件区域的微调器以及右上角的运行时显示,“minimal” 仅显示运行时显示,“hidden” 完全不显示进度动画

🔗
fill_height: bool
默认值 = True

如果为 True,聊天界面将扩展到窗口的高度。

🔗
fill_width: bool
默认值 = False

是否水平扩展以完全填充容器。如果为 False,则居中并将应用程序限制为最大宽度。

🔗
api_name: str | Literal[False]
默认值 = "chat"

用于聊天界面的 API 端点的名称。默认为 "chat"。设置为 False 以禁用 API 端点。

🔗
save_history: bool
默认值 = False

如果为 True,则将聊天记录保存到浏览器的本地存储,并在侧面板中显示以前的对话。

演示

import random
import gradio as gr

def random_response(message, history):
    return random.choice(["Yes", "No"])

demo = gr.ChatInterface(random_response, type="messages", autofocus=False)

if __name__ == "__main__":
    demo.launch()

		

指南