每日备份 2026-06-10 12:57:13
This commit is contained in:
1 parent
fda2ccb8c2
commit
3d2e638c6a
244 files changed
+58890
-3
No files matched your search
Executable
+385
@@ -0,0 +1,385 @@
|
||||
#!/bin/bash
|
||||
# ============================================================================
|
||||
# 混合学习控制器 - 智能主题选择版 v4.0
|
||||
# ============================================================================
|
||||
# 功能:调用标准学习模块learn-core.sh完成学习任务
|
||||
# 特点:模块化、易维护、流程统一、智能主题选择
|
||||
# ============================================================================
|
||||
|
||||
# 配置
|
||||
LEARNING_DIR="/root/.openclaw/workspace/sleep-learning"
|
||||
LEARNING_LOG="${LEARNING_DIR}/learning.log"
|
||||
PROBLEM_LOG="/var/log/openclaw/problems.log"
|
||||
KNOWLEDGE_GRAPH="/root/.openclaw/workspace/知识图谱.md"
|
||||
TOPIC_STATE="/root/.openclaw/.hybrid-learning-topic-state"
|
||||
LOG_RETENTION_DAYS=15
|
||||
DEEP_THINKING_ROUNDS=3
|
||||
|
||||
mkdir -p "$(dirname "$PROBLEM_LOG")" "$LEARNING_DIR"
|
||||
|
||||
# -------------------- 加载标准学习模块 --------------------
|
||||
source /root/.openclaw/scripts/learn-core.sh
|
||||
|
||||
# ============================================================================
|
||||
# 日志功能
|
||||
# ============================================================================
|
||||
log_start() {
|
||||
local task="$1"
|
||||
local robot="$2"
|
||||
echo "========================================" >> "$LEARNING_LOG"
|
||||
echo "[开始] $(date '+%Y-%m-%d %H:%M:%S') | $robot | $task" >> "$LEARNING_LOG"
|
||||
echo "[开始] $task"
|
||||
}
|
||||
|
||||
log_progress() {
|
||||
local message="$1"
|
||||
echo "[进度] $(date '+%H:%M:%S') | $message" >> "$LEARNING_LOG"
|
||||
echo " → $message"
|
||||
}
|
||||
|
||||
log_deep() {
|
||||
local round="$1"
|
||||
local message="$2"
|
||||
echo "[深度-$round] $(date '+%H:%M:%S') | $message" >> "$LEARNING_LOG"
|
||||
echo " 🔹 第${round}轮深度思考: $message"
|
||||
}
|
||||
|
||||
log_end() {
|
||||
local status="$1"
|
||||
local duration="$2"
|
||||
echo "[结束] $(date '+%Y-%m-%d %H:%M:%S') | 状态: $status | 耗时: ${duration}秒" >> "$LEARNING_LOG"
|
||||
echo "[结束] 完成 (${duration}秒)"
|
||||
}
|
||||
|
||||
log_topic() {
|
||||
echo "[主题] $1" >&2 # 全部输出到stderr
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 清理旧日志
|
||||
# ============================================================================
|
||||
clean_old_logs() {
|
||||
local count=$(find "$LEARNING_DIR" -name "*.log" -mtime +$LOG_RETENTION_DAYS 2>/dev/null | wc -l)
|
||||
if [ "$count" -gt 0 ]; then
|
||||
find "$LEARNING_DIR" -name "*.log" -mtime +$LOG_RETENTION_DAYS -delete
|
||||
log_progress "已删除 ${count} 个过期日志文件"
|
||||
fi
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 7大品类定义 + Fallback主题
|
||||
# ============================================================================
|
||||
declare -A FALLBACK_TOPICS
|
||||
|
||||
FALLBACK_TOPICS["写作助手"]="Prompt工程、多模态提示词、AI辅助写作技巧"
|
||||
FALLBACK_TOPICS["贵金属交易"]="黄金价格影响因素、白银投资策略、铂金市场分析"
|
||||
FALLBACK_TOPICS["期货交易"]="期货合约交割、套期保值策略、商品期货波动"
|
||||
FALLBACK_TOPICS["合约交易"]="永续合约机制、资金费率计算、杠杆风险管理"
|
||||
FALLBACK_TOPICS["虚拟货币"]="区块链技术原理、DeFi协议、NFT应用场景"
|
||||
FALLBACK_TOPICS["网络自动化"]="Selenium自动化、API接口对接、数据抓取技巧"
|
||||
FALLBACK_TOPICS["AI能力提升"]="大模型微调、RAG检索增强、AI Agent设计"
|
||||
|
||||
# ============================================================================
|
||||
# 获取当前品类索引(轮询)
|
||||
# ============================================================================
|
||||
get_category_index() {
|
||||
local current=0
|
||||
if [ -f "$TOPIC_STATE" ]; then
|
||||
current=$(cat "$TOPIC_STATE")
|
||||
fi
|
||||
|
||||
local next=$(( (current + 1) % 7 ))
|
||||
echo "$next" > "$TOPIC_STATE"
|
||||
echo "$next"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 获取品类名称
|
||||
# ============================================================================
|
||||
get_category_name() {
|
||||
local index=$1
|
||||
local categories=(
|
||||
"写作助手"
|
||||
"贵金属交易"
|
||||
"期货交易"
|
||||
"合约交易"
|
||||
"虚拟货币"
|
||||
"网络自动化"
|
||||
"AI能力提升"
|
||||
)
|
||||
echo "${categories[$index]}"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# AI动态生成主题
|
||||
# ============================================================================
|
||||
generate_topic_with_ai() {
|
||||
local category="$1"
|
||||
|
||||
log_topic "AI生成主题中: $category" >&2 # 输出到stderr,不干扰stdout
|
||||
|
||||
# 调用AI生成具体学习主题
|
||||
local ai_result
|
||||
ai_result=$(python3 /root/.openclaw/scripts/ocw_api.py chat "作为AI学习助手,请为${category}生成一个具体的、有价值的学习主题。长度不超过15字。直接输出主题。" 2>/dev/null)
|
||||
|
||||
# 清理输出
|
||||
echo "$ai_result" | tr -d '[]【】'
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 选择学习主题(AI生成 + Fallback)
|
||||
# ============================================================================
|
||||
select_topic() {
|
||||
local category="$1"
|
||||
local topic=""
|
||||
local source="AI"
|
||||
|
||||
# 尝试AI生成
|
||||
local ai_topic
|
||||
ai_topic=$(generate_topic_with_ai "$category" 2>/dev/null)
|
||||
|
||||
# 清理AI结果
|
||||
ai_topic=$(echo "$ai_topic" | grep -vE "\[主题\]|品类|生成" | head -1)
|
||||
|
||||
# 验证AI结果
|
||||
if [ -n "$ai_topic" ] && [ ${#ai_topic} -lt 30 ] && [ ${#ai_topic} -gt 2 ]; then
|
||||
topic="$ai_topic"
|
||||
else
|
||||
# Fallback到预设主题
|
||||
local fallback="${FALLBACK_TOPICS[$category]}"
|
||||
local fallback_topic=$(echo "$fallback" | cut -d',' -f1 | tr -d ' ')
|
||||
topic="$fallback_topic"
|
||||
source="Fallback"
|
||||
fi
|
||||
|
||||
# 输出主题和来源
|
||||
echo "${source}|${topic}"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 获取主题(带日志)
|
||||
# ============================================================================
|
||||
get_topic_with_log() {
|
||||
local category="$1"
|
||||
local result
|
||||
result=$(select_topic "$category")
|
||||
local source=$(echo "$result" | cut -d'|' -f1)
|
||||
local topic=$(echo "$result" | cut -d'|' -f2)
|
||||
echo "[主题] ${source}: $topic" >&2
|
||||
echo "$topic"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# AI根据发展方向生成学习主题
|
||||
# ============================================================================
|
||||
# 发展方向主题池(API不可用时的备选)
|
||||
DIRECTION_TOPICS=(
|
||||
"AI Agent设计模式"
|
||||
"大模型RAG检索增强"
|
||||
"Prompt工程最佳实践"
|
||||
"多模态AI应用开发"
|
||||
"AI Agent工作流自动化"
|
||||
"大模型微调技术"
|
||||
"AI Agent记忆机制"
|
||||
"Function Calling实战"
|
||||
)
|
||||
|
||||
# ============================================================================
|
||||
# AI根据发展方向生成学习主题
|
||||
# ============================================================================
|
||||
generate_topic_by_direction() {
|
||||
local robot="$1"
|
||||
|
||||
log_progress "根据发展方向生成学习主题..."
|
||||
|
||||
# 尝试调用API,失败则使用主题池
|
||||
local topic=""
|
||||
|
||||
# 调用AI根据发展方向生成学习主题
|
||||
local ai_result
|
||||
ai_result=$(python3 /root/.openclaw/scripts/ocw_api.py chat "作为${robot}的AI学习助手,请根据当前技术发展趋势生成一个有价值的学习主题。长度不超过20字。直接输出主题。" 2>/dev/null)
|
||||
|
||||
# 清理输出
|
||||
topic=$(echo "$ai_result" | tr -d '[]【】' | grep -vE "<think>|</think>|主题|生成|发展|趋势" | head -1)
|
||||
|
||||
# 验证结果
|
||||
if [ -z "$topic" ] || [ ${#topic} -lt 2 ]; then
|
||||
# 使用主题池轮询
|
||||
local index=0
|
||||
if [ -f "$TOPIC_STATE" ]; then
|
||||
index=$(cat "$TOPIC_STATE")
|
||||
fi
|
||||
topic="${DIRECTION_TOPICS[$((index % ${#DIRECTION_TOPICS[@]}))]}"
|
||||
echo $((index + 1)) > "$TOPIC_STATE"
|
||||
fi
|
||||
|
||||
echo "[主题] AI发展: $topic" >&2
|
||||
echo "$topic"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 模式A:自动学习(调用learn-core)
|
||||
# ============================================================================
|
||||
mode_a_deep_learning() {
|
||||
local robot="$1"
|
||||
local cycle=$2
|
||||
local use_direction="${3:-false}"
|
||||
|
||||
log_progress "模式A:自动学习"
|
||||
|
||||
local topic
|
||||
|
||||
if [ "$use_direction" = "true" ]; then
|
||||
# 根据发展方向生成主题(不输出调试信息)
|
||||
topic=$(generate_topic_by_direction "$robot" 2>/dev/null)
|
||||
else
|
||||
# 选择品类(轮询)
|
||||
local category_index
|
||||
category_index=$(get_category_index)
|
||||
local category
|
||||
category=$(get_category_name "$category_index")
|
||||
log_topic "品类: $category"
|
||||
|
||||
# 选择具体主题
|
||||
topic=$(get_topic_with_log "$category")
|
||||
fi
|
||||
|
||||
# 调用学习模块
|
||||
learn_topic "$topic" "auto"
|
||||
|
||||
log_progress "自动学习完成"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 模式B:问题驱动学习(调用learn-core)
|
||||
# ============================================================================
|
||||
mode_b_deep_learning() {
|
||||
local robot="$1"
|
||||
local problem="$2"
|
||||
|
||||
log_progress "模式B:问题驱动学习"
|
||||
|
||||
# 使用learn-core进行问题分析
|
||||
log_progress "问题: $problem"
|
||||
|
||||
# 调用AI分析问题
|
||||
python3 /root/.openclaw/scripts/ocw_api.py chat "作为${robot},请深度分析以下问题:${problem}。请从以下维度分析(每点不超过30字):1. 问题本质 2. 根本原因 3. 解决思路。直接输出分析结果。" 2>/dev/null
|
||||
|
||||
log_progress "问题分析完成"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 问题检测
|
||||
# ============================================================================
|
||||
detect_problems() {
|
||||
log_progress "检测最近问题"
|
||||
|
||||
if [ -f "/root/.openclaw/scripts/monitor-error.log" ]; then
|
||||
local recent_errors=$(tail -10 "/root/.openclaw/scripts/monitor-error.log" 2>/dev/null)
|
||||
if [ -n "$recent_errors" ]; then
|
||||
log_progress "发现系统错误"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 问题检测完成" >> "$PROBLEM_LOG"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 整合到知识体系
|
||||
# ============================================================================
|
||||
integrate_knowledge() {
|
||||
local robot="$1"
|
||||
local type="$2"
|
||||
|
||||
log_progress "整合到知识体系"
|
||||
|
||||
if [ -f "$KNOWLEDGE_GRAPH" ]; then
|
||||
echo "- [$(date '+%Y-%m-%d %H:%M:%S')] ${robot} 完成${type}学习" >> "${LEARNING_DIR}/knowledge-updates.log"
|
||||
fi
|
||||
|
||||
log_progress "知识整合完成"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 主程序
|
||||
# ============================================================================
|
||||
main() {
|
||||
local mode="${1:-hybrid}"
|
||||
local robot="${2:-青龙}"
|
||||
local problem="${3:-}"
|
||||
local use_direction="${4:-false}" # 是否按发展方向生成
|
||||
|
||||
local start_time=$(date +%s)
|
||||
|
||||
echo "╔════════════════════════════════════════════════════╗"
|
||||
echo "║ 混合学习控制器 v4.1 (发展方向版) ║"
|
||||
echo "╚════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
echo "机器人:$robot"
|
||||
echo "模式:$mode"
|
||||
echo "学习模块:learn-core.sh"
|
||||
if [ "$use_direction" = "true" ]; then
|
||||
echo "主题选择:AI根据发展方向生成"
|
||||
else
|
||||
echo "主题选择:7大品类轮询 + AI生成"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
clean_old_logs
|
||||
|
||||
case "$mode" in
|
||||
hybrid)
|
||||
log_start "混合学习" "$robot"
|
||||
detect_problems
|
||||
|
||||
if [ -n "$problem" ]; then
|
||||
mode_b_deep_learning "$robot" "$problem"
|
||||
fi
|
||||
|
||||
mode_a_deep_learning "$robot" 1 "$use_direction"
|
||||
integrate_knowledge "$robot" "hybrid"
|
||||
;;
|
||||
auto)
|
||||
log_start "自动学习" "$robot"
|
||||
mode_a_deep_learning "$robot" 1 "$use_direction"
|
||||
integrate_knowledge "$robot" "auto"
|
||||
;;
|
||||
problem)
|
||||
if [ -z "$problem" ]; then
|
||||
echo "❌ 模式B需要提供问题参数"
|
||||
exit 1
|
||||
fi
|
||||
log_start "问题驱动学习" "$robot"
|
||||
mode_b_deep_learning "$robot" "$problem"
|
||||
integrate_knowledge "$robot" "problem"
|
||||
;;
|
||||
direction)
|
||||
# 纯发展方向模式
|
||||
log_start "发展方向学习" "$robot"
|
||||
topic=$(generate_topic_by_direction "$robot")
|
||||
learn_topic "$topic" "auto"
|
||||
integrate_knowledge "$robot" "direction"
|
||||
;;
|
||||
*)
|
||||
echo "用法:$0 {hybrid|auto|problem|direction} [机器人] [问题] [direction]"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 hybrid 2号机 # 混合学习(品类轮询)"
|
||||
echo " $0 auto 2号机 # 自动学习(品类轮询)"
|
||||
echo " $0 direction 2号机 # 按发展方向生成学习主题"
|
||||
echo " $0 hybrid 2号机 '' true # 混合学习+发展方向模式"
|
||||
echo " $0 problem 2号机 '问题X' # 问题驱动学习"
|
||||
;;
|
||||
esac
|
||||
|
||||
local end_time=$(date +%s)
|
||||
local duration=$((end_time - start_time))
|
||||
|
||||
log_end "ok" "$duration"
|
||||
|
||||
echo ""
|
||||
echo "📊 日志: $LEARNING_LOG"
|
||||
}
|
||||
|
||||
# 执行主程序
|
||||
main "$@"
|
||||
Reference in new issue
Block a user