每日备份 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
+175
@@ -0,0 +1,175 @@
|
||||
#!/bin/bash
|
||||
# ============================================================================
|
||||
# 自动学习循环 - 持续改进系统
|
||||
# ============================================================================
|
||||
# 流程:学习 → 改进总结 → 验证 → 再次学习
|
||||
# ============================================================================
|
||||
|
||||
MINIMAX_API="https://api.minimaxi.com/v1/chat/completions"
|
||||
MINIMAX_KEY="sk-cp-bJSl7-48u8Y07PXD_x8Wp21JiBgYul7iEO6ZWNK4FBAA4DWzj-U-K8-mN-Flak-O8cOtRegt5FYviSRfBw_noa14z0FkFYzczCPUa41opZsg5AGZ4s4uqL8"
|
||||
|
||||
ROBOT_NAME="${ROBOT_NAME:-守护者}"
|
||||
ROBOT_TYPE="${ROBOT_TYPE:-guardian}"
|
||||
LEARNING_DIR="/root/.openclaw/workspace/sleep-learning"
|
||||
LOG_DIR="/var/log/openclaw/sleep-learning/${ROBOT_NAME}"
|
||||
TEMP_DIR="/tmp/ai-learning-${ROBOT_TYPE}"
|
||||
TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
|
||||
|
||||
mkdir -p "$LEARNING_DIR" "$LOG_DIR" "$TEMP_DIR"
|
||||
|
||||
# 调用 MiniMax
|
||||
call_minimax() {
|
||||
local system="$1"
|
||||
local user="$2"
|
||||
|
||||
# 保存到临时文件
|
||||
echo "$user" > "${TEMP_DIR}/prompt.txt"
|
||||
|
||||
python3 << PYEOF
|
||||
import json, urllib.request, sys
|
||||
|
||||
with open("${TEMP_DIR}/prompt.txt", "r") as f:
|
||||
user_content = f.read()
|
||||
|
||||
data = json.dumps({
|
||||
"model": "minimax-m2.1",
|
||||
"messages": [
|
||||
{"role": "system", "content": "$system"},
|
||||
{"role": "user", "content": user_content}
|
||||
],
|
||||
"max_tokens": 1500,
|
||||
"temperature": 0.7
|
||||
}).encode()
|
||||
|
||||
req = urllib.request.Request("${MINIMAX_API}", data=data,
|
||||
headers={"Content-Type": "application/json", "Authorization": "Bearer ${MINIMAX_KEY}"})
|
||||
|
||||
try:
|
||||
with urllib.request.urlopen(req) as r:
|
||||
resp = json.loads(r.read().decode())
|
||||
content = resp["choices"][0]["message"]["content"]
|
||||
print(content.replace("\n", " "))
|
||||
except Exception as e:
|
||||
print(f"Error: {e}", file=sys.stderr)
|
||||
PYEOF
|
||||
}
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "${LOG_DIR}/auto-learning.log"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 阶段1: 学习
|
||||
# ============================================================================
|
||||
do_learn() {
|
||||
local cycle=$1
|
||||
local topic=$(get_topic $cycle)
|
||||
|
||||
log "📖 === 学习阶段 (周期 $cycle) ==="
|
||||
|
||||
local content=$(call_minimax "你是${ROBOT_NAME}。" \
|
||||
"请深度学习【$topic】,产出一份具体的学习笔记:1.核心知识点(3-5条)2.实践方法(2-3条)3.如何应用(2条)。简洁输出,每点不超过30字。")
|
||||
|
||||
echo "$content" > "${LEARNING_DIR}/learn-${ROBOT_TYPE}-cycle${cycle}-${TIMESTAMP}.md"
|
||||
log "✅ 学习完成"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 阶段2: 改进总结
|
||||
# ============================================================================
|
||||
do_improve() {
|
||||
local cycle=$1
|
||||
|
||||
log "💭 === 改进总结阶段 ==="
|
||||
|
||||
local content=$(call_minimax "你是${ROBOT_NAME}。" \
|
||||
"根据刚才的学习内容,请深度反思:1.核心收获是什么?2.有什么不足/疑问?3.下次如何改进?4.需要深入学习的点?简洁输出。")
|
||||
|
||||
echo "$content" > "${LEARNING_DIR}/improve-${ROBOT_TYPE}-cycle${cycle}-${TIMESTAMP}.md"
|
||||
log "✅ 改进总结完成"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 阶段3: 验证
|
||||
# ============================================================================
|
||||
do_verify() {
|
||||
local cycle=$1
|
||||
local task=$(get_task $cycle)
|
||||
|
||||
log "🔍 === 验证阶段 ==="
|
||||
|
||||
local result=$(call_minimax "你是${ROBOT_NAME}。" \
|
||||
"请完成这个任务来验证学习效果:$task。要求:用30字以内回答,直接输出答案。")
|
||||
|
||||
echo "$result" > "${LEARNING_DIR}/verify-${ROBOT_TYPE}-cycle${cycle}-${TIMESTAMP}.md"
|
||||
log "✅ 验证完成: $result"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 辅助函数
|
||||
# ============================================================================
|
||||
get_topic() {
|
||||
local topics=(
|
||||
"系统架构 - OpenClaw配置、向量数据库、分布式系统"
|
||||
"故障排查 - 日志分析、性能优化、安全审计"
|
||||
"AI Agent - SOUL.md、记忆系统、工具调用"
|
||||
"知识管理 - 技术文档、经验总结、持续学习"
|
||||
)
|
||||
echo "${topics[$(( ($1 - 1) % 4 ))]}"
|
||||
}
|
||||
|
||||
get_task() {
|
||||
local tasks=(
|
||||
"用一句话解释什么是向量数据库"
|
||||
"列出3个常见的性能问题及解决方案"
|
||||
"解释SOUL.md的作用"
|
||||
"如何写好技术文档?"
|
||||
)
|
||||
echo "${tasks[$(( ($1 - 1) % 4 ))]}"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# 主循环
|
||||
# ============================================================================
|
||||
main() {
|
||||
local max_cycles=${1:-3}
|
||||
|
||||
echo "╔════════════════════════════════════════════════════╗"
|
||||
echo "║ 🔄 ${ROBOT_NAME} 自动学习循环 ║"
|
||||
echo "║ 流程:学习 → 改进总结 → 验证 → 再次学习 ║"
|
||||
echo "╚════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
log "========================================"
|
||||
log "开始自动学习循环 (最多 $max_cycles 轮)"
|
||||
log "========================================"
|
||||
|
||||
local cycle=1
|
||||
while [ $cycle -le $max_cycles ]; do
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "🔄 周期 $cycle / $max_cycles"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
|
||||
do_learn $cycle
|
||||
sleep 2
|
||||
|
||||
do_improve $cycle
|
||||
sleep 2
|
||||
|
||||
do_verify $cycle
|
||||
|
||||
cycle=$((cycle + 1))
|
||||
|
||||
[ $cycle -le $max_cycles ] && sleep 3
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "╔════════════════════════════════════════════════════╗"
|
||||
echo "║ ✅ 自动学习循环完成! ║"
|
||||
echo "╚════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
echo "📊 成果位置: ${LEARNING_DIR}/"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in new issue
Block a user