Selected work / Angel

我把一次聊天,做成了一个持续存在的世界

Angel 是一套独立设计与开发的 AI 角色陪伴 PWA。

Angel 的手机主屏幕
从概念到上线产品、交互、前端、后端与部署均独立完成
18个完整使用章节
双端Vercel 与 Cloudflare 部署
PWA安装、离线能力与后台推送

我想解决的,不是缺少一个聊天工具。

真正的问题是传统对话产品无法持续维护角色身份、关系状态和共同经历。

目标是让角色在不同时间、不同场景里,仍然像同一个人。

用户不只与角色聊天,还会看动态、参加社区、送礼物、发起邀约和进入线下见面。这些互动必须共享同一段关系历史。

完成标准

用户能够从创建角色开始,完成对话、记忆沉淀、跨场景互动与线下见面;关闭页面后再次进入,关系状态仍然连续。

聊天不难,难的是让关系连续。

普通聊天机器人只处理眼前一句话。Angel 需要记得角色是谁、关系走到哪里,以及之前发生过什么。

核心问题不是“怎么回复”,而是“为什么此刻会这样回复”。

我把角色、世界、记忆、关系和时间组织成同一个上下文系统。

角色一致性

角色卡定义身份与表达边界,世界书按关键词和作用域补充背景。

关系连续性

重要事件沉淀为长期记忆,并在后续聊天和线下互动中被重新调用。

不是给聊天框加功能,而是建立一套共同生活的系统。

聊天、朋友圈、论坛、微博与线下见面共享同一套角色状态,行为不再彼此割裂。

角色卡
定义身份、性格、经历与关系基础。
世界书
按对话内容动态加载背景知识与规则。
关系与记忆
把关键互动转化为下一次回应的依据。
Angel 社区功能界面
Angel 角色卡库界面
Angel 世界书管理界面

一次回复背后,经历四次判断。

INPUT

理解当前场景

识别消息、时间、媒体与互动类型。

CONTEXT

组装有效上下文

加载角色、世界书、关系与相关记忆。

GENERATE

约束模型输出

控制文风、长度、格式与留白策略。

UPDATE

写回关系状态

保存消息、候选记忆与新的互动结果。

界面背后,是五层协作。

每一层只处理自己的问题,让角色体验、数据和模型调用可以分别演进。

体验与状态层

手机主屏承载多个应用,但所有应用读取统一账号、角色和时间状态。

输入
文字、图片、语音、通话、红包与邀约。
场景
聊天、朋友圈、社区、微博、外卖和线下见面。
状态
关系、钱包、时间、待回复消息和互动通知。

上下文层

根据当前场景选择角色卡、命中的世界书、近期对话、长期记忆和关系状态,避免把全部历史无差别塞入模型。

模型网关

服务端读取已加密的 API 凭证,代理模型列表、流式对话和 TTS 请求,并兼容不同模型的返回格式。

本地与云端存储

IndexedDB 承担本机读写,Neon 或 D1 保存账号数据,Vercel Blob 或 R2 保存图片;导出与恢复提供迁移能力。

后台触达

Service Worker 保存浏览器订阅,定时任务触发 Web Push。用户点击通知后回到 Angel,再由角色结合最近对话判断是否联系。

从第一次认识,到一次完整见面。

我用一条连续体验验证系统,而不是分别验收孤立功能。

CREATE

创建角色

导入或新建角色卡,确定身份、经历、性格和表达方式。

TALK

建立关系

文字、图片、语音、通话和朋友圈逐步形成共同经历。

REMEMBER

沉淀记忆

关键事件进入长期记忆,关系变化作为候选状态等待确认。

MEET

进入线下

邀约同步到见面模式,结束后生成记录并写回后续聊天。

核心模块如何共同工作。

功能并非简单并列,每个模块都会读取或写回角色状态。

聊天与多媒体

允许用户连续发送内容,再单独请求角色回复,保留真实聊天节奏。

输入形式
文字、图片、语音和通话
回复控制
流式输出、温度、长度和留白

角色与世界书

角色卡确定稳定身份,世界书按关键词、作用域和优先级加载补充规则。

兼容能力
SillyTavern JSON 与 PNG 卡片
触发方式
始终、关键词和二级关键词

关系与长期记忆

系统从互动中生成记忆和关系候选,经确认后写入长期状态。

降低误写
候选内容可编辑、确认或跳过
重新调用
聊天和见面读取相关记忆

跨场景内容

论坛、微博、朋友圈和外卖等内容使用相同角色资料与当前模型生成。

一致性
共享人物关系和现实时间
成本控制
由用户主动触发内容刷新

沉浸感之外,也要对真实数据负责。

Angel 保存长期对话、人物资料和用户自己的 API 凭证。安全与可靠性不是附加功能。

账号隔离
聊天、角色、世界书、图片与设置按用户空间隔离。
凭证保护
API Key 由服务端加密保存,前端不再返回原始值。
失败透明
请求失败直接展示真实错误,不生成本地假回复。
数据可迁移
支持云端同步、完整导出、恢复与多窗口冲突控制。
开放模型接口
兼容 OpenAI 风格的模型列表、流式聊天与 TTS。
持续触达
使用 Service Worker、Web Push 与定时任务发送提醒。

三个影响体验的关键决策。

这些决定不显眼,但它们直接影响用户是否信任角色和系统。

发送消息与请求回复分开

用户可以连续发送多条消息,再主动让 AI 回复。对话节奏由用户掌控,也减少不必要的模型调用。

记忆先生成候选,再由用户确认

系统不把所有内容都写成长期事实,避免模型误判污染人物关系。

失败时不制造假成功

接口、存储或推送失败时直接展示真实原因,已经生成的文字与用户数据不会被静默覆盖。

Angel 新建聊天方式
技术组成 原生 Web + React Runtime、IndexedDB、Neon、Vercel Blob、Cloudflare D1/R2、Service Worker、Web Push、OpenAI 兼容 API

我学到的不是如何多做几个页面。

复杂产品真正困难的是让每个功能共享规则,同时让失败尽早暴露。下一步重点是补充自动化测试、演示数据与可观测性。