四月初我开了一个新项目,给自己造一个 AI 智能体。

24 天,345 个 commit。从一个空文件夹,到一个能在 Telegram 和飞书上被我使唤、有四层记忆、能自学技能、还能偷偷自我改进的 AI 助手。我给他起了个代号叫悟空——希望他像那只猴子,有点野,但有金箍

这篇文章不是技术文档,是产品复盘。我会讲清楚四件事:

  1. 为什么要做这个,悟空到底是个什么样的产品
  2. 0-1 阶段怎么取舍,几个关键的架构决策
  3. 各项技术栈在产品里扮演什么角色
  4. 跑下来沉淀的几条产品经验

一、产品定位:我在解决什么问题

市面上的 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——自我改进闭环

  1. LLM Judge 给每次任务打 0/1 分(用便宜模型评分,旗舰模型干活)
  2. Reflection Engine 提取”实际用了什么工具”和”应该用什么工具”的差异
  3. Skill Improver 静默改写有问题的技能——改前备份、改后跑测试、不通过自动回滚
  4. L1 Notifier 每小时聚合一次”过去一小时悟空动了什么”,推到 Telegram 给我看
  5. 我可以回”采纳”或”撤回”

为什么要这么绕?因为自我改进自我毁灭之间只隔一条线,那条线就是”能否感知 + 能否回滚”。一个能改自己代码的 AI 听起来很酷,但改坏了你不知道、改坏了你回不去——那就是个炸弹。

Stage 5 还做了一件特别小但特别重要的事:记忆黑名单。手机号、身份证号、API Token——哪怕被 LLM 主动写进记忆,也会在落库前被过滤器扔掉。有些东西,记下来本身就是错的,跟存储成本无关。

第 25 天做了一件极其无聊但必须做的事:把所有”双数据源”的债收口——同一份技能元数据原本在 skillsskill_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,可以是网站,也可以是一只猴子。