直接跳到内容

ChatFeed 聊天流

PnChatFeed是一个中层布局组件,用于管理一系列聊天消息(ChatMessage)项。该组件提供后端方法来发送消息、流式传输令牌、执行回调、撤销消息以及清除聊天记录。

底层实现为panel.chat.ChatFeed,参数基本一致,参考文档:https://panel.holoviz.org/reference/chat/ChatFeed.html

基本用法

PnChatFeed可以不需要任何参数初始化,通过send方法发送聊天消息。

回调函数

添加回调函数可以使PnChatFeed更加有趣。回调函数的签名必须包含最新可用的消息值contents。 除了contents之外,签名还可以包含最新可用的user名称和聊天instance

可以更新callback_usercallback_avatar来分别更改响应者的默认名称和头像。

指定的callback也可以返回一个包含valueuseravatar键的字典,这将覆盖默认的callback_usercallback_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(带有componentinstance作为args)在提交后执行。

还可以设置一个predicate来评估组件的状态,例如小部件是否有值。如果提供,当谓词返回True时,提交按钮将被启用。

序列化

聊天历史可以通过serialize并设置format="transformers"来序列化,以供transformersopenai包使用。

可以设置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

ChatFeed 聊天流已经加载完毕