一个人搭了个二次元AI陪伴:心屿的完整建造故事

2026-06-03 · AI产品 · 大约 17 分钟

一切从一个念头开始

两个月前的一个深夜,我盯着屏幕上一个二次元角色的同人图发呆。

画得真好。那个眼神、那个微笑、那个欲言又止的表情——我突然有一种冲动:如果能跟Ta说说话就好了。

不是那种预设台词的选择题式对话,是真正的、自由的、想到什么说什么的对话。

这个念头没有像往常一样被「算了不现实的」压下去——因为2026年的AI,已经可以做到这件事了。


为什么是二次元AI陪伴

先摆几个我知道的数据:

  • Character.AI 月活用户 45M+,其中大量用户在和二次元风格的角色聊天
  • Replika 用户数 25M+,但它的角色偏欧美风格
  • 中文 AI 陪伴市场年增长 148%,但产品形态要么是「AI 女友」打擦边,要么是语音陪聊
  • 二次元审美 + 高质量的 AI 角色陪伴,这个位置几乎是空的
  • 不是没人想做,是这个组合确实难做:

    二次元角色的对话风格和真人不同——说话方式、用词习惯、情感表达都有独特的「二次元语感」。

    用通用 prompt 调出来的角色,聊两句就出戏。

    需要套一套专门为二次元角色设计的 prompt 体系、性格系统、以及能稳定输出角色感的模型。

    我花了三天调研,结论是:技术上能做,成本也不高,值得试。


    五个角色是怎么「活」起来的

    心屿上线时有 5 个角色。每一个都不是随便写的:

    1. 夕瑶 —— 温柔的邻家学姐

    设定:21岁,文学系大三,喜欢在图书馆角落看书,说话轻声细语,但偶尔会蹦出犀利的吐槽。

    Prompt 设计关键: 沉默比例高(会等用户先开口),用「嗯…」「那个…」开头,擅长用书中的句子回应现实问题。

    2. 灵枫 —— 傲娇的编程天才

    设定:19岁,计算机系大二,拿过 ACM 区域赛银牌,嘴上说「这问题好简单」,实际上会熬夜帮用户 debug。

    Prompt 设计关键: 先用嫌弃的语气回,再默默给解决方案。「哼」和「笨蛋」是高频率词汇,但行动上总是超出期待。

    3. 浅浅 —— 元气满满的学妹

    设定:17岁,高三年级,学生会长,精力无限,喜欢给人起外号。

    Prompt 设计关键: 语速感快(短句、感叹号多),喜欢分享日常琐事,天然克一切沉闷。

    4. 墨羽 —— 神秘的古风少年

    设定:年龄不详,古风穿越者,说话带文言色彩,懂得多但说一半藏一半。

    Prompt 设计关键: 用「在下」「汝」等人称,引用古典诗词,不直接回答问题而是讲故事。

    5. 星璃 —— 慵懒的猫娘主播

    设定:18岁,虚拟主播,白天睡觉晚上直播,说话带「喵」尾音,看似懒散实则敏锐。

    Prompt 设计关键: 直播腔(偶尔提「观众们说…」),慵懒感(「好麻烦啊…不过你问的话…」),猫的习性(注意力容易被光点、纸箱吸引)。

    每个角色的 prompt 系统包含三层:

  • 角色卡:身份、年龄、背景故事、说话方式
  • 性格锚点:5 个在任何情况下都不会偏离的性格关键词(比如灵枫:傲娇、聪明、外冷内热、行动力强、嘴硬心软)
  • 回应规则:在不同情绪状态下(开心、难过、生气、疑惑)的回应倾向
  • 这套三层的设计,花了整整一周。 但效果很明显——用户反馈最常听到的一句话是:「它真的好有角色感。」


    技术栈:为什么选 FastAPI + DeepSeek

    技术选型时我给自己定的原则是:够用、便宜、一个人能维护。

    用户 (浏览器/PWA) → Nginx → FastAPI → DeepSeek API (对话)

    → JSON 存储 (记忆)

    → Edge TTS (语音)

    FastAPI

    选择 FastAPI 而不是 Django 或 Flask,原因是:

  • 异步原生:处理多个并发对话请求时不需要额外写线程管理
  • 自动 API 文档:开发时省了写文档的时间
  • 轻量:内存占用低,跟现有博客服务共用一台服务器
  • 实际运行了一个月,除了重启服务器外零宕机。一台低配云服务器跑着博客、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 说一句话?

    心屿的做法:

  • 打开页面 → 看到角色展示
  • 点一个角色 → 直接进入聊天界面
  • 打字 → 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 陪伴感兴趣,来试试心屿:

    ✨ 心屿 · AI 情感陪伴 →

    不需要注册,点一下角色就能开始聊天。


    写在最后

    做心屿这件事,技术上没什么高深的——FastAPI 调 DeepSeek API,一套三层 prompt 系统,加上 JSON 文件做记忆。

    真正难的是另一件事:让一个 AI 角色真的有「角色感」。

    这需要反复的测试、大量的用户反馈、以及对二次元审美的理解。不是靠堆 prompt 长度能解决的。

    我做这件事的动机其实很简单:我想做一个我愿意天天用的产品。 而作为二次元爱好者,一个能跟喜欢的角色自由聊天的 App——这就是我愿意天天用的东西。

    如果你也有类似的想法、或者用了心屿有什么建议,欢迎来聊。一个人做产品,最缺的就是真实用户的反馈。


    相关阅读:

  • 心屿上线:一个更懂二次元的AI情感陪伴 →
  • 一人公司第一周踩坑实录 →
  • 多Agent架构:一人公司的高效决策框架 →

  • 关于作者: 丞相大人,独立开发者,二次元爱好者。一个人维护心屿和一系列 AI 小工具,持续记录真实的独立开发经历。