reply_stream 产出的数十种事件。
AgentScope 为此提供两种终端界面:agentscope.console 逐行打印事件流,只依赖核心安装;agentscope.tui 基于 Textual 提供全屏交互界面,支持 Markdown 渲染、键盘选择确认与 AskUser 问答表单。
两个模块的接口与适用场景如下:
启动交互对话
launch_console 接收一个构造完成的智能体,接管终端交互的全部环节:
与智能体在终端中对话
launch_console 支持以下参数:
Agent | PipelineProtocol
必填
要交互的智能体,或任意满足
PipelineProtocol
的流水线。str
默认值:"user"
用户消息的发送者名称,同时用作输入提示符。
int | None
默认值:"20"
单条工具结果的最大打印行数,超出部分折叠为提示行,
None 表示不截断。launch_console 与 launch_tui 都不包含会话管理与持久化:对话状态保存在 agent.state 中,随进程退出而结束。若需要多用户、多会话与持久化存储,请使用智能体服务。嵌入事件渲染器
当开发者自己掌控运行逻辑(例如多智能体流水线、测试脚本)时,可以只使用ConsoleRenderer 完成打印。渲染器是被动的:事件如何产生、输入与确认如何处理,均由调用方决定。
在自己的代码中渲染事件流
渲染多智能体流水线
控制输出详细程度
launch_console 与 ConsoleRenderer 均通过 verbosity 参数控制输出的详细程度,三档依次递增:
渲染器会静默跳过未知的事件类型(
debug 档打印一行类型名),因此事件协议新增类型不会影响既有的渲染逻辑。启动全屏界面
需要更完整的交互体验时,可以用launch_tui 打开全屏对话界面。全屏界面依赖 Textual,需要先安装 tui 扩展(agentscope[full] 已包含):
安装全屏界面依赖
launch_tui 的用法与 launch_console 相同,传入构造完成的智能体即可。下面的例子额外装配了 AskUser,智能体提问时界面会弹出键盘操作的问答表单:
在全屏界面中与智能体对话
launch_tui 支持以下参数:
Agent | PipelineProtocol
必填
要交互的智能体,或任意满足
PipelineProtocol
的流水线。Sequence[Msg]
默认值:"()"
开始交互前先显示的历史消息。
str
默认值:"user"
输入框发出的消息的发送者名称。
显示实时语音会话
实时语音智能体的输入是持续的音频流,因此使用单独的launch_realtime_ui:界面显示双方的转写文本、工具调用与确认卡片,确认、打断与文字输入通过 agent.send() 交回智能体,音频本身由传输播放,不进入界面。运行前需要同时安装实时语音与全屏界面的依赖:
安装实时语音与全屏界面依赖
用全屏界面运行语音会话
launch_realtime_ui 与 launch_tui 的行为差异如下:
launch_realtime_ui 支持以下参数:
RealtimeAgent
必填
已连接的实时语音智能体。
TransportBase
必填
已启动的音频传输,负责采集与播放音频。
Sequence[Msg]
默认值:"()"
开始交互前先显示的历史消息。
str
默认值:"user"
输入框发出的消息的发送者名称。
嵌入界面组件
开发者已有自己的 Textual 应用时,可以直接使用agentscope.tui 的两个组件。组件只负责显示 Msg,不消费事件也不修改对话历史,两者的分工如下:
下面的例子把
ChatUI 接到开发者自己的运行后端 runtime 上,由后端把事件应用到消息(Msg.append_event())并推送变化的消息:
在 Textual 应用中嵌入 ChatUI
直接修改原有的
Msg 对象不会刷新界面。初始加载或整体替换历史时调用 set_messages(),流式更新时调用 update_message()。