#header-mark#
ChatFeed 聊天流
PnChatFeed是一个中层布局组件,用于管理一系列聊天消息(ChatMessage)项。该组件提供后端方法来发送消息、流式传输令牌、执行回调、撤销消息以及清除聊天记录。
底层实现为panel.chat.ChatFeed
,参数基本一致,参考文档:https://panel.holoviz.org/reference/chat/ChatFeed.html
基本用法
PnChatFeed
可以不需要任何参数初始化,通过send
方法发送聊天消息。
回调函数
添加回调函数可以使PnChatFeed
更加有趣。回调函数的签名必须包含最新可用的消息值contents
。 除了contents
之外,签名还可以包含最新可用的user
名称和聊天instance
。
可以更新callback_user
和callback_avatar
来分别更改响应者的默认名称和头像。
指定的callback
也可以返回一个包含value
、user
和avatar
键的字典,这将覆盖默认的callback_user
和callback_avatar
。
如果不希望与send
一起触发回调,请将respond
设置为False
。
可以通过将callback_exception
设置为"summary"
来显示异常。
异步回调
PnChatFeed
还支持异步callback
。我们建议尽可能使用异步callback
以保持应用程序的快速响应,只要函数中没有阻塞事件循环的内容。
流式输出的最简单和最优方式是通过异步生成器。如果您不熟悉这个术语,只需在函数前加上async
,并用yield
替换return
。
如果不连接字符,也可以持续替换原始消息。
也可以手动触发回调与respond
。这对于从初始消息实现一系列响应很有用!
编辑回调
可以将edit_callback
附加到PnChatFeed
以处理消息编辑。签名必须包含最新可用的消息值contents
、编辑消息的索引和聊天instance
。
步骤
可以通过一系列ChatStep
提供中间步骤,如思想链。
提示用户
可以使用prompt_user
暂时暂停代码执行并提示用户回答问题或填写表单,该方法接受任何Panel component
和后续callback
(带有component
和instance
作为args)在提交后执行。
还可以设置一个predicate
来评估组件的状态,例如小部件是否有值。如果提供,当谓词返回True
时,提交按钮将被启用。
序列化
聊天历史可以通过serialize
并设置format="transformers"
来序列化,以供transformers
或openai
包使用。
可以设置role_names
来显式映射角色到ChatMessage的用户名。
流式传输
如果返回的对象不是生成器(特别是LangChain输出),仍然可以使用stream
方法流式传输输出。
自定义
可以通过message_params
传递ChatEntry
参数。
直接将这些参数传递给ChatFeed构造函数,它将自动转发到message_params
中。
也可以通过设置message_params
参数来自定义聊天流的外观。
自定义聊天界面
您也可以在PnChatFeed
的基础上构建自己的自定义聊天界面。
API
属性
属性名 | 说明 | 类型 | 默认值 |
---|---|---|---|
objects | 添加到聊天流的消息 | List[ChatMessage ] | [] |
renderers | 接受值并返回Panel对象的可调用对象或可调用对象列表 | List[Callable ] | None |
callback | 当用户发送消息或调用respond 时执行的回调 | callable | None |
card_params | 传递给Card的参数 | Dict | {} |
message_params | 传递给每个ChatMessage的参数 | Dict | {} |
header | 聊天流的标题 | Any | None |
callback_user | 回调提供的消息的默认用户名 | str | "AI" |
callback_avatar | 回调提供的条目的默认头像 | str, BytesIO, bytes, ImageBase | None |
callback_exception | 如何处理回调引发的异常 | str, Callable | "raise" |
edit_callback | 当用户编辑消息时执行的回调 | callable | None |
help_text | 初始化聊天记录中的聊天消息 | str | None |
placeholder_text | 显示在占位符图标旁边的文本 | str | "Thinking..." |
placeholder_params | 传递给占位符ChatMessage 的参数 | dict | {} |
placeholder_threshold | 显示占位符前缓冲的最小持续时间(秒) | float | 0.2 |
post_hook | 在新消息完全添加后执行的钩子 | callable | None |
auto_scroll_limit | 从Column中最新对象到激活更新时自动滚动的最大像素距离 | int | 10 |
scroll_button_threshold | 从Column中最新对象到显示滚动按钮的最小像素距离 | int | 100 |
load_buffer | 在可见对象每侧加载的对象数 | int | 10 |
show_activity_dot | 是否在流式传输回调响应时在ChatMessage上显示活动点 | bool | False |
view_latest | 是否在初始化时滚动到最新对象 | bool | True |
Slots
插槽名 | 说明 |
---|---|
default | 自定义默认内容 |
方法
方法名 | 说明 | 类型 |
---|---|---|
send | 发送一个值并在聊天记录中创建一个新消息 | Callable |
serialize | 将聊天记录导出为字典 | Callable |
stream | 流式传输令牌并更新提供的消息 | Callable |
clear | 清除聊天记录并返回已清除的消息 | Callable |
respond | 使用聊天记录中的最新消息执行回调 | Callable |
trigger_post_hook | 使用聊天记录中的最新消息触发后钩子 | Callable |
stop | 如果可能,取消当前回调任务 | Callable |
scroll_to | 列滚动到指定索引处的对象 | Callable |
undo | 从聊天记录中删除最后count 条消息并返回它们 | Callable |
Controls
src/examples/panel_vuepy/chat/ChatFeed