输入指示器 (Typing Indicators) 在代理运行期间显示活动状态,让用户了解代理正在处理任务。
核心概念
输入指示器提供视觉反馈,显示代理何时在"思考"或"输入"。
控制参数
- typingMode: 控制何时开始显示输入指示器
- typingIntervalSeconds: 控制刷新频率 (默认 6 秒)
输入模式
never
永不显示输入指示器。
{
"agents": {
"default": {
"typingMode": "never"
}
}
}
适用场景:
- 批处理任务
- 后台运行的代理
- 不需要实时反馈的自动化流程
instant
立即显示输入指示器,在运行开始时就显示。
{
"agents": {
"default": {
"typingMode": "instant"
}
}
}
适用场景:
- 交互式聊天
- 需要即时反馈的场景
- 用户期望快速响应的对话
thinking
在模型开始推理时显示输入指示器。
{
"agents": {
"default": {
"typingMode": "thinking",
"reasoningLevel": "stream" // 需要启用推理流
}
}
}
注意
thinking 模式需要 reasoningLevel: "stream" 才能工作。如果没有启用推理流,指示器不会显示。message
在开始生成消息时显示输入指示器。
{
"agents": {
"default": {
"typingMode": "message"
}
}
}
特殊行为:
- 忽略静默回复: 如果回复被标记为 silent,不会显示输入指示器
- 适用于需要在实际输出内容时才显示反馈的场景
刷新频率
控制输入指示器的更新频率:
{
"agents": {
"default": {
"typingMode": "instant",
"typingIntervalSeconds": 6 // 每 6 秒刷新一次 (默认值)
}
}
}
调整建议:
- 3-5 秒: 更频繁的反馈,适合快速交互
- 6-10 秒: 平衡性能和反馈,推荐默认值
- 10+ 秒: 减少服务器负载,适合长时间运行的任务
智能默认值
OpenClaw 根据会话类型和配置自动选择合适的默认值:
聊天类型
- 主对话: 默认
instant - 群组对话: 默认
instant - 心跳会话: 默认
never(心跳永不显示输入状态) - Cron 任务: 默认
never
代理类型
- 交互式代理: 默认
instant - 后台代理: 默认
never - 沙箱代理: 继承父代理设置
配置示例
全局配置
{
"agents": {
"defaults": {
"typingMode": "instant",
"typingIntervalSeconds": 6
}
}
}
会话级配置
{
"sessions": {
"main": {
"typingMode": "instant"
},
"background": {
"typingMode": "never"
}
}
}
代理级配置
{
"agents": {
"chat-agent": {
"typingMode": "instant",
"typingIntervalSeconds": 5
},
"analysis-agent": {
"typingMode": "thinking",
"reasoningLevel": "stream"
},
"cron-agent": {
"typingMode": "never"
}
}
}
动态覆盖
// 通过 API 动态设置
await openclaw.sendMessage("你好", {
typingMode: "message",
typingIntervalSeconds: 3
});
特殊情况
心跳会话
心跳会话永远不显示输入指示器,无论配置如何设置。
{
"heartbeat": {
"enabled": true,
"interval": "55m"
// 心跳会话自动使用 typingMode: "never"
}
}
静默回复
当 typingMode: "message" 时,标记为 silent 的回复不会显示输入指示器。
// 代理返回静默回复
{
"role": "assistant",
"content": "...",
"metadata": {
"silent": true // message 模式下不显示输入指示器
}
}
推理模式要求
thinking 模式需要启用推理流:
{
"agents": {
"default": {
"typingMode": "thinking",
"reasoningLevel": "stream" // 必需
}
}
}
如果 reasoningLevel 不是 "stream",输入指示器将不会显示。
用户体验考虑
选择合适的模式
最佳实践
- 快速交互: 使用
instant,让用户立即知道系统在处理 - 长时间任务: 使用
thinking,在真正开始计算时再显示 - 批处理: 使用
never,减少不必要的 UI 更新 - 内容生成: 使用
message,只在有实际输出时显示
刷新频率优化
- 低频率 (10+ 秒): 减少服务器负载,但用户可能感觉不够响应
- 中频率 (5-8 秒): 平衡性能和体验,推荐
- 高频率 (3-4 秒): 更好的反馈,但增加服务器压力
实现细节
输入指示器的工作原理:
- 触发检查: 根据
typingMode决定何时开始 - 状态发送: 向前端发送"正在输入"状态
- 定期刷新: 按照
typingIntervalSeconds的间隔刷新状态 - 停止条件: 运行完成或出错时停止
常用命令
# 查看当前配置
openclaw config get agents.defaults.typingMode
# 设置全局默认值
openclaw config set agents.defaults.typingMode instant
# 设置刷新频率
openclaw config set agents.defaults.typingIntervalSeconds 5
# 查看会话配置
openclaw session info <session-id>
最佳实践
配置建议
- 区分场景: 交互式对话用
instant,后台任务用never - 保持一致: 同类型会话使用相同的输入指示器设置
- 避免过度: 不要过于频繁刷新,以免增加服务器负载
- 测试体验: 根据实际用户反馈调整模式和频率
- 考虑网络: 网络较慢时适当降低刷新频率
提示
输入指示器虽然看似简单,但对用户体验有重要影响。合理配置可以让用户感觉系统更加响应和可靠。