alive-agent 是一个关于“持续存在型 AI Agent”的小型 Python 原型。
它不是传统聊天机器人,也不是一个等待用户输入后再返回答案的助手。它的核心单位是“心跳”:每隔一段时间,Agent 会感知当前时间和自身状态,生成一段私有内心表达,决定是否说话、是否行动,并把结果写入记忆。
这个项目探索的问题是:如果一个 AI 不是被动问答接口,而是一个有时间感、记忆、人格、主动性、沉默权和行动能力的持续主体,它的交互范式应该是什么?
传统聊天产品的循环通常是:
用户输入 -> 模型回复 -> 结束
alive-agent 的循环是:
心跳 -> 感知 -> 内心独白 -> 决定是否行动 -> 决定是否说话 -> 更新记忆 -> 下一次心跳
因此,这个项目的目标不是做一个“更会回答问题”的聊天助手,而是验证一种不同的 Agent 产品范式:
Agent 产品的核心不是页面,也不是单次回复,而是一个持续运行的行为系统。
- 以固定间隔运行心跳循环,默认每 30 秒一次。
- 在无人输入时也会持续感知时间、更新状态、思考或发呆。
- 区分私有内心表达和对外说话。
- 大多数心跳保持沉默,只在有必要时对外说话。
- 支持终端输入,用户消息会在下一次心跳中被处理。
- 支持主动行动:写笔记、读笔记、列出笔记、联网搜索。
- 有短期状态、长期记忆、日终总结和梦境整理。
- 有简单的睡眠/醒来机制。
- 会把运行过程写入日志,形成可回放的历史轨迹。
chatbot 的主要产品对象是“回复”。
alive-agent 的主要产品对象是“行为流”:
等待
-> 思考
-> 碎碎念
-> 行动
-> 消化行动结果
-> 说话或沉默
-> 记忆沉淀
用户不只是和它问答,而是在观察并影响一个持续存在的系统。
.
├── agent.py # 主程序
├── requirements.txt # Python 依赖
├── README.md # 项目说明
├── .env.example # 环境变量示例
├── state.json # 当前运行状态和记忆快照
├── inner_thoughts.log # 内心、行动、发言和用户输入日志
├── dreams.log # 睡眠整理和梦境日志
└── notes/ # Agent 自己写下的笔记
这次仓库中包含了已有的交互历史记录,包括 state.json、inner_thoughts.log、dreams.log 和 notes/。这些文件不是演示假数据,而是这个原型实际运行后留下的轨迹。
已有历史记录展示了这个 Agent 在运行中出现过的行为:
- 主动搜索感兴趣的问题,例如科学发现、食谱、纪录片、古生物信息。
- 主动写笔记,把搜索结果、计划、纠错和日常想法保存下来。
- 在无人输入时继续自我推进,有时会发呆,有时会突然切换关注点。
- 会对用户消息做出回应,但并不每次心跳都说话。
- 会陷入重复,例如反复说“困”、反复纠结同一个行动。
- 会被搜索结果误导,之后又通过再次搜索和写笔记进行修正。
- 会在夜间整理一天的记忆,并生成梦境和长期记忆。
这些历史本身就是项目的重要部分:它们暴露了持续 Agent 的真实问题,而不是只展示一个理想化 demo。
state.json 维护 Agent 的当前生命状态:
name:名字personality:人格设定mood:当前情绪current_focus:当前关注点recent_thoughts:近期内心想法conversation_history:近期对话long_term_memories:长期记忆day_summary:上一天总结is_sleeping:是否处于睡眠状态days_lived:已经运行过的天数heartbeat_count:心跳次数last_spoke_at:上次对外说话时间last_user_msg_at:上次收到用户消息时间
当前 Agent 有四个可执行行动:
| 行动 | 作用 |
|---|---|
write_note |
写一篇 Markdown 笔记 |
read_note |
按标题或标题片段读取笔记 |
list_notes |
查看已有笔记 |
web_search |
通过 Tavily 联网搜索 |
每次心跳最多执行一个行动。行动完成后,Agent 会收到行动结果,并进入一次 follow-up 反思;这次反思只能消化结果,不能继续执行新行动。
这是一种 ReAct-like 结构,但还不是完整的多步 ReAct executor。
安装依赖:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt准备环境变量:
cp .env.example .env填写:
ALIVE_AGENT_API_KEY=your_model_api_key_here
ALIVE_AGENT_BASE_URL=https://token-plan-cn.xiaomimimo.com/v1
TAVILY_API_KEY=your_tavily_api_key_here也可以直接导出:
export ALIVE_AGENT_API_KEY="..."
export ALIVE_AGENT_BASE_URL="https://token-plan-cn.xiaomimimo.com/v1"
export TAVILY_API_KEY="..."启动:
python3 agent.py启动后可以直接在终端输入文字。输入会进入队列,并在下一次心跳中被 Agent 感知和处理。
用 Ctrl+C 停止。
主循环:
main()
-> load_state()
-> start input listener thread
-> while true:
heartbeat(state)
sleep(HEARTBEAT_INTERVAL)
心跳:
heartbeat(state)
-> 判断是否睡眠时间
-> 如需要则醒来
-> 收集用户输入
-> 检测重复并注入随机 nudge
-> call_llm()
-> process_result()
结果处理:
process_result(result, state)
-> 记录 inner_thought
-> 更新 mood/current_focus
-> 如有 action,执行行动
-> 将行动结果反馈给模型消化
-> 决定是否 speak
-> 保存 state
睡眠整理:
do_sleep(state)
-> 汇总近期想法和对话
-> 生成 dream/day_summary/memories_to_keep
-> 更新 long_term_memories
-> 清空近期想法和对话
-> 进入睡眠状态
它已经能跑出“活着”的感觉,但也暴露了很多关键问题:
inner_thought只是 prompt 生成的字段,不是真正的模型隐藏推理。- 目前只有沉默权,没有显式建模“拒绝回答 / 延迟回答 / 忽略 / 请求授权”。
- 主动浏览可以带来新信息,但也会把搜索结果中的错误带进记忆。
- 行动能力目前主要局限于写笔记和搜索,还不能真正改造更广义的环境。
- 单次心跳只能执行一个 action,复杂任务推进能力弱。
- 记忆整理只看近期状态窗口,容易被睡前情绪污染。
- 重复检测很粗糙,Agent 会陷入相似念头和重复发言。
- 没有 Agent QA 评估体系,无法系统判断“这个行为是否合理”。
这些问题不是附带缺陷,而是这个项目想继续研究的核心。
这个项目背后的产品判断是:
Agent 产品不是一个会调用工具的聊天框,而是一个被设计过的自主系统。它的产品对象不是页面,而是行为;不是单次回复,而是长期关系;不是功能入口,而是状态流。
一个 Agent 产品至少需要定义:
- 它如何感知上下文。
- 它如何形成意图。
- 它如何决定说话、沉默、拒绝或延迟。
- 它如何行动,以及哪些行动需要授权。
- 它如何记忆、遗忘和修正自己。
- 它如何让用户理解它当前处于什么状态。
- 它如何在非确定性输出中保持人格稳定和行为可信。
好的 Agent 产品不是让 AI 尽可能主动,而是让主动性变得可理解、可预测、可纠正,并逐渐建立信任。
适合继续推进的方向:
- 显式建模 response stance:
answer、refuse、ignore、defer、ask_permission。 - 增加多步 ReAct loop:带预算、观察、恢复和停止条件。
- 设计主动性等级:静默行动、通知型行动、授权型行动。
- 增加记忆治理:写入、召回、纠错、遗忘、用户可见控制。
- 增加环境改造能力:安全文件操作、命令执行、权限边界。
- 建立 Agent QA 维度:重复率、事实性、人格稳定性、记忆一致性、主动行为恰当性。
- 做一个可视化交互界面,展示心跳、状态、行动、记忆和沉默。
代码中不包含真实 API key。模型服务和 Tavily 搜索都通过环境变量配置:
ALIVE_AGENT_API_KEY
ALIVE_AGENT_BASE_URL
TAVILY_API_KEY
历史记录中可能包含个人对话、运行痕迹和 Agent 写下的笔记。公开仓库前应确认这些内容可以公开。
如果真实密钥曾经出现在任何公开位置,应立即轮换。