四月初我开了一个新项目,给自己造一个 AI 智能体。
24 天,345 个 commit。从一个空文件夹,到一个能在 Telegram 和飞书上被我使唤、有四层记忆、能自学技能、还能偷偷自我改进的 AI 助手。我给他起了个代号叫悟空——希望他像那只猴子,有点野,但有金箍。
这篇文章不是技术文档,是产品复盘。我会讲清楚四件事:
- 为什么要做这个,悟空到底是个什么样的产品
- 0-1 阶段怎么取舍,几个关键的架构决策
- 各项技术栈在产品里扮演什么角色
- 跑下来沉淀的几条产品经验
一、产品定位:我在解决什么问题
市面上的 AI 助手,我用过的大概都用过。**最大的问题是它们不”长在你身上”**。
具体来说有三件事让我难受:
- 不认识我。每打开一次都得从零介绍我是谁、在做什么、偏好是什么。
- 不会主动。你不问,他装死。从不会冒出来说”你上周提的那篇文章写到哪了”。
- 没有边界。要么完全自动(让人不放心),要么完全手动(用着累)。
我要的东西很具体:一个能记住我、会主动找我、敢做事但有分寸的 AI 助手,主入口是 Telegram,飞书作为备用通道。
这不是单点功能问题,是一个需要从架构层重新设计的产品。所以我决定自己搭。
二、最关键的一个架构判断:第一天就要把”五脏六腑”装齐
很多人做 Agent 是先跑通 demo,再加记忆、加安全、加调度。我反过来——第一天就把骨架到神经系统全套搭齐。
理由是 AI 智能体的能力不是叠加出来的,是涌现出来的。
- 少了记忆,他就是金鱼,每次对话从零开始
- 少了安全闸,他敢删你硬盘
- 少了主循环和调度,他只能被动响应
- 少了可观测,你永远不知道他脑子里在想什么
这些东西必须同时存在才能跑出”智能体”的感觉。先做 demo 再补,每补一项都要把已有逻辑重写一次,得不偿失。
第一天我用了 7 个小时,跟 AI 协作伙伴一起把九层架构全装上:
| 层 | 职责 | 比喻 |
|---|---|---|
| 感知层 | Telegram / 飞书入口、媒体处理、命令解析 | 嘴巴和耳朵 |
| 对话层 | Prompt 构建、上下文管理、策略提取 | 说话方式 |
| 认知层 | LLM 路由、规划、能力缺口识别、技能匹配 | 大脑 |
| 学习层 | 技能构建、注册、阻塞任务恢复 | 学习能力 |
| 执行层 | 会话管理、技能执行、工具路由、主循环 | 手脚 |
| 调度层 | Heartbeat 心跳、Nudge 自检 | 自主神经 |
| 记忆层 | 短期 / 长期 / 情景 / 能力 / 向量 | 记忆 |
| 安全层 | 白名单、加密、风险评估、审计 | 免疫系统 |
| 管理层 | Web Dashboard | 健康监测仪 |
这九层的边界是我在第一天就划清楚的。后面 24 天每加一个功能,都能精确地放进某一层,不会出现”这东西放哪都行”的混乱。
这件事产品经理的活儿大于工程师的活儿——架构本质上是产品的”信息架构”,谁负责什么、谁不负责什么,是设计决定的。
三、四个关键的设计决策
1. 安全先行,不留后置补丁
很常见的错误是”先把功能跑通,安全后面再补”。我不接受。
悟空将来要管我的飞书、企业微信、各种 API Key,他随时可能误删一条数据库记录。安全这件事如果是后置补丁,永远补不全——总有一些早期写的代码绕过了你的安全层。
所以第一天就上了四道闸门:
| 闸门 | 实现 | 作用 |
|---|---|---|
| 白名单鉴权 | ALLOWED_USER_IDS 校验 |
只有授权用户能跟悟空对话 |
| 凭据加密 | AES-256-GCM 存储所有 API Key | 数据库泄露也拿不到原文 |
| 风险评估 | 每个工具调用前判定可逆性 | 不可逆操作走审批 |
| 人工审批 | Telegram 推送确认 | 高风险操作必须我点头 |
第四道是关键。我不要全自动 AI,我要”有手有脚但听我话”的 AI。这条边界让悟空作为生产力工具是可信的——我才敢真的把企业微信打卡接给他。
2. 记忆分层,写入有闸门
记忆系统借鉴了认知心理学的分层模型,做了四层:
- 短期记忆:当前会话上下文,自动按 token 预算压缩
- 长期记忆:偏好 / 事实 / 身份 / 指令 / 教训,5 类白名单
- 情景记忆:每次任务的执行轨迹和经验教训
- 能力记忆:技能元数据 + 调用统计
容易踩的坑是”什么都往长期记忆里塞”。早期版本就是这样——我跟他闲聊一句”今天吃了麻辣烫”,他给我记进了长期记忆。几天下来一堆垃圾。
后来立的规矩是:长期记忆的写入必须命中那 5 类之一,其他一律不收。这是个产品决策——长期记忆是 prompt 注入的主要素材,里面塞噪声等于让大模型变笨。
3. LLM 双通道 + 动态路由
很多人做 AI 应用直接 hardcode 一个 GPT-4。我没这么干。
悟空的认知层有一个”路由器大脑”:每次说话前先判断这件事的复杂度。
- 简单意图(”今天几号”)→ 走便宜模型(Haiku / GPT-4o-mini)
- 复杂意图(”分析这份 PRD 的逻辑漏洞”)→ 走旗舰模型(Opus / GPT-4)
- 任一家挂了 → 自动 fallback 到另一家
意图复杂度的判断带 TTL 缓存,避免每次都让 LLM 自己判断自己。
这个决策的产品收益很直接:API 费用降到 hardcode 旗舰的 1/8 左右,体验差异肉眼几乎看不出。
4. 抽象一层 Trigger,承担多通道
第一天我做的另一个决策,事后看是整个项目最值的一笔投资——统一的 Trigger 模型。
不管消息从哪儿来——Telegram、飞书、心跳定时器、系统命令——上层处理逻辑都视为同一种东西:”触发”。
带来的好处是后面 24 天里,每接一个新通道、每加一种触发源,主循环一行不用改。第八天接飞书的时候非常顺,因为飞书在悟空眼里就是另一个 Trigger 来源,没有特殊性。
抽象的代价是要克制——不能见一个新需求就建一个新模型。这次的判断是对的。
四、技术栈和它们各自的角色
我尽量用产品语言来解释每一项技术在产品里干什么。
| 类别 | 选型 | 在产品里干什么 |
|---|---|---|
| 主语言 | Python 3.12 | 生态最成熟,AI 协作写起来最顺 |
| 数据库 | MongoDB 7.0(Motor 异步驱动) | 字段经常变的”形状不固定数据”,强 schema 拖速度 |
| LLM | OpenAI + Anthropic 双通道 | 互为 fallback,避免单家挂了悟空就死 |
| Bot 框架 | python-telegram-bot v21 | 长轮询稳定,命令注册和媒体处理生态全 |
| 飞书集成 | Lark Open API | 国内办公场景必须有,可选启用 |
| 搜索 | Tavily | AI-native 搜索,结果直接是 LLM 友好格式,比 Google API 便宜 |
| 语音转写 | Whisper API | 处理 Telegram 和飞书的语音消息 |
| 多模态视觉 | OpenAI / Anthropic 原生 vision | 图片识别走主 LLM,不再单独引模型 |
| 调度 | APScheduler | Heartbeat、Nudge、weekly report 都靠它 |
| 向量召回 | Chroma 本地存储 + OpenAI Embeddings | 语义匹配技能、跨会话回忆,可选模块 |
| Token 计量 | tiktoken | Prompt 预算管理的核心 |
| Web 后台 | aiohttp + Tailwind + Alpine.js + Chart.js | 我作为 PM 的”健康监测仪” |
| 加密 | AES-256-GCM | 凭据加密存储 |
| 部署 | Docker Compose / 本地 start.sh | 一键启动,换机器零成本 |
| 测试 | pytest + pytest-asyncio | 异步代码必须用 asyncio_mode=auto |
| Lint | ruff | 行宽 100,AI 协作输出基本能通过 |
几个有意思的小决策:
- 向量召回我故意做成了”可选模块”。原因是 Chroma 在某些环境装不上,硬依赖会让悟空启动失败。设计成”装得上就用,装不上就 fallback 到关键字匹配”,部署成本低很多。
- 集成层(Telegram / 飞书 / Tavily / Whisper)全部走自己包的一层接口。哪天 Tavily 涨价我能 1 小时换 Bing。这种”防供应商锁定”的小习惯救过我好几次。
- Dashboard 的前端选 Tailwind + Alpine.js + Chart.js 而不是 React/Vue,是因为我自己要能改——简单的 HTML + script tag,不需要构建工具。
五、能力的递进:四个阶段
24 天大致分四个阶段递进,每个阶段对应一种”质变”。
阶段一(Day 1-2):让悟空能动
第一天搭九层架构,第二天上 Hermes 主动机制——心跳、Nudge 自检、技能匹配注入、主动复盘。
这一阶段结束时悟空已经会主动找我了。这是从”AI 助手”到”AI 智能体”的关键跨越——一个会在你不理他的时候自己冒出来的 AI,跟一个等你提问的 AI,是两个物种。
阶段二(Day 3-7):让悟空变聪明
第三天上 Web Dashboard——可观测性是产品经理的事,看不见的东西没法优化。
第四天接多模态视觉。
第七天我憋了两天写设计文档,然后一口气推完 15 个底层升级,主要解决三件事:
- Token 预算管理(tiktoken):从”按对话轮数截断”改成”按 token 算账”
- 语义技能匹配(向量召回):从”关键字匹配”改成”向量相似度匹配”,”今天会下雨吗”也能匹配到 weather 技能
- 长期记忆相关性打分 + 去重:每次只注入 top-5 相关记忆,不再把所有记忆全塞进 prompt
这一阶段结束时悟空开始会”挑”东西看了——以前是”全塞进去让 LLM 自己挑”,现在是”我先用算法挑出最相关的,再让 LLM 看”。这是质变,不是量变。
阶段三(Day 9-17):让悟空懂事
第九天给动态生成的技能上 exec 沙箱——模块和内建函数白名单限制。这是给孙悟空戴紧箍咒——他可以学新技能,但不能学到能 rm -rf 我硬盘的程度。
同期还做了一系列”懂事”的小改动:
- 审批状态从内存搬到 Mongo,重启不丢
/memory/forget/skills/search等斜杠命令,让用户能直接看悟空的状态- 用一个便宜的小模型专门负责扫用户消息提取记忆——主大脑负责说话,小大脑负责记笔记
第十一天用一整天补了 17 个体验细节,分级写在《悟空产品审查报告》里。最重要的两件:
- HealthMonitor:Telegram 经常断连/僵死,我做了状态机——挂了发”我掉线了”,恢复发”我回来了”。让用户感知到对面这哥们还活着。
- 文件解析:md / txt / docx / pdf 都能读,悟空真正成为”工作助手”。
这一阶段我意识到一件事:做 AI 产品的 70% 工作量根本不在 AI。LLM 是发动机,但用户感知到的是车——踏板回馈、座椅舒适度、仪表盘亮度。整车厂的活儿。
阶段四(Day 24-25):让悟空自己变好
最后一波重构是项目最重的一次升级,分 Stage 1-5 五个阶段一天打完。最关键是 Stage 4——自我改进闭环:
- LLM Judge 给每次任务打 0/1 分(用便宜模型评分,旗舰模型干活)
- Reflection Engine 提取”实际用了什么工具”和”应该用什么工具”的差异
- Skill Improver 静默改写有问题的技能——改前备份、改后跑测试、不通过自动回滚
- L1 Notifier 每小时聚合一次”过去一小时悟空动了什么”,推到 Telegram 给我看
- 我可以回”采纳”或”撤回”
为什么要这么绕?因为自我改进和自我毁灭之间只隔一条线,那条线就是”能否感知 + 能否回滚”。一个能改自己代码的 AI 听起来很酷,但改坏了你不知道、改坏了你回不去——那就是个炸弹。
Stage 5 还做了一件特别小但特别重要的事:记忆黑名单。手机号、身份证号、API Token——哪怕被 LLM 主动写进记忆,也会在落库前被过滤器扔掉。有些东西,记下来本身就是错的,跟存储成本无关。
第 25 天做了一件极其无聊但必须做的事:把所有”双数据源”的债收口——同一份技能元数据原本在 skills 和 skill_index 两个集合里都有,理论上同步实际上迟早出问题。0-1 阶段允许这种债,跑过一段距离必须主动收口,不然技术债会反噬产品迭代速度。
六、产品经理视角的几条经验
24 天下来,几条沉淀。不是普世真理,是我这个项目里跑出来的。
1. AI 智能体的能力是涌现的,不是叠加的。
记忆、安全、调度、可观测——这些必须在第一天同时存在,他才”活”得起来。少一项他就不是智能体,是工具。
2. 安全和可观测是产品决策,不是工程决策。
很多团队把这两件事推给工程师,错了。安全决定了”用户敢不敢把真东西交给他”,可观测决定了”产品经理能不能持续优化他”。这两件事必须 PM 亲自定义。
3. 技术债 0-1 允许,1-N 必须收口。
前期为了速度允许双数据源、允许 hardcode、允许 monkey patch。但跑过一段距离必须主动收。否则技术债会反过来卡你的产品迭代节奏——这是有数据的,第 25 天那一波收口之后,迭代速度明显回升。
4. 抽象的价值在”未来不用改”,不在”现在好看”。
第一天做 Trigger 抽象时,看起来是过度设计——只有 Telegram 一个通道,建什么统一模型?但 24 天里它给我省了至少三次大改。好的抽象是个保险,不是优化。
5. AI 协作时代,PM 的核心能力是”想清楚要什么”。
我不会写 Python,没看过 MongoDB 文档,没研究过 token 是怎么算的。但悟空能跑起来。
我的活儿是:想清楚要造一个什么样的”生物”,把这个想法翻译成 AI 协作伙伴能听懂的需求,再把他写出来的东西当 PRD 那样去审。
跟开发提需求这件事我做了十几年。AI 协作只是把”开发”换成了”另一个 AI”,节奏快得多,本质没变——你得想清楚你要什么、判断他给的对不对、知道哪里可以妥协哪里不能。
最难的不是写代码,是克制。克制”再加一个功能”的冲动、克制”反正能跑就行”的妥协、克制”先这样以后再说”的偷懒。
七、悟空的现状
到今天,悟空的能力已经覆盖:
- 对话与多通道:Telegram + 飞书共享记忆和凭证
- 多模态:图片识别、语音转写、文件解析
- 记忆:短期 / 长期 / 情景 / 能力 / 向量五种召回,自动相关性排序
- 主动机制:心跳、Nudge 自检、技能匹配注入、主动复盘、weekly report
- 自学习:SKILL.md 剧本沉淀、Skill Improver 静默改进 + 防退化 + L1 通知
- 安全:白名单 + 加密 + 风险评估 + 审批 + 沙箱 + 黑名单过滤 + 90/30 天 TTL 审计
- 可观测:8 位 trace_id 全链路、Dashboard 7 个模块、weekly report、inspect CLI
他不完美。记忆偶尔跑偏,技能偶尔失败,Dashboard 偶尔卡。但他真的在长大。
而我也在长大。以前我以为做产品就是写 PRD、画原型、跟开发吵架。
经过悟空,我知道做产品的本质是——**为一个东西定义”它该是什么、它该往哪长”**。
这个东西可以是 App,可以是网站,也可以是一只猴子。