- 构建演示
- ChatInterface
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.ChatInterface 搭配自定义的 gr.Chatbot,其中包含占位符以及点赞/点踩按钮。当将 .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
fn: Callable用于包装聊天界面的函数。该函数应接受两个参数:一个 `str` 表示输入消息,以及一个 `list` 的 openai 风格字典:{"role": "user" | "assistant", "content": `str` | {"path": `str`} | `gr.Component`} 表示聊天记录。该函数应返回/生成一个 `str`(用于简单消息)、一个支持的 Gradio 组件(例如 gr.Image 返回图像)、一个 `dict`(用于完整的 openai 风格消息响应)或一个包含此类消息的 `list`。
multimodal: bool
multimodal: bool= False如果为 True,聊天界面将使用 `gr.MultimodalTextbox` 组件作为输入,该组件允许上传多媒体文件。如果为 False,聊天界面将使用 `gr.Textbox` 组件作为输入。如果为 True,`fn` 的第一个参数不应接受 `str` 消息,而是接受一个包含 "text" 和 "files" 键的 `dict` 消息
chatbot: Chatbot | None
chatbot: Chatbot | None= None一个 `gr.Chatbot` 组件实例,用于聊天界面,如果您想自定义聊天机器人属性。如果未提供,将创建一个默认的 `gr.Chatbot` 组件。
textbox: Textbox | MultimodalTextbox | None
textbox: Textbox | MultimodalTextbox | None= None一个 `gr.Textbox` 或 `gr.MultimodalTextbox` 组件实例,用于聊天界面,如果您想自定义文本框属性。如果未提供,将创建一个默认的 `gr.Textbox` 或 `gr.MultimodalTextbox` 组件。
additional_inputs: str | Component | list[str | Component] | None
additional_inputs: str | Component | list[str | Component] | None= None一个或多个 Gradio 组件实例(或它们的字符串快捷方式),用作聊天机器人的额外输入。如果组件尚未在周围的 Blocks 中渲染,则这些组件将显示在聊天机器人下方,并包含在一个手风琴面板中。这些组件的值将按照聊天记录之后的顺序作为参数传递给 `fn`。
additional_inputs_accordion: str | Accordion | None
additional_inputs_accordion: str | Accordion | None= None如果提供了一个字符串,则这是用于包含额外输入的 `gr.Accordion` 的标签。也可以提供一个 `gr.Accordion` 对象来配置包含额外输入的容器的其他属性。默认为 `gr.Accordion(label="Additional Inputs", open=False)`。此参数仅在提供了 `additional_inputs` 时使用。
additional_outputs: Component | list[Component] | None
additional_outputs: Component | list[Component] | None= None一个或多个 Gradio 组件实例,用作聊天函数的额外输出。这些必须是在同一 Blocks 作用域中已定义的组件。如果提供,聊天函数应为这些组件返回额外的值。请参见 $demo/chatinterface_artifacts。
examples: list[str] | list[MultimodalValue] | list[list] | None
examples: list[str] | list[MultimodalValue] | list[list] | None= None函数的示例输入;如果提供,将显示在聊天机器人中,并可单击以填充聊天机器人输入。应为表示纯文本示例的字符串列表,或表示多模态示例的字典列表(键为 `text` 和 `files`)。如果提供了 `additional_inputs`,则示例必须是列表的列表,其中每个内部列表的第一个元素是字符串或字典示例消息,其余元素是额外输入的示例值——在这种情况下,示例将显示在聊天机器人下方。
example_labels: list[str] | None
example_labels: list[str] | None= None示例的标签,将显示在示例本身之上。如果提供,应为与示例列表长度相同的字符串列表。仅当示例显示在聊天机器人中时适用(即当未提供 `additional_inputs` 时)。
example_icons: list[str] | None
example_icons: list[str] | None= None示例的图标,将显示在示例之上。如果提供,应为与示例列表长度相同的字符串 URL 或本地路径列表。仅当示例显示在聊天机器人中时适用(即当未提供 `additional_inputs` 时)。
run_examples_on_click: bool
run_examples_on_click: bool= True如果为 True,单击示例将通过聊天机器人 fn 运行该示例,并在聊天机器人中显示响应。如果为 False,单击示例只会用示例消息填充聊天机器人输入。如果 `cache_examples` 为 True,则无效
cache_examples: bool | None
cache_examples: bool | None= None如果为 True,则在服务器中缓存示例,以实现示例的快速运行时。HuggingFace Spaces 中的默认选项为 True。其他地方的默认选项为 False。请注意,示例的缓存与 Gradio 的 queue() 是分开的,因此某些功能(如 `gr.Progress()`、`gr.Info()`、`gr.Warning()` 等)在 Gradio 的 UI 中对缓存的示例将不可见。
cache_mode: Literal['eager', 'lazy'] | None
cache_mode: Literal['eager', 'lazy'] | None= None如果为 "eager",所有示例将在应用程序启动时缓存。如果为 "lazy",所有用户在使用应用程序一次后,所有示例都将被缓存。如果为 None,将使用 GRADIO_CACHE_MODE 环境变量(如果已定义),否则默认为 "eager"。
flagging_mode: Literal['never', 'manual'] | None
flagging_mode: Literal['never', 'manual'] | None= None值为 "never" 或 "manual"。如果为 "never",用户将看不到标记输入和输出的按钮。如果为 "manual",用户将看到标记按钮。
flagging_options: list[str] | tuple[str, ...] | None
flagging_options: list[str] | tuple[str, ...] | None= ('Like', 'Dislike')一个字符串列表,表示用户在标记消息时可以选择的选项。默认为 ["Like", "Dislike"]。这两个区分大小写的字符串将分别渲染为每个机器人消息旁边的“竖起大拇指”和“竖起大拇指”图标,但任何其他字符串将显示在单独的标记图标下方。
analytics_enabled: bool | None
analytics_enabled: bool | None= None是否允许基本遥测。如果为 None,将使用 GRADIO_ANALYTICS_ENABLED 环境变量(如果已定义),否则默认为 True。
submit_btn: str | bool | None
submit_btn: str | bool | None= True如果为 True,将在文本框中显示一个带有提交图标的提交按钮。如果为字符串,则使用该字符串作为提交按钮文本,而不是图标。如果为 False,则不显示提交按钮。
stop_btn: str | bool | None
stop_btn: str | bool | None= True如果为 True,将在生成器执行期间显示一个带有停止图标的按钮,用于停止生成。如果为字符串,则使用该字符串作为停止按钮文本,而不是图标。如果为 False,则不显示停止按钮。
concurrency_limit: int | None | Literal['default']
concurrency_limit: int | None | Literal['default']= "default"如果设置,这将是可同时运行的最大聊天机器人提交数。可以设置为 None 表示无限制(可同时运行任意数量的聊天机器人提交)。设置为 "default" 表示使用默认并发限制(由 `.queue()` 中的 `default_concurrency_limit` 参数定义,默认为 1)。
delete_cache: tuple[int, int] | None
delete_cache: tuple[int, int] | None= None一个元组,对应于 [频率,年龄],两者都以秒为单位。每隔 `frequency` 秒,将删除此 Blocks 实例创建的临时文件,前提是文件创建时间已超过 `age` 秒。例如,将其设置为 (86400, 86400) 将每天删除临时文件。缓存将在服务器重新启动时被完全删除。如果为 None,则不进行缓存删除。
show_progress: Literal['full', 'minimal', 'hidden']
show_progress: Literal['full', 'minimal', 'hidden']= "minimal"事件运行时如何显示进度动画:“full”显示一个覆盖输出组件区域的加载指示器,并在右上角显示运行时信息,“minimal”仅显示运行时信息,“hidden”不显示任何进度动画。
api_name: str | None
api_name: str | None= None定义聊天端点在 API 文档中的显示方式。可以是字符串或 None。如果设置为字符串,该端点将以给定的名称在 API 文档中公开。如果为 None,则使用函数名。
api_description: str | None | Literal[False]
api_description: str | None | Literal[False]= NoneAPI 端点的描述。可以是字符串、None 或 False。如果设置为字符串,则该端点将在 API 文档中以给定描述显示。如果为 None,则使用函数的 docstring 作为 API 端点描述。如果为 False,则 API 文档中不会显示任何描述。