Gradio全解8——ChatInterface&Chatbot:聊天界面类与聊天机器人(5)——通过API加载、聊天历史和用户反馈
本章目录如下:
- 《ChatInterface&Chatbot:聊天界面类与聊天机器人(1)——ChatInterface类示例与构造参数》
- 《ChatInterface&Chatbot:聊天界面类与聊天机器人(2)——ChatInterface的自定义函数和界面》
- 《ChatInterface&Chatbot:聊天界面类与聊天机器人(3)——ChatInterface的多模态功能与附加输入输出》
- 《ChatInterface&Chatbot:聊天界面类与聊天机器人(4)——返回复杂响应与直接修改Chatbot值》
- 《ChatInterface&Chatbot:聊天界面类与聊天机器人(5)——通过API加载、聊天历史和用户反馈》
- 《ChatInterface&Chatbot:聊天界面类与聊天机器人(6)——gr.ChatInterface与流行LLM库和API结合》
- 《ChatInterface&Chatbot:聊天界面类与聊天机器人(7)——组件gr.Chatbot及gr.ChatMessage》
- 《ChatInterface&Chatbot:聊天界面类与聊天机器人(8)——组件Chatbot的特殊Events》
- 《ChatInterface&Chatbot:聊天界面类与聊天机器人(9)——使用Blocks创建自定义聊天机器人》
- 《ChatInterface&Chatbot:聊天界面类与聊天机器人(10)——使用显示思考和引用构建UI》
8.5 ChatInterface的API加载、聊天历史和用户反馈
本节分两部分,先讲解如何通过API加载聊天机器人,然后介绍聊天历史和用户反馈。
8.5.1 通过API加载聊天机器人
需要说明的是,除了利用gr.ChatInterface()快速创建聊天机器人,还可以通过API端点直接加载聊天机器人,有两种方法:gr.load_chat()和/chat。
1. gr.load_chat():从OpenAI API端点加载
通过函数gr.load_chat(),我们可以从Ollama或任何兼容OpenAI API的端点快速加载聊天机器人。假如有一个提供兼容OpenAI API端点的聊天服务器(可在本地部署,如果没有可以跳过这部分),那么可以用一行代码启动一个ChatInterface。
首先,运行pip install openai
。然后,使用本地部署的URL、模型和可选的token进行加载,如下所示:
import gradio as gr
demo = gr.load_chat("http://localhost:11434/v1", model="deepseek-r1", token="...")
demo.launch()
此外,load_chat还可以设置file_types、system_message、streaming、kwargs等。目前官方还没有关于这部分的详细资料,感兴趣的读者请关注官方更新。
2. /chat:通过页面API端点加载
一旦我们构建了Gradio聊天界面ChatInterface并将其托管在HuggingFace Spaces或其他地方,就可以通过简单API的端点:/chat
进行查询。该端点只需传入用户消息(如果使用additional_inputs参数设置了任何额外输入,则可能还需要这些输入),就会返回响应,且内部会跟踪已消息历史轨迹。API端点操作细节如图8-13:
要使用该端点,可以通过Gradio Python客户端或Gradio JS客户端。或者,我们也可以将聊天界面部署到其他平台,例如:
- Discord Bot;
- Slack Bot;
- Website widget。
关于这三部分操作将在第12章讲述。
8.5.2 聊天历史和用户反馈
用户聊天过程中,维护聊天历史记录至关重要,而通过用户反馈可以与用户互动。
1. 保存聊天历史记录
我们可以为ChatInterface启用持久化聊天历史记录功能,这允许用户维护多个对话并轻松切换。启用持久化聊天历史记录功能后,对话会使用浏览器的本地存储(local storage)在用户浏览器本地进行私密保存。因此,如果将ChatInterface部署在HuggingFace Spaces等平台上时,每个用户都将拥有自己独立的聊天历史记录,且不会干扰其他用户的对话。这意味着多个用户可以同时与同一个ChatInterface交互,同时保留各自的私密对话历史。
要启用持久化聊天历史记录功能,只需设置gr.ChatInterface(save_history=True)
(如下一节示例所示)。用户随后会在侧边栏中看到他们之前的对话,并可以继续之前的聊天或开始新的对话。
2. 收集用户反馈
为了收集关于聊天模型的反馈,可以设置gr.ChatInterface(flagging_mode="manual")
,用户将能够对聊天助手的回复进行点赞或点踩。每个被标记的回复以及整个聊天历史记录都会保存到应用工作目录中的CSV文件中(可以通过flagging_dir参数配置标记目录)。
我们还可以通过flagging_options参数更改反馈选项,它的默认选项是"Like"和"Dislike",分别显示为点赞和点踩图标,还有其他选项也将显示专门的旗帜图标。以下展示了一个同时启用了聊天历史记录和用户反馈功能的ChatInterface示例:
import time
import gradio as gr
def slow_echo(message, history):
for i in range(len(message)):
time.sleep(0.05)
yield "You typed: " + message[: i + 1]
demo = gr.ChatInterface(
slow_echo,
type="messages",
flagging_mode="manual",
flagging_options=["Like", "Spam", "Inappropriate", "Other"],
save_history=True,
)
demo.launch()
运行界面如图8-14:
注意在此示例中,我们设置了多个标记选项:“Like”、“Spam”(垃圾邮件)、“Inappropriate”(不合适的)、“Other”。由于区分大小写的字符串"Like"是标记选项之一,用户将在每条助手消息旁看到点赞图标,其余三个标记选项将显示在旗帜图标的下拉菜单中。