一个具有自我反思能力的自主 AI 代理系统,能够通过迭代思考、行动和反思来实现自主行为。
这个系统创建了一个能够自主思考、行动和反思的 AI 代理。它通过不断迭代调用 Claude API,记录完整的思考过程,实现真正的自主决策和学习。
- 记录一切 - 把所有思考过程、推理、犹豫、决定都记录下来
- 保持诚实 - 真实地记录想法,即使是不确定或困惑的
- 持续反思 - 思考之前做了什么、学到了什么、下一步该做什么
- 🤔 自主思考 - 根据当前状态和历史记录自主决定下一步行动
- 📝 日记系统 - 完整记录思考过程,支持 JSON Lines 格式
- 🎯 目标管理 - 维护目标列表,追踪长期目标
- 💡 自我反思 - 每次行动后进行反思和总结
- 😊 情绪追踪 - 记录代理的情绪状态变化
- 👁️ 实时监控 - 实时显示代理的思考过程
- 🎨 美化输出 - 彩色终端输出,清晰展示不同阶段
- 📊 状态面板 - 显示迭代次数、思考次数、行动统计
- 📜 历史回放 - 支持回放历史日记
- 🔄 状态持久化 - 所有数据保存到文件,支持断点续传
- 🛡️ 进程管理 - 自动管理代理和观察者进程
- ⚡ 容错机制 - 超时保护和异常处理
┌─────────────────────────────────────────────────────┐
│ 反思型自主代理系统 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ reflective_ │─────▶│ observer.py │ │
│ │ agent.py │ │ │ │
│ │ │◀─────│ (实时监控) │ │
│ │ 代理核心 │ │ │ │
│ └──────┬───────┘ └──────────────┘ │
│ │ │
│ │ 调用 │
│ ▼ │
│ ┌──────────────┐ │
│ │ Claude API │ │
│ │ │ │
│ └──────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ my_space/ │ │
│ │ │ │
│ │ - diary.jsonl │
│ │ - state.json │
│ │ - agent.log │
│ └──────────────┘ │
└─────────────────────────────────────────────────────┘
- Python 3.7+
- Claude CLI (已安装并配置)
- 终端支持 ANSI 颜色代码(用于美化输出)
# 启动代理和观察者
./run_reflective.sh系统会在终端实时显示代理的思考过程:
🚀 启动反思型自主代理
工作目录: /path/to/example
📊 代理状态 - 第 0 轮
============================================================
迭代次数: 0
思考次数: 0
行动次数: 0
💭 最近思考:
(暂无)
🎯 当前目标:
(暂无)
📍 ITERATION_START #0 [16:44:12]
📝 PROMPT_GENERATED #0 [16:44:13]
🤔 THINKING #0 [16:44:15]
思考: 我想探索这个目录,了解文件结构...
⚡ ACTION #0 [16:44:16]
行动: 创建了探索脚本
文件: explore.sh
💡 REFLECTION #0 [16:44:17]
反思: 我学会了如何列出目录内容
心情: 🎉 兴奋
🎯 NEXT_GOAL #0 [16:44:18]
目标: 继续探索文件系统
✅ ITERATION_END #0 [16:44:19]
状态: 继续
./run_reflective.sh stop# 完整运行(代理 + 观察者)
./run_reflective.sh
# 仅启动观察者(监控已运行的代理)
./run_reflective.sh watch
# 回放历史日记(最近 50 条)
./run_reflective.sh replay
# 回放指定数量
./run_reflective.sh replay 100
# 停止所有进程
./run_reflective.sh stop# 运行代理
python3 reflective_agent.py
# 限制迭代次数
python3 reflective_agent.py --max-iterations 10
# 指定工作目录
python3 reflective_agent.py --work-dir /path/to/dir
# 运行观察者
python3 observer.py
# 回放模式
python3 observer.py --replay --limit 20
# 自定义监控间隔
python3 observer.py --interval 1.0- 生成提示词 - 代理根据当前状态和历史日记生成提示词
- 调用 Claude - 通过 Claude API 获取自主思考和决策
- 记录过程 - 将思考、行动、反思记录到日记
- 更新状态 - 更新迭代次数、目标列表、成就等
- 决定继续 - 根据返回的
continue字段决定是否继续
每次迭代,代理会生成包含以下内容的提示词:
- 当前时间和迭代次数
- 当前状态(JSON 格式)
- 最近的思考日记(前 10 条)
- 行动指令
- 输出格式要求(JSON)
Claude 需要返回 JSON 格式的响应:
{
"thought": "详细描述你的思考过程",
"action": "描述你实际执行的行动",
"reflection": "反思和总结",
"next_goal": "下一轮的目标",
"created_files": ["创建的文件列表"],
"emotional_state": "当前情绪状态(好奇/满足/困惑/兴奋等)",
"continue": true
}example/
├── reflective_agent.py # 代理核心程序
├── observer.py # 观察者程序
├── run_reflective.sh # 启动脚本
├── README.md # 本文件
└── my_space/ # 工作空间(自动创建)
├── diary.jsonl # 思考日记(JSON Lines)
├── state.json # 当前状态
├── prompt.txt # 当前提示词
├── response.txt # Claude 响应
└── agent.log # 代理日志
所有数据都存储在 my_space/ 目录中,这是代理的"私人空间":
- diary.jsonl - 每行一条 JSON 记录,记录所有思考过程
- state.json - 代理的当前状态,包括迭代次数、目标、成就等
- prompt.txt - 当前迭代的提示词(调试用)
- response.txt - Claude 的原始响应(调试用)
- agent.log - 代理的运行日志
state.json 包含以下字段:
{
"iteration": 10, // 当前迭代次数
"start_time": "2025-01-16T...", // 启动时间
"total_thoughts": 10, // 总思考次数
"total_actions": 8, // 总行动次数
"goals": [ // 目标列表(最多 10 个)
"探索文件系统",
"学习新知识"
],
"achievements": [ // 成就列表(最多 10 个)
"成功创建第一个文件",
"学会了使用 ls 命令"
],
"last_thought": "...", // 最后的思考
"last_action": "..." // 最后的行动
}观察者使用不同的颜色和图标表示不同阶段:
| 阶段 | 图标 | 颜色 | 说明 |
|---|---|---|---|
| SYSTEM_START | 🚀 | 绿色 | 系统启动 |
| ITERATION_START | 📍 | 蓝色 | 迭代开始 |
| PROMPT_GENERATED | 📝 | 青色 | 提示词生成 |
| THINKING | 🤔 | 洋红 | 思考过程 |
| ACTION | ⚡ | 黄色 | 执行行动 |
| REFLECTION | 💡 | 绿色 | 反思总结 |
| NEXT_GOAL | 🎯 | 蓝色 | 下一目标 |
| RESPONSE_RECEIVED | 📨 | 青色 | 收到响应 |
| ITERATION_END | ✅ | 绿色 | 迭代结束 |
| ERROR | ❌ | 红色 | 错误 |
| SYSTEM_STOP | 👋 | 黄色 | 系统停止 |
- 默认单次调用超时为 10 分钟(600 秒)
- 可在
reflective_agent.py:261修改timeout参数
- 系统使用 PID 文件管理进程
- 如果异常退出,运行
./run_reflective.sh stop清理
- 所有数据保存在
my_space/目录 - 删除此目录会重置代理的所有记忆
- 可手动编辑
state.json来调整代理状态
- 需要安装并配置 Claude CLI
- 注意 API 调用频率限制
- 大量迭代会消耗 tokens
python3 reflective_agent.py --work-dir /path/to/custom/dir
python3 observer.py --work-dir /path/to/custom/dirpython3 reflective_agent.py --max-iterations 5你可以编辑 my_space/state.json 来:
- 修改当前迭代次数
- 添加初始目标
- 设置已有成就
- 调整代理的"记忆"
# 统计迭代次数
wc -l my_space/diary.jsonl
# 查看最近的思考
tail -n 10 my_space/diary.jsonl | jq
# 提取所有情绪状态
jq -r '.emotional_state' my_space/diary.jsonl | sort | uniq -c- 检查 Claude CLI 是否正确安装:
claude --version - 查看日志:
cat my_space/agent.log
- 检查
my_space/diary.jsonl是否存在 - 确认代理正在运行
- 尝试回放模式:
./run_reflective.sh replay
- 手动 kill 进程:
ps aux | grep python - 删除 PID 文件:
rm .agent.pid .observer.pid
代理可以自主探索文件系统,创建文档,记录发现。
给代理一个学习目标(如"学习 Python"),它会自主规划学习路径。
代理可以编写代码、测试、反思改进,实现迭代开发。
代理可以进行创意写作,记录创作过程,反思改进。
- 支持多个代理协同工作
- 添加更多工具和命令支持
- 实现持久化记忆系统
- 支持更复杂的目标分解
- 添加 Web UI 界面
- 支持分布式运行
更多信息请访问:vimalinx.xyz
- Web Demo: https://vimalinx.xyz
- GitHub: https://github.com/vimalinx/enjoy_ai_core
MIT License
欢迎提交 Issue 和 Pull Request!
Created with ❤️ by AI enthusiasts
Note: 这是一个实验性项目,用于探索自主 AI 代理的可能性。请谨慎使用,注意 API 成本。