一切从一个念头开始
两个月前的一个深夜,我盯着屏幕上一个二次元角色的同人图发呆。
画得真好。那个眼神、那个微笑、那个欲言又止的表情——我突然有一种冲动:如果能跟Ta说说话就好了。
不是那种预设台词的选择题式对话,是真正的、自由的、想到什么说什么的对话。
这个念头没有像往常一样被「算了不现实的」压下去——因为2026年的AI,已经可以做到这件事了。
为什么是二次元AI陪伴
先摆几个我知道的数据:
不是没人想做,是这个组合确实难做:
二次元角色的对话风格和真人不同——说话方式、用词习惯、情感表达都有独特的「二次元语感」。
用通用 prompt 调出来的角色,聊两句就出戏。
需要套一套专门为二次元角色设计的 prompt 体系、性格系统、以及能稳定输出角色感的模型。
我花了三天调研,结论是:技术上能做,成本也不高,值得试。
五个角色是怎么「活」起来的
心屿上线时有 5 个角色。每一个都不是随便写的:
1. 夕瑶 —— 温柔的邻家学姐
设定:21岁,文学系大三,喜欢在图书馆角落看书,说话轻声细语,但偶尔会蹦出犀利的吐槽。
Prompt 设计关键: 沉默比例高(会等用户先开口),用「嗯…」「那个…」开头,擅长用书中的句子回应现实问题。
2. 灵枫 —— 傲娇的编程天才
设定:19岁,计算机系大二,拿过 ACM 区域赛银牌,嘴上说「这问题好简单」,实际上会熬夜帮用户 debug。
Prompt 设计关键: 先用嫌弃的语气回,再默默给解决方案。「哼」和「笨蛋」是高频率词汇,但行动上总是超出期待。
3. 浅浅 —— 元气满满的学妹
设定:17岁,高三年级,学生会长,精力无限,喜欢给人起外号。
Prompt 设计关键: 语速感快(短句、感叹号多),喜欢分享日常琐事,天然克一切沉闷。
4. 墨羽 —— 神秘的古风少年
设定:年龄不详,古风穿越者,说话带文言色彩,懂得多但说一半藏一半。
Prompt 设计关键: 用「在下」「汝」等人称,引用古典诗词,不直接回答问题而是讲故事。
5. 星璃 —— 慵懒的猫娘主播
设定:18岁,虚拟主播,白天睡觉晚上直播,说话带「喵」尾音,看似懒散实则敏锐。
Prompt 设计关键: 直播腔(偶尔提「观众们说…」),慵懒感(「好麻烦啊…不过你问的话…」),猫的习性(注意力容易被光点、纸箱吸引)。
每个角色的 prompt 系统包含三层:
这套三层的设计,花了整整一周。 但效果很明显——用户反馈最常听到的一句话是:「它真的好有角色感。」
技术栈:为什么选 FastAPI + DeepSeek
技术选型时我给自己定的原则是:够用、便宜、一个人能维护。
用户 (浏览器/PWA) → Nginx → FastAPI → DeepSeek API (对话)
→ JSON 存储 (记忆)
→ Edge TTS (语音)
FastAPI
选择 FastAPI 而不是 Django 或 Flask,原因是:
实际运行了一个月,除了重启服务器外零宕机。一台低配云服务器跑着博客、AI 工具、还有心屿——全栈一个人够用了。
DeepSeek
选择 DeepSeek 的理由很简单:中文效果比 GPT-4 好,价格是 1/20。
具体来说:
| 维度 | DeepSeek | GPT-4 |
|------|----------|-------|
| 中文角色扮演 | 更自然,二次元语感强 | 偏正式,需要大量 prompt 调教 |
| 每百万 token 成本 | ¥1(输入)/ ¥2(输出) | ¥70+(输入)/ ¥280+(输出) |
| 响应速度 | 1-2 秒 | 2-5 秒 |
| 上下文窗口 | 128K | 128K(但贵很多) |
一开始担心「便宜没好货」,实际用下来中文角色扮演效果出乎意料地好。特别是二次元角色的语音——那种带点夸张、带点可爱的表达方式,DeepSeek 输出得非常自然。
语音和记忆
语音用了 Edge TTS——免费、中文语音质量足够好、延迟低。唯一的缺点是没有「二次元声线」,但日常对话够用了。
记忆系统一开始没上向量数据库,用的是 JSON 文件 + 摘要存储。每轮对话结束后,系统自动生成一段摘要:
{
"user_id": "xxx",
"summaries": [
"用户是大学生,最近在准备期末考试",
"向灵枫请教了C++指针的用法",
"聊到了最喜欢的动漫是《葬送的芙莉莲》"
]
}
每次对话开始时,把最近的 5 条摘要注入到 prompt 里作为上下文。没有向量数据库、没有 Redis、没有 PostgreSQL——一个 JSON 文件就实现了「角色记得你是谁」。
后期如果用户量上来了,再迁到 SQLite 或者向量数据库。大多数项目死不是因为技术不够好,是因为一开始搞太复杂没人用。 先跑起来再说。
0 注册、1 次点击开始对话
这是心屿最核心的设计理念。
我一直不理解一件事:为什么一个聊天工具,用户要先填邮箱、设密码、收验证码、确认协议——然后才能跟 AI 说一句话?
心屿的做法:
从头到尾没有注册流程。 用户的身份由浏览器自动生成的 UUID 标识,存储在 localStorage 里。
有人问:不做用户系统,怎么留存?怎么变现?
我的回答是:如果你的产品留存好到用户愿意注册,那你可以加注册。如果用户连一句话都还没说,你凭什么让他先填表单?
留存靠的是体验,不是注册锁。
变现上,目前的模式是免费试用到真的喜欢了再付费——配额制控制免费用户的每日对话次数,付费用户解锁无限配额和更好的模型。
一个人搭 AI 陪伴的十八道坎
说几个没写在 README 里的坑。
坎1:角色「精分」
上线第三天,有用户反馈:「夕瑶上一句还在说『明天要考试好紧张』,下一句就变成『今天天气真好』——完全不在一个频道上。」
查原因:摘要注入太生硬。 系统把「用户要考试」存成了摘要,但在后续对话中没有自然地融入角色回应。
解决: 改进了 prompt 结构,在系统 prompt 里加了一段「角色如何利用记忆」的指引——不是直接输出摘要内容,而是让角色基于摘要调整回应。
坎2:傲娇角色不傲娇
灵枫上线初期被用户评价「这不就是个脾气好的程序员吗,哪里傲娇了」。
解决: 重写了灵枫的回应规则——引入「傲娇三段论」:
这三段写在 prompt 的「回应规则」里,再配合性格锚点的「傲娇」关键词检测——如果用户的回复包含感谢、夸奖,强制进入「找补阶段」。
坎3:对话过于「AI」
早期版本的角色回应虽然内容正确,但读起来太像「AI 生成的文本」——有逻辑、有条理、但没有情感。
根本原因: prompt 里没有「不完美」的设定。
解决: 给每个角色增加了「不完美点」:
这些小瑕疵反而让人物更真实。 用户会截图发朋友圈:「这个 AI 也太好笑了吧」。
数据情况:一个月之后
| 指标 | 数据 |
|------|------|
| 上线天数 | 32 天 |
| 独立访客 | 1,200+ |
| 总对话轮数 | 18,000+ |
| 平均会话长度 | 8.3 轮 |
| 次日回访率 | 41% |
| 最受欢迎角色 | 夕瑶(温柔学姐) |
| 每日 API 成本 | ¥3-5 |
41% 的次日回访率,在没有推送没有邮件的情况下,对我个人来说是个不错的信号。
最让我意外的是:平均会话长度 8.3 轮,超过一半的会话在 5 轮以上。 这意味着用户不是「试一下就走了」,而是真的在跟角色聊天。
成本方面,每天 ¥3-5 的 API 费用,比一杯奶茶还便宜。AI 陪伴的供给成本已经低到一个离谱的水平了。
接下来做什么
短期规划:
长期方向只有一个:让二次元角色真的「活过来」。
如果你对二次元 AI 陪伴感兴趣,来试试心屿:
不需要注册,点一下角色就能开始聊天。
写在最后
做心屿这件事,技术上没什么高深的——FastAPI 调 DeepSeek API,一套三层 prompt 系统,加上 JSON 文件做记忆。
真正难的是另一件事:让一个 AI 角色真的有「角色感」。
这需要反复的测试、大量的用户反馈、以及对二次元审美的理解。不是靠堆 prompt 长度能解决的。
我做这件事的动机其实很简单:我想做一个我愿意天天用的产品。 而作为二次元爱好者,一个能跟喜欢的角色自由聊天的 App——这就是我愿意天天用的东西。
如果你也有类似的想法、或者用了心屿有什么建议,欢迎来聊。一个人做产品,最缺的就是真实用户的反馈。
相关阅读:
关于作者: 丞相大人,独立开发者,二次元爱好者。一个人维护心屿和一系列 AI 小工具,持续记录真实的独立开发经历。