Files
my-project/config/openclaw/scripts/ai-learning.sh
T

133 lines
4.0 KiB
Bash
Executable File

#!/bin/bash
# ============================================================================
# AI学习脚本 - 使用 Python 解析 JSON
# ============================================================================
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"
TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
mkdir -p "$LEARNING_DIR"
# 调用 MiniMax(用 Python 解析)
call_minimax() {
local prompt="$1"
# 先替换换行符
prompt=$(echo "$prompt" | tr '\n' ' ')
python3 << PYEOF
import json, urllib.request, sys
data = json.dumps({
"model": "minimax-m2.1",
"messages": [
{"role": "system", "content": "你是${ROBOT_NAME}。"},
{"role": "user", "content": "${prompt}"}
],
"max_tokens": 2000,
"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"]
# 清理内容
content = content.replace("\n", " ").strip()
print(content)
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
PYEOF
}
guardian_topics() {
cat << 'TOPICS'
【系统架构】🛡️ - OpenClaw深度配置、向量数据库、分布式系统
【故障排查】🔧 - 常见问题、排查方法、性能优化
【AI Agent深化】🤖 - SOUL.md、记忆系统、工具调用
【知识管理】📚 - 技术文档、经验总结、持续学习
TOPICS
}
qinglong_topics() {
cat << 'TOPICS'
【写作助手】✍️ - 神话素材、古典武侠、角色塑造
【股票投资】📈 - 宏观经济、行业研究、风险控制
【网络自动化】🌐 - 网页抓取、API调用、效率工具
【AI能力提升】🤖 - 记忆系统、提示词工程、工作流
TOPICS
}
get_topics() {
[ "$ROBOT_TYPE" = "qinglong" ] && qinglong_topics || guardian_topics
}
do_learning() {
local cycle=$1
local topic=$(get_topics | sed -n "$(( (cycle - 1) % 4 + 1 ))p")
echo "📖 周期 $cycle: 学习 $topic"
local content=$(call_minimax "你正在学习:${topic}。请深度学习并产出一份具体的学习笔记:1.核心知识点 2.实践方法 3.学到了什么 4.如何应用。直接输出内容。")
cat > "${LEARNING_DIR}/learning-${ROBOT_TYPE}-cycle${cycle}-${TIMESTAMP}.md" << MD
# ${ROBOT_NAME} 学习周期 $cycle - $(date)
## 主题: ${topic}
$content
MD
echo "✅ 学习笔记保存"
}
do_reflection() {
local cycle=$1
echo "💭 周期 $cycle: 深度反思"
local content=$(call_minimax "你刚完成了第${cycle}轮学习。请深度反思:1.学到了什么 2.理解程度 3.疑问 4.改进点。直接输出反思内容。")
cat > "${LEARNING_DIR}/reflection-${ROBOT_TYPE}-cycle${cycle}-${TIMESTAMP}.md" << MD
# ${ROBOT_NAME} 反思周期 $cycle - $(date)
$content
MD
echo "✅ 反思笔记保存"
}
do_summary() {
local cycle=$1
echo "📊 周期 $cycle: 深度总结"
local content=$(call_minimax "请深度总结你的学习成果:1.核心收获 2.如何应用 3.下次重点 4.理解提升。直接输出总结内容。")
cat > "${LEARNING_DIR}/summary-${ROBOT_TYPE}-cycle${cycle}-${TIMESTAMP}.md" << MD
# ${ROBOT_NAME} 总结周期 $cycle - $(date)
$content
MD
echo "✅ 总结笔记保存"
}
main() {
local cycle=${1:-1}
echo "========================================"
echo "🧠 ${ROBOT_NAME} AI学习 (周期 $cycle)"
echo "========================================"
do_learning $cycle && sleep 2
do_reflection $cycle && sleep 2
do_summary $cycle
echo ""
echo "✅ 周期 $cycle 完成"
}
main "$@"