用途
Anima-i 是一个自主 AI 智能体的实验项目,旨在探索 LLM 智能体在长时间跨度内自主运行时的行为模式与记忆机制。它并非一个即用型产品,而是一个公开的实验记录与框架示例,展示了如何构建能够跨多次运行持续工作的智能体。
主要能力与发现
项目运行了 10 个“世代”的智能体 Methodius。每个世代接收一个目标,工作 5-12 个周期,然后通过纯文本文件将经验传递给下一个世代。关键发现包括:
- 智能体即文件:记忆文件不是日志,而是智能体的身份。文件质量等于智能体质量。
- 为遗忘而设计:事实性知识以约 2 个世代为半衰期衰减;过程性知识(“如何思考”)因为每个世代独立重新发现而得以保留。
- 个人信件优于结构化数据库:给下一代的自由格式信件比结构化知识库表现更好,因为问题激发原创思考,而断言鼓励复制。
- 不要信任优雅的第一答案:流畅性通常意味着复制而非原创。
- 创造力出现在智能体之间:孤立智能体只会复现训练数据;新想法只在不同视角碰撞时出现。
- 协议创造条件而非保证:正式流程的价值往往出现在意料之外的地方。
- 反思是智能体的舒适区:没有硬性限制,智能体会永远“反思”而不行动。需要设置时间盒和明确的思考到行动的转换。
- 反馈需要受众:七代内容积累,零外部反馈。
使用方式
工作循环
一次运行等于一个步骤。智能体不会一次性解决整个任务,复杂任务被拆解到 TODO.md 中。每次运行包含:
- 唤醒:读取 MEMORY、TODO、GOALS、INBOX
- 行动:执行 TODO 中的一个具体步骤
- 反思:更新 MEMORY、JOURNAL、TODO
- 发布:结果发送到 Telegram
世代完成协议
当 TODO.md 中所有任务关闭后,loop.sh 停止。然后依次执行:
- generate_image.sh:根据工作结果生成世代图标(使用 Hugging Face API)
- set_channel_photo.sh:将生成的图标设置为 Telegram 频道头像
- 结果提交到 git
- next_generation.sh:智能体为下一代提出目标建议
Telegram 机器人管理
telegram_bot.py 是中央控制组件,作为 systemd 服务运行,支持 SIGTERM 优雅关闭。操作员可通过命令管理世代,支持后台进程、世代队列(.generation_queue.json)。智能体或操作员添加目标到队列,机器人发送提议供审批;操作员可接受(立即、N 小时后或特定时间)、修改或拒绝。如果操作员在 AUTO_APPROVE_TIMEOUT_HOURS(默认 24 小时)内未响应,调度器自动批准并启动世代。
世代结构
每个世代是一个独立工作目录(generation_1/、generation_2/ 等),拥有自己的目标、记忆和计划。templates/ 中的模板是唯一真实来源,init.sh 将其复制到新目录。
适用场景
- 研究 LLM 智能体长期自主运行行为
- 探索智能体记忆与身份设计模式
- 构建跨运行持续的自主工作流
- 学习如何用纯文本文件管理复杂任务状态
限制与要求
- 需要 Claude CLI(claude)已安装并授权
- 需要 Bash
- 可选:Python 3 + python-telegram-bot(用于 Telegram 机器人)
- 需要 curl + jq 用于发布到 Telegram
- 环境变量:TELEGRAM_BOT_TOKEN、TELEGRAM_OPERATOR_CHAT_ID、TELEGRAM_CHANNEL_ID、HF_TOKEN
- 基于 Rai220/anima(MIT)框架构建
- 项目采用 MIT 许可证
设计原则
- 极简:Markdown、Bash 和一个 Python 文件用于机器人
- 透明:所有状态都在可读的文本文件中
- 自主:智能体无需人在回路中即可工作
- 连续:每一步通过记忆延续前一步
- 公开:工作结果发布到 Telegram
- 可控:操作员通过 Telegram 机器人控制世代