本技能为OpenClaw AI助手提供实时任务进度展示功能,当用户布置任务时自动启用:
用户:帮我分析销售数据并生成报告
AI:[████░░░░░░░░░░░░░░] 25%
✅ 步骤1:收集数据 - 已完成 (耗时: 2分钟)
🔄 步骤2:数据清洗 - 进行中 (预估: 3分钟)
⏳ 步骤3:分析趋势 - 待开始
⏳ 步骤4:生成报告 - 待开始
用户:安装并配置一个PDF处理技能
AI:[██████████████████░░] 80%
✅ 步骤1:搜索技能 - 已完成 (耗时: 1分钟)
✅ 步骤2:下载安装 - 已完成 (耗时: 3分钟)
🔄 步骤3:配置设置 - 进行中 (预估: 2分钟)
⏳ 步骤4:测试功能 - 待开始
用户:处理这个Excel文件并生成图表
AI:[████████████████████] 100%
✅ 步骤1:读取文件 - 已完成 (耗时: 30秒)
✅ 步骤2:数据清洗 - 已完成 (耗时: 2分钟)
✅ 步骤3:生成图表 - 已完成 (耗时: 3分钟)
✅ 步骤4:保存结果 - 已完成 (耗时: 1分钟)
总用时: 6分30秒 ⏱️
scripts/progress_tracker.py#!/usr/bin/env python3
"""
实时任务进度跟踪器
自动计算进度百分比、用时统计和状态更新
"""
import time
from datetime import datetime
from typing import List, Dict, Optional
class ProgressTracker:
"""任务进度跟踪器"""
def __init__(self, task_name: str, total_steps: int):
self.task_name = task_name
self.total_steps = total_steps
self.start_time = time.time()
self.steps = []
self.current_step = 0
def start_step(self, step_name: str):
"""开始一个新步骤"""
self.current_step += 1
step = {
'name': step_name,
'start_time': time.time(),
'end_time': None,
'duration': None,
'status': 'in_progress'
}
self.steps.append(step)
return self.get_progress()
def complete_step(self):
"""完成当前步骤"""
if self.steps:
current_step = self.steps[-1]
current_step['end_time'] = time.time()
current_step['duration'] = current_step['end_time'] - current_step['start_time']
current_step['status'] = 'completed'
return self.get_progress()
def get_progress(self) -> Dict:
"""获取当前进度信息"""
completed = len([s for s in self.steps if s['status'] == 'completed'])
in_progress = len([s for s in self.steps if s['status'] == 'in_progress'])
progress_percent = int((completed / self.total_steps) * 100) if self.total_steps > 0 else 0
# 生成进度条
bar_length = 20
filled = int(bar_length * progress_percent / 100)
progress_bar = f"[{'█' * filled}{'░' * (bar_length - filled)}]"
# 计算总用时
total_duration = time.time() - self.start_time
return {
'task_name': self.task_name,
'progress_percent': progress_percent,
'progress_bar': progress_bar,
'total_steps': self.total_steps,
'completed_steps': completed,
'current_step': self.current_step,
'total_duration': total_duration,
'steps': self.steps.copy()
}
def format_progress_message(self) -> str:
"""格式化进度消息"""
progress = self.get_progress()
message = f"**进度条: {progress['progress_bar']} {progress['progress_percent']}%**\n\n"
message += f"任务: {progress['task_name']}\n"
message += f"总步骤: {progress['total_steps']}步\n\n"
for i, step in enumerate(progress['steps'], 1):
if step['status'] == 'completed':
duration = f" (耗时: {int(step['duration'])}秒)" if step['duration'] else ""
message += f"✅ **步骤{i}: {step['name']}** - 已完成{duration}\n"
elif step['status'] == 'in_progress':
message += f"🔄 **步骤{i}: {step['name']}** - 进行中\n"
# 添加待开始步骤
remaining = progress['total_steps'] - progress['current_step']
for i in range(remaining):
step_num = progress['current_step'] + i + 1
message += f"⏳ **步骤{step_num}: [待定]** - 待开始\n"
if progress['completed_steps'] == progress['total_steps']:
message += f"\n---\n**总用时: {int(progress['total_duration'])}秒** ⏱️\n"
return message
# 使用示例
if __name__ == "__main__":
# 创建一个任务跟踪器
tracker = ProgressTracker("销售数据分析报告", 4)
# 开始并完成步骤
tracker.start_step("收集销售数据")
time.sleep(2) # 模拟任务执行
tracker.complete_step()
print(tracker.format_progress_message())
tracker.start_step("数据清洗与整理")
time.sleep(3)
tracker.complete_step()
print(tracker.format_progress_message())
tracker.start_step("生成可视化图表")
time.sleep(4)
tracker.complete_step()
print(tracker.format_progress_message())
tracker.start_step("撰写分析报告")
time.sleep(2)
tracker.complete_step()
print(tracker.format_progress_message())
scripts/quick_progress.sh#!/bin/bash
# 快速进度条生成脚本
# 参数:当前步骤 总步骤数 步骤名称
CURRENT_STEP=$1
TOTAL_STEPS=$2
STEP_NAME=$3
# 计算百分比
PERCENT=$((CURRENT_STEP * 100 / TOTAL_STEPS))
# 生成进度条
BAR_LENGTH=20
FILLED=$((BAR_LENGTH * PERCENT / 100))
EMPTY=$((BAR_LENGTH - FILLED))
PROGRESS_BAR="["
for ((i=0; i<FILLED; i++)); do
PROGRESS_BAR+="█"
done
for ((i=0; i<EMPTY; i++)); do
PROGRESS_BAR+="░"
done
PROGRESS_BAR+="]"
# 输出进度信息
echo "进度条: $PROGRESS_BAR $PERCENT%"
echo "当前步骤 ($CURRENT_STEP/$TOTAL_STEPS): $STEP_NAME"
# 状态标记
if [ $CURRENT_STEP -eq $TOTAL_STEPS ]; then
echo "状态: ✅ 已完成所有步骤"
elif [ $CURRENT_STEP -eq 0 ]; then
echo "状态: ⏳ 任务开始"
else
echo "状态: 🔄 进行中"
fi
当AI助手执行3步及以上任务时,本技能自动启用,无需手动配置。
**进度条: [████████████░░░░░░░░] 60%**
任务: 销售数据分析报告
总步骤: 5步
✅ 步骤1:收集数据 - 已完成 (耗时: 2分钟)
🔄 步骤2:数据清洗 - 进行中 (预估: 3分钟)
⏳ 步骤3:分析趋势 - 待开始
⏳ 步骤4:生成图表 - 待开始
⏳ 步骤5:撰写报告 - 待开始
**进度条: [████████████████████] 100%**
✅ 步骤1:收集数据 - 已完成 (耗时: 2分钟)
✅ 步骤2:数据清洗 - 已完成 (耗时: 3分钟)
✅ 步骤3:分析趋势 - 已完成 (耗时: 4分钟)
✅ 步骤4:生成图表 - 已完成 (耗时: 3分钟)
✅ 步骤5:撰写报告 - 已完成 (耗时: 5分钟)
---
**总用时: 17分钟** ⏱️
当任务超过60秒无进展时,自动发送:
🔔 仍在执行中,请稍候...
当前进度: [████████░░░░░░░░░░░░] 40%
在AI助手的响应中集成进度跟踪:
# 在任务开始时
tracker = ProgressTracker("用户任务名称", 总步骤数)
# 每步开始时
tracker.start_step("步骤名称")
# 执行任务...
# 每步完成时
tracker.complete_step()
print(tracker.format_progress_message())
# 任务完成时
print(f"**总用时: {int(tracker.get_progress()['total_duration'])}秒** ⏱️")
**进度条: [██████████████████░░] 80%**
任务: 安装PDF处理技能
总步骤: 5步
✅ 步骤1:搜索技能库 - 已完成 (耗时: 45秒)
✅ 步骤2:下载技能包 - 已完成 (耗时: 2分钟)
✅ 步骤3:解压文件 - 已完成 (耗时: 30秒)
🔄 步骤4:配置设置 - 进行中
⏳ 步骤5:测试功能 - 待开始
**进度条: [████████████████████] 100%**
任务: 月度销售数据分析
总步骤: 4步
✅ 步骤1:导入数据 - 已完成 (耗时: 1分钟)
✅ 步骤2:数据清洗 - 已完成 (耗时: 3分钟)
✅ 步骤3:计算指标 - 已完成 (耗时: 4分钟)
✅ 步骤4:生成报告 - 已完成 (耗时: 2分钟)
---
**总用时: 10分钟** ⏱️
本技能让用户随时了解任务执行进度,提升透明度和用户体验!✨
共 1 个版本