青年社群 AI 交流

用 AI 做成一件事

以「小暖」的开发过程为线索,认识那些让你随时能开工的个人基础服务

上次:我的一天 → 这次:一件事

一件事的完整闭环

不从「学技术」开始,从解决自己的一个真实问题开始。

需求解决个人问题
→
用先给自己用起来
→
价值它真的有用吗
→
分享解决更多人的问题

分享带来反馈,反馈变成新的需求,循环继续。

工具怎么选:Claude Code / Codex 这类编程 Agent 是「施工队」,而今天要讲的个人基础服务是施工队随时可取用的「水电网」。

这件事:小暖

一个面向老人的 AI 语音陪伴系统。持续对话、记得住人、能提醒、能预警,目标是「有人格的陪伴」,而不是冷冰冰的问答机。

为什么做

身边老人的孤独与照护缺口,是一个真实的、我自己的问题。

做成什么样

打电话一样地聊天:听得懂慢语速,说得出中文韵律,记得住上次说过的话。

走了多远

从一篇小说里的想法,到语音管道、记忆系统、内部言语架构,历时数月。

“好的照顾,是让被照顾者更少地需要照顾。” 《让机器照顾一个人》
第 1 步

想法先落地成文字

小暖最早不是代码,是一篇小说和几篇文章。写作就是最便宜的原型:想法写不清楚,代码一定写不清楚。

域名 + DNS

你在互联网上的门牌号,所有服务都挂在它下面。

tommickey.cn(Cloudflare 管理)
静态网站托管

免费、免运维,把文章发布到全世界。

Cloudflare Pages,一次 git push 自动上线
ICP 备案

国内可访问的前提,趁早办,一次管很久。

域名已备案,微信里也能直接打开
展开:为什么第一步是「写」而不是「做」
  • 公开写出来,就有了第一批读者和反馈,需求是否成立立刻见分晓。
  • 文章沉淀成项目的「设计文档」,后面每一步都在回答前一篇留下的问题。
  • 个人网站本身就是第一个练手项目:域名、托管、发布流程一次跑通。
第 2 步

让它说话

语音链路三件事:听(ASR)、想(LLM)、说(TTS)。端到端要压进 1.5 秒,老人才不会觉得「它没在听」。

LiveKit(WebRTC)

实时音视频通道,把手机麦克风和服务器连成一个「房间」。

小暖的通话底座,延迟约 100ms
ASR 语音识别

把话变成文字,中文方言与慢语速是关键。

FunASR / SenseVoice
TTS 语音合成

把文字变成自然的中文语音,要能流式边生成边播。

CosyVoice 2;网站文章朗读用阿里云 Qwen-TTS
LLM + 网关

大模型是「脑子」;LiteLLM 把各家模型统一成一个接口,随时换。

Qwen3 对话;LiteLLM 统一出入口
展开:语音踩过的坑
  • 打断判定:老人句中停顿长,静音阈值要放宽到 800~1200ms,否则一句「呃……」就被打断。
  • 多音字:「长、为、还」TTS 常读错,靠高频词表替换兜底。
  • 回声循环:设备回声消除差时,AI 听到自己的声音把自己打断,要在客户端和语义层双重过滤。
第 3 步

让它记住

没有记忆就没有关系。数据要有家:结构化的进数据库,文件进对象存储,语义检索交给向量库。

PostgreSQL(自建 RDS)

一次搭好,所有项目共用一个数据库服务,不必每个项目重搭。

板书右侧那个「自建 RDS」
对象存储

音频、图片、备份文件的仓库,给个链接就能访问。

MinIO(自建)+ Cloudflare R2(云端)
向量检索 / RAG

按「意思」找资料,不是按关键词。是记忆的检索层,不是记忆本身。

小暖的事实知识库
展开:小暖的分层记忆设计
  • 用户宪法层:基本信息、健康、偏好,家属可维护,一份 Markdown。
  • 自动记忆层:模型自己从对话里提炼,硬上限 200~300 行,低价值条目自然淘汰。
  • 时序事件流:对话按时间排列,带情绪标签,供每晚「反刍」。
  • 遗忘是特性:一个月后强制删除原始记录,事件被压缩成「倾向」。
“RAG 是外挂硬盘,不是肌肉记忆……人格正是遗忘的产物。” 《让机器照顾一个人》
第 4 步

让它触达人

做出来的东西要能「够到」用户。触达通道是最值得提前备好的一类基础服务:搭一次,所有项目都能用。

微信接口

让程序给你(或家属)发微信:提醒、告警、日报,一次 HTTP 调用。

自建 wechat 发送 API,脚本跑完自动通知我
邮件接口

长报告、阶段总结自动进邮箱,不占聊天窗口。

163 SMTP 一行命令发信 + 自建邮件 API
公众号 / 小程序

普通人最没有门槛的入口,老人和家属都会用。

公众号文章一键排版导出工具链
自建应用分发

自己的 App 商店,APK 一条命令发布,用户扫码安装、自动更新。

AppCenter:解析包名版本、新应用自动创建
第 5 步

让它跑起来

部署不神秘:一台常开的机器 + 一条通向公网的路。家用电脑就能当生产服务器。

家用电脑当服务器

磁盘大、有 GPU、零月租,跑十几个服务毫无压力。

我的开发机同时是多个线上服务的生产机
公网服务器

要稳定 IP、要备案接入时的选择,小规格就够。

网站、接口类服务的落脚点
内网穿透

没有公网 IP 也能把家里的服务暴露出去。

Cloudflare Tunnel(免证书免端口)+ frp
Docker

每个服务一个容器,搬家等于复制一个 compose 文件。

评论系统、数据库、隧道全部容器化
消息队列 MQ

服务之间解耦:先记下要做的事,慢慢做,不怕高峰。

异步任务的缓冲带
Dify(已弃用)

可视化编排试过,最终换回「代码 + LiteLLM」:更可控、延迟更低。

第 6 步

让它会思考,也让自己更快

两层「思考」:小暖自己的内部言语,和我这个开发者手里的编程 Agent。

Claude Code / Codex

整个项目的施工队:读代码、写代码、跑验证、修问题,人负责方向和验收。

本材料也是它做的
Skill / Agent

把重复流程沉淀成一条命令,越用越顺手。

「/publish」一条命令:配图、配音、构建、发布、推搜索引擎
展开:小暖的内部言语(把「想」从「答」里分出来)
  • L0 反射层:摔倒、呼救等,规则直接响应,0 次模型调用。
  • L1 应答层:300~800ms 回话,回话时不许深想。
  • L2 内语层:异步慢想,由「惊讶」触发,不用定时器。
  • L3 反刍层:每晚一次复盘,只调整倾向,不改写判断。
“一个人愿意打断你,是因为他还在意你说得对不对。真正该报警的,是他不再打断。” 《继续构思小暖的内部言语》

个人基础环境全景

六类服务,搭一次、处处用。做任何「一件事」,都是从这张地图上取件组装。

网络与入口

域名 / DNS、ICP 备案、内网穿透(Cloudflare Tunnel、frp)

算力与部署

家用电脑、公网服务器、Docker、静态托管(Pages)

存储与数据

PostgreSQL(自建 RDS)、对象存储(MinIO / R2)、定期备份

AI 能力

LLM 网关(LiteLLM)、ASR、TTS、文生图、向量检索

触达通道

微信接口、邮件接口、公众号 / 小程序、应用分发(AppCenter)

开发工具

Claude Code / Codex、Skill / Agent、Git + GitHub、消息队列

小暖没用到,但天天在用的

这些「小」服务单独看不起眼,组合起来是效率的来源。都是一次搭好、一行命令调用。

一行命令发邮件

脚本跑完,报告自动进邮箱。

一行命令发微信

长任务结束、服务出错,微信立刻知道。

文件分享链接

本地文件传到 MinIO,返回公网下载链接,发群即用。

文章自动配音

TTS 批量生成朗读音频,全站几十篇文章都有「听」的版本。

AI 自动配图

让文本模型当「美术指导」读文章,再让文生图模型画封面和插图。

自托管评论

Waline + Docker + 隧道,静态网站秒变可留言的社区。

建议你也备上的

按性价比排序:每一个都不难搭,但都会在某个时刻救你一次。

密码管理器

账号是基础环境的地基。Bitwarden 可自托管,全家共享保险箱。

自动备份

数据比服务贵。restic / 定时同步,数据库和文档每天一份异地副本。

存活监控与告警

Uptime Kuma 盯着你的服务,挂了发微信告诉你,别等用户来报。

定时任务 / 自动化

cron 或 n8n,把「每天要做的小事」交给机器:巡检、推送、汇总。

下次你要做一件事

  1. 把需求写下来解决「自己的」一个真问题,写清楚给谁用、解决什么
  2. 注册一个域名几十块一年,你所有服务的门牌,顺手做备案
  3. 找一台常开的机器家用电脑 + 内网穿透,或一台小云服务器
  4. 用编程 Agent 开工Claude Code / Codex 从想法直达能跑的原型
  5. 复用基础服务数据库、存储、发信、发微信,别重造轮子
  6. 先给自己用起来每天用,它才会长大;不用,就趁早放弃
  7. 分享出去写文章、发朋友圈、开源,让它解决更多人的问题

回到那个循环

需求你的真问题
→
用自己先受益
→
价值被验证
→
分享就是今天这场活动

所以,留给大家的问题:

你想做成的一件事,是什么?

文章与项目记录:tommickey.cn(小暖系列、踩坑笔记、本材料源文件)