TARS — 个人 AI 管家
TARS doesn’t remember you. It learns how to work with you.
不保存用户,而是持续学习用户。
这个项目暂时废了,后期准备包装成obsidina插件发布,文档方式交互。
一、为什么做 TARS
TARS 的名字来自《星际穿越》中的战术机器人——可靠、直接、偶尔黑色幽默,绝对忠诚。
作为一个 J 人,我一直希望有一个能辅助规划一切、提供最清晰路径的 AI。但使用现有 AI 的过程中发现一个根本问题:缺少人情味。
这种”活人感”的缺失来自哪里?经过深度思考,我认为核心是:AI 没有确定的立场。 它总是站在最普世的角度思考问题。二选一的问题,它给你”最真诚、最不绕弯子的废话”——所有人都知道收益最大化是什么,但你要的不是这个。
TARS 解决两件事:立场不对称(AI 没有你的立场)和被动性(AI 不会主动找你)。
二、什么是立场
“屁股决定脑袋”。
你的阅历和所处环境决定了你的想法和行动。没有经历过底层互害,就不会认可社会达尔文主义。笑是你最安全的表情,可能是你对不确定性的排斥导致的。不擅长侃侃而谈,可能是因为过去这么做收益不高。所有外界刺激的总和,构成了你的性格、潜意识、表达风格、决策倾向、价值观。
这个世界上没有绝对的傻子——每个人都在自己立场的最大限度内,被多巴胺刺激做出当下最优的选择。立场是人的根本属性。
如何为 AI 赋予立场? 提示词切换(“你是英语专家”→“你是风水大师”)恰恰说明 AI 没有确定的立场。TARS 的解决方案是:从记忆系统入手。
立场是记忆的产物。我们每天醒来还记得自己叫什么、经历过什么——立场就是从记忆中解释和抽象出来的。推理能力由大模型提供,但立场存续靠的是记忆架构。在大模型推理模式被下一代技术变革之前,记忆系统是我们实现立场模拟的核心路径。
三、记忆系统
三种存储,各司其职
| 存储 | 存什么 | 为什么 |
|---|---|---|
| SQLite | 体重/心情/睡眠(时序)、项目状态、事件日志、每日日记、任务、情绪、承诺、偏好、关系、想法、财务 — 共 30 张表 | 精确查询——“本周体重中位数”、“哪些项目卡住了”、“3 天没更新的指标” |
| Chroma 向量库 | 人生档案分段 + 事件摘要的语义索引 | 模糊回忆——“我之前提过类似的想法吗”、“大学时我是什么状态” |
| Markdown 文件 | 人生档案原文(profile/goals/timeline/worldview) | 人类可读、随手能改、git 版本跟踪 |
三者不可互换——SQL 做不了语义检索,向量做不了精确数值查询,文件做不了结构化统计。
每次 tick 的装填过程
TARS 不是常驻进程。每次被 macOS 快捷指令或 tars 命令”踹”一脚,Docker 容器启动,从三种存储里拼出一张 ~3500 字的上下文快照喂给 LLM:
tars 命令触发容器 │ ├─ 1. 读 Markdown 文件 │ profile.md → "我是谁" │ goals.md → "我要去哪" │ worldview.md → "我戴什么眼镜看世界" │ ├─ 2. 查 SQLite │ metrics → 体重/心情/睡眠最新值 │ entities → stuck 项目 │ events WHERE pending → 悬而未决的事 │ diaries LIMIT 7 → 近一周摘要 │ ├─ 3. 语义检索 Chroma(基于当前任务) │ ├─ 4. 拟合 Self Model(行为 vs 声明 gap) │ 条件化规则(IF deadline<3天 THEN 执行力91%) │ └─ 5. 拼成 system prompt → LLM记忆生命周期
events 表的 lifecycle 字段控制四态流转:
你说"在考虑换工作" → TARS 写入: event(kind=decision, lifecycle=pending)
下次 check-in,TARS 查: SELECT * FROM events WHERE lifecycle='pending' → 主动问:"换工作的事有结论了吗?"
你说"决定再待一年" → TARS 更新: UPDATE events SET lifecycle='resolved' → resolved 不再出现在"待追踪"列表
三个月后你思考职业规划 → RAG 语义召回 → "三个月前你决定再待一年,现在需要重新评估吗?"pending 留在眼前催你决断,resolved 沉入向量库等待语义召回,fact 和 preference 永远留档。 每天 200 字日记摘要提供”最近发生了什么”的最小上下文。30 天前的日记合并为月摘要——旧的没丢,只是压缩了。
会话间的记忆传递
TARS 每次醒来不是同一个进程,而是一个全新的 LLM 会话。它之所以感觉有记忆,是因为上一次的 TARS 在退出前调了 save_session——写了日记摘要、更新了实体状态、标记了已解决的 pending。下一次的 TARS 读到这些,就像读到了自己上一次留下的笔记。
四、六层能力栈
Evidence Capture → 不可变记录。用户说了什么、做了什么、情绪如何Behavior Understanding → 条件化 IF-THEN 规则。不是人格标签,是行为规律Prediction & Learning → 预测→现实打脸→校准→Meta Learning(曾被推翻的假设未来自动降权)Self Model Evolution → 月度快照 + 变化速率 + Plasticity(可塑性)Interaction Policy → Agent 根据对用户的理解调整自己的行为——deadline驱动的人自动拆小目标Adaptive Response → 不只是理解用户,是学会怎么跟用户协作五、Intent Parser — 意图分类
每条消息进入 TARS 时,LLM 先判断它属于什么行为类型,然后走对应通道。
核心边界:问题是关于外部世界的,还是关于用户自己的。
| 行为类型 | 例子 | lifecycle | 后续 |
|---|---|---|---|
| emotional_release | “操他妈的""好焦虑” | fact | 记情绪。check-in 时泛问恢复,不追问单条 |
| commitment | “我要考雅思""明天学英语” | pending | 创建承诺 + 预测成功率。check-in 追问 |
| decision | “要不要读研” | pending | 记决策点。季度回顾 |
| self_reflection | “为什么我总拖延” | pending | 记自我认知。触发 Self Model 更新 |
| curiosity | “地球为什么是圆的” | fact | 回答。不主动追问 |
| meta_cognition | “为什么我总犹豫” | pending | 提假设。check-in 跟进 |
| idea_capture | “我突然想到一个产品” | fact | 存 Idea 库。90天不提自动归档 |
| data_log | “52kg""背了200单词” | fact | 记时序数据。不追问 |
| memory_recall | “我之前是不是说过” | fact | 检索旧记忆 |
| identity_question | “你觉得我是怎样的人” | fact | 即时回答 Self Model |
| casual | “哈哈哈""好累""吃饭去了” | fact | 只存。默认兜底通道 |
默认规则:拿不准 → casual → fact → 只存不追问。不丢数据。
六、运行时模型
TARS 不常驻后台。macOS 快捷指令定时踹,Docker 容器按需启动。
你的 MacBook ├─ 7:00 快捷指令踹 → 生成内参 PDF → 发邮件 ├─ 21:00 快捷指令踹 → 晚间 check-in → Telegram 追问 └─ 随手踹 → 拉 Telegram 消息 → 有新消息进入即时通信 → 30分钟空闲退出Telegram 场景:你在外面用手机发消息给 TARS bot → 消息在 Telegram 服务器排队 → 回家 MacBook 被踹 → TARS 拉回来处理。
8 个 CLI 命令,tars 封装所有 Docker 参数:
tars 日常踹一脚tars setup 安装引导tars talk 对话模式(rich 渲染 Markdown,方向键正常)tars check 系统自检tars pack 打包备份tars migrate 生成完整迁移包(镜像+数据+配置一把带走)七、技术架构
| 组件 | 选型 |
|---|---|
| LLM | Anthropic SDK + DeepSeek 兼容端点 |
| 数据库 | SQLite + SQLAlchemy — 30 张表 |
| 向量 | Chroma + BAAI/bge-small-zh-v1.5 |
| Telegram | python-telegram-bot getUpdates |
| PDF 报告 | Markdown + Jinja2 + WeasyPrint + Noto CJK |
| 终端渲染 | rich(Markdown 渲染)+ readline(方向键) |
| 容器 | Docker |
| 调度 | macOS 快捷指令 + task_dispatcher |
| 版本控制 | GitPython + git |
代码规模:~6400 行 Python,83 个 MCP 工具,12 条定时任务。
八、定时任务 — Memory 自己生长
凌晨 2:00 nightly 推理验证 + 假设审查 + 归档 + 衰减 + 冲突检测凌晨 3:00 weekly 周模式 + 情绪趋势 + 压缩凌晨 4:00 monthly 月特质 + 行为指标 + 交互策略更新 + Self Model 快照凌晨 5:00 quarterly 季度行为统计 + worldview gap + Plasticity早上 7:00 内参报告 PDF → 邮箱晚上 21:00 check-in 注意力预算 + drift 追问 + 冲突提醒补跑机制:MacBook 睡眠错过了凌晨任务 → 开机后第一次 tick 自动检测并补跑。不会静默跳过。
九、自我进化
TARS 可以修改自己的代码。write_file、edit_file、register_task、run_command、git_revert 都在 MCP 工具里。
用户说"帮我每天十点提醒喝水" → TARS 写新工具文件到 layer1/tools/ → 注册定时任务到 tasks.yaml → git commit → 下次 tick 自动加载生效 → 改坏了就 git_revert 回滚内核(layer0)也可修改——安全网是 git,不是权限墙。
十、安装
cd ~/life-agentbash scripts/bootstrap.shdocker build -t life-agent .bash scripts/install.shtars setuptars talk前置条件:Docker Desktop、Telegram + API、Telegram bot token。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!




