角色聊天PPT说明书

给每一种性格,留一段自己的故事

角色聊天
使用说明书

选择朋友,写下人设,慢慢熟悉彼此。这里从第一次聊天讲到角色代码和换机备份。

30000字单条聊天 · 12000字角色人设

手机聊天实际界面,包含角色头像、快捷话题和输入区

十二位朋友,各有自己的性格

虚构角色暖暖
暖暖温柔亲密 · 女
虚构角色林晚
林晚成熟性感 · 女
虚构角色苏棠
苏棠甜美俏皮 · 女
虚构角色许知夏
许知夏开放洒脱 · 女
虚构角色叶清歌
叶清歌狂野热情 · 女
虚构角色零一
零一叛逆慢热 · 女
虚构角色陆沉
陆沉沉稳可靠 · 男
虚构角色小太阳
小太阳开朗暖心 · 男
虚构角色沈砚
沈砚安静体贴 · 男
虚构角色顾言
顾言温柔知性 · 男
虚构角色江屿
江屿阳光坦诚 · 男
虚构角色云舟
云舟温雅从容 · 男

预设头像为虚构成年人物。具体年龄和性格可点聊天顶部头像查看。

添加角色的固定入口

预设、表单和代码生成角色的分支流程
创建角色表单
表单创建,可从相册选择头像
手机角色代码编辑窗口
上传文件或直接编写,再生成角色

使用说明书

添加到手机桌面

iPhone / iPad:用 Safari 打开聊天首页,点分享 → 添加到主屏幕。安卓:在浏览器菜单中选择安装应用或添加到主屏幕。桌面名称为“角色聊天”,使用玫瑰粉对话心形图标,点开后进入独立聊天窗口。

已经添加过旧快捷方式的设备,可移除旧图标后重新添加。只移除桌面图标,保留浏览器中的网站数据。

第一次打开

输入区的“风格”默认是“成年情感”,适合成年角色的恋爱、约会、暧昧和情感交流。可以明确设置虚构的朋友、暧昧对象或恋人关系,让角色按人设接续场景。切换“日常聊天”后,以生活和兴趣交流为主。风格在当前设备保存,也随记忆备份保留。

打开网站后会看到当前角色的名字、头像和开场。手机左上角菜单可以打开角色中心,平板和电脑在足够宽的窗口直接显示角色列表。先选一个你喜欢的性格,点快捷话题,或者在输入框说一句自己的话。

一个自然的开场可以是:“我叫小禾,今天有点累,想安静聊一会。”角色会结合人设和你正在说的事接话。需要看完整设定时,点聊天顶部头像。不同角色的聊天记录分开保存,切换角色后仍可以回来接着聊。

页面中的角色是虚构AI角色,头像也是虚构成年人物人像。聊天风格尽量像日常消息,具体回复由模型生成。

选择适合你的性格

预设有6位女性、6位男性。暖暖温柔亲密,林晚成熟性感,苏棠俏皮,许知夏洒脱,叶清歌热情直接,零一慢热叛逆。男性中陆沉稳重,小太阳开朗,沈砚安静,顾言知性,江屿坦诚,云舟从容。

你可以试同一个话题,看哪一种表达让你舒服。例如告诉角色“今天不想听建议,陪我说两句就好”,或者“我想认真讨论这件事,多讲一点”。相处偏好可以逐步变化,角色会参考明确反馈,同时保留自己的性格。

预设快捷话题只是发送入口,并不是一套固定答复。点击后会把话题作为玩家消息交给真实聊天接口。

长文、短文与表情

输入区可以选择“随聊随回”“短一点”或“认真长聊”。随聊随回会按话题自然决定长度,短一点倾向一到两句,认真长聊给模型更大的输出空间。你在消息里明确要求故事、解释或详细内容时,也会启用长回复额度。

单条消息上限为30000字。这里的“字”按浏览器字符长度计数,部分表情占两个字符。长消息的正文和末尾都会发送到本站接口,不会在6000字处截断。聊天历史和备份也保存完整的本条内容。

长回复最多请求6000个模型token。token不是中文字数,模型也可能主动给出较短答复。请求“写一个完整故事,分自然段,结尾收住”比只说“长一点”更容易得到具体内容。若需要继续,可以说“接着刚才的故事,从最后一段继续”,并补上重要情节。

页面显示“正在生成回复”时正在等待真实模型。后台优先返回完整生成成功的答复,某条线路中断时仍尝试其他线路。长文完成需要更多时间,后台完整预算为90秒。普通聊天不会因为长文支持而延长默认等待。

点表情按钮打开面板,选择表情会插入输入框。可以只发表情,也可以与文字混用。“🥺 今天想被哄两句”“😂 这件事真的很好笑”都能给角色明确的情绪线索。角色使用表情的频率也可通过反馈调整。

玩家头像

点输入区旁边的玩家头像,会打开选择照片的入口。手机可选择相册,电脑可选择本地图片。图片会在浏览器里裁剪、压缩成方形头像,再更新聊天中玩家消息右侧的人像。

头像不要求填写网址。上传完成后,刷新页面仍会使用这张头像。照片数据保存在本机浏览器,并包含在记忆备份中。当前聊天接口不接收头像图片。

如果选择后没有更新,先确认文件能作为图片打开。过大的原始图片或不支持的图片格式可能无法解码,可以在相册里另存为JPEG或PNG再选。选择新图片会替换当前头像,旧聊天也会使用当前玩家头像。

用表单创建角色

角色中心点“创建新角色”,填写姓名、标签、开场和性格。头像可选预设人像,也可点相册按钮选择自己的图片。完成后点“创建角色”,新朋友会出现在“我的角色”中。

性格字段最多12000字,适合写较完整的生活背景、表达习惯、兴趣与相处方式。不要只堆“温柔”“听话”等词,可以写具体行为,例如:“先听对方讲完,不急着劝。熟悉之后愿意主动问候,对方说少问问题时会放缓追问。”

让角色更有区别的写法,是给她或他一个自己的兴趣、一个说话习惯,以及遇到不同情绪时的反应。背景、开场和说话方式尽量一致。设定中的角色必须是成年人。

在“我的角色”列表点“编辑”,可以修改姓名、人设和头像;点聊天顶部头像后也可进入“编辑角色”或“编辑代码”。代码框自动换行,点“清空代码”后可粘贴整份自定义配置。修改后点“保存修改”,刷新后仍会保留。

表单创建的角色保存在当前设备。删除自建角色会删除这个角色的聊天与相处记忆,操作前应保存备份。预设角色由站点提供。

上传文件或直接编写角色代码

固定入口为“角色中心 → 上传角色代码”。你以后添加新角色都从这里操作,不需要寻找网页文件或修改聊天逻辑。

已经有角色文件

  1. 打开上传角色代码。
  2. 点上传文件。
  3. 从手机“文件”或电脑目录选择JSON/JS角色配置。
  4. 文件会载入代码框,检查或修改后点“生成角色”。如果要修改已有角色,先在“操作角色”中选择她或他,再点“保存修改”。

单个文件最多5MiB,一次可导入1到24个角色。头像可以先用仓库内的预设路径。文件中的代码不会执行,它只能描述角色数据。

想自己写

  1. 打开上传角色代码。
  2. 点清空代码后粘贴自己的配置,或使用模板后修改。
  3. 填写name、personality等字段。支持JSON或手写JS对象,单引号、注释和末尾逗号也能识别。
  4. 点生成角色。电脑也可以按Ctrl/Cmd+Enter。

关闭弹窗或在同一个标签页刷新时,会保留未提交的草稿。成功生成后草稿清空。标签页关闭后草稿可能消失,长人设建议另存JSON文件。

常见格式错误

可以直接填写{ name: '小雨', personality: '成熟坦率,喜欢读书' },也可用JSON、export default、module.exports或const角色声明。支持单引号、不带引号的字段名、注释、末尾逗号、反引号多行文字和Markdown代码框。姓名、性格、年龄、性别、头像等中文字段,以及常见角色卡的data包装、description人设和first_mes开场白也可识别。手机中文引号和结构标点也可识别,字符串里的原文不会被统一替换。代码用于描述角色数据,函数和计算表达式不能运行。

真正写错时会说明具体行列并定位光标,例如缺少逗号、冒号或结尾引号。修改后直接再次生成,原代码和未提交的草稿会保留。

姓名和性格不能为空。年龄范围18到100岁。性格超过12000字会拒绝生成,避免悄悄丢掉后半段。如果某一项格式不对,整批新角色不会部分添加。新增模式遇到已存在的id会明确提示,不会部分导入。修改已有角色请先在“操作角色”中选中她或他;保存修改沿用原id,保留聊天和相处记忆。

完整字段、可复制示例、批量配置和限制见角色代码说明。

资料和长期记忆

角色中心点“资料与记忆”,可以设置希望的称呼、一直记住的事,以及当前角色的相处偏好。玩家资料由各角色共同参考,相处偏好与明确记忆按角色分别保存。

记忆学习主要从明确的话中提取,例如“记住,我的生日是5月12日”“我的猫叫团团”“以后少问问题,我喜欢短一点的回复”。疑问或假设通常不会当成个人事实。系统只提取明确自述,不会因为你问“如果我养猫呢”就把它当成真实养猫经历。

当前每个角色保留最多80条明确细节和16条表达偏好。单条细节最多320字符,单条偏好最多240字符。很长的“记住”内容建议拆成几个事实,最重要的部分也可写进玩家资料。聊天全文和提取记忆是两种不同记录。

每次回复会带入相关记忆与部分近期聊天。历史可以长期留在本机,但模型不会每次读全部旧记录。近期上下文最多20条,旧消息另有字符预算,最新消息完整发送。隔了很久回来时,角色可以根据真实相处时间自然表达惦念,并接续已记录的细节。

这是保存资料与调整提示词的学习方式,当前不会训练模型权重,也没有后台持续阅读你未打开的生活记录。若记错了,可以在资料与记忆里忘掉对应细节,再明确告诉角色正确的说法。

记忆备份与恢复记忆

备份包含玩家头像、玩家资料、自建角色、人设、聊天和相处记忆。预设角色本体由网站提供,相应聊天与记忆仍包含在备份里。备份文件是JSON,可以保存到自己的Google Drive。

在当前手机保存

  1. 打开资料与记忆。
  2. 点记忆备份。
  3. 若手机出现文件分享菜单,选择Google Drive并完成保存。
  4. 若浏览器直接下载,找到下载的JSON,再从Google Drive上传。
  5. 在Drive中确认文件确实存在,保留日期清楚的文件名。

选择分享菜单只是打开分享,不代表应用已经确认Google Drive保存成功。当前没有自动Google登录或自动云同步。

换手机恢复

  1. 从Google Drive把备份文件下载到新手机“文件”。
  2. 在新手机打开同一网站。
  3. 打开资料与记忆,点恢复记忆。
  4. 选择JSON备份文件,等待导入完成。
  5. 选择原来的角色,确认头像、资料和聊天内容。

恢复会按消息id去重并合并记录,同id自建角色保留已有配置。旧消息与本机消息合并后,显示顺序可能受导入来源影响。先备份新设备现有记录,再恢复更稳妥。当前备份文件上限为15MiB,浏览器可用空间也会影响保存。

原网页地址、另一浏览器和无痕窗口都有各自的数据空间。换网站域名也相当于换了保存位置。清除浏览器数据之前要先备份,网站无法从已删除的本地数据里找回记忆。

手机输入与平板分屏

手机输入框获得焦点时,聊天区域和弹窗会跟随可见区域,保留内部滚动。顶部头像、消息列表和输入区共同使用可见高度。横屏、分屏或软键盘弹出时,角色列表可收为抽屉,让输入区继续可用。

宽度达到768像素且未受触屏键盘挤压时,角色列表和聊天区并排。角色列表独立滚动,创建角色和上传代码入口保持可见。较宽的创建角色表单和资料窗口使用双列,操作按钮仍可找到。

电脑快捷键:Enter发送,Shift+Enter换行,输入法确认不发送。弹窗中Tab切换控件,Escape关闭后回到原入口。角色代码框中Ctrl/Cmd+Enter生成角色。

回复中断或断网

没有内容的临时错误会自动再试一次。断网后已发送的玩家消息仍在,重新联网会继续尝试。同一角色有回复未完成时不能重复发送,其他角色有自己的请求状态。

如果已经收到部分文字但连接中断,页面会显示中断与重试入口,部分文字不会被当成完整答复写入正式历史。重试不会再插入同一条玩家消息。切换角色时,回复仍归原角色;清空或删除会取消该角色正在进行的请求。

免费上游偶尔会限流、超时或返回空内容,应用不能保证每次秒回。频繁点发送或重试不会让通道更快。等待自动重试结束后,仍未成功可以稍后再试。更多排查方法见常见问题。

角色代码说明

固定入口:角色中心 → 上传角色代码。可以点上传文件,也可以使用模板后直接编写,最后点生成角色。电脑支持Ctrl/Cmd+Enter。整个过程无需修改网页或聊天程序。

最小配置

{
  "id": "my_xiaoyu",
  "name": "小雨",
  "age": 26,
  "gender": "female",
  "personality": "安静、温柔,喜欢读书和雨天。先听对方说完,熟悉后更愿意主动关心。"
}

name和personality必填。未写id会自动生成,未写标签、开场和年龄会使用默认值。推荐保存独立id,方便避免重复添加。

完整模板:new-role.role.json。预设配置参考:preset-roles.json。网页“使用模板”每次生成不同id。

字段与容量

字段 内容 限制或默认行为
id 独立标识,如my_xiaoyu 字母、数字、下划线或连字符,1到70字符。保存时补custom_前缀。非法或缺失时自动生成
name 姓名,必填 保存最多12字符
personality 性格和详细人设,必填 最多12000字符,超限拒绝生成
gender female、male、unspecified 其他值使用unspecified
age 成年年龄 18到100,缺省24
tag 列表中显示的标签 最多20字符,缺省“新朋友”
greeting 初次开场 最多300字符,缺省自然问候
avatar 预设路径、图片数据或HTTPS图片地址 推荐assets/avatars/内路径,照片也可在表单从相册选择
voice 说话习惯 最多240字符
interests 兴趣 最多240字符
background 虚构背景 最多600字符
relationship 相处方式 最多300字符
conversation 不同情境的接话原则对象 最多8项,键小于20字符,值最多300字符
quickReplies 快捷话题字符串数组 最多12项,每项最多100字符

除personality超限会明确拒绝外,其他文字字段超限时保留表中长度。重要人设尽量写在personality。头像字段不接受任意文件路径或执行脚本,非法地址会回到预设头像。头像数据上限180000字符。

写出有区别的人设

人设可以按“日常生活、表达方式、情绪反应、相处变化”组织。具体行为比一串形容词更容易形成稳定风格。

{
  "id": "my_zhouyu",
  "name": "周予",
  "gender": "male",
  "age": 28,
  "tag": "安静坦诚",
  "avatar": "assets/avatars/shenyan-portrait.jpg",
  "greeting": "你来了。今天想说的,我慢慢听。",
  "personality": "28岁成年男性,安静但并不冷漠。周末喜欢骑车和找小书店。有自己的生活与兴趣,不把每句话都变成建议。对方累了先顺着情绪聊,开心时愿意一起分享。慢热,熟悉之后会主动关心,愿意根据明确反馈调整表达。",
  "voice": "自然口语,不反复追问,不用客服式套话。",
  "interests": "骑车、读书、街边小店",
  "background": "在城市工作,喜欢用周末慢慢认识附近街区。",
  "relationship": "熟悉以后更愿意表达惦念,也尊重对方的节奏。",
  "conversation": {
    "难过": "先承接具体感受,不急着讲道理。",
    "开心": "分享对方正在开心的事情,给出贴切反应。",
    "久别": "结合已知记忆自然接续,不编造离线经历。"
  },
  "quickReplies": ["今天有点累", "给我讲个小故事", "我有件开心的事"]
}

conversation是帮助模型理解性格的原则,不是固定答案库。角色仍根据当次话题生成真实回复。

批量添加

可用数组,也可用包含roles数组的对象,一次1到24个角色。

{
  "roles": [
    {"id": "friend_a", "name": "阿夏", "age": 25, "gender": "female", "personality": "热情开朗,喜欢音乐。"},
    {"id": "friend_b", "name": "知远", "age": 29, "gender": "male", "personality": "沉稳细腻,喜欢读书。"}
  ]
}

新增模式遇到已有id或批量内部重复id,会提示选择角色后保存修改,整批不添加。任何一项缺少姓名、性格或年龄不合法时,整批不添加。保存空间不足会撤回本次新角色,并保留编辑框内容。

支持的JS包装

export default {
  id: 'my_friend',
  name: '小满',
  age: 24,
  // 人设可以直接写多行
  personality: `成熟开朗,愿意认真听朋友说话。
说话直接自然,喜欢读书和散步。`,
};

可直接写对象,也支持export default {...}、module.exports = {...}、const role = {...}; export default role;或const role = {...}; module.exports = role;。字段名可以不加引号;字符串可用单引号、双引号或反引号;支持注释、末尾逗号和多行人设。粘贴时带着Markdown代码框标记也可识别。手机中文引号、冒号和逗号仅在结构位置兼容,文字内容保持原文。

只读取角色数据,不执行函数、计算表达式或字符串插值。不完整的字符串、缺少逗号或括号会提示具体行列,光标会定位到出错处;草稿不会清空。姓名和性格缺失时会直接说明缺哪个字段,年龄仍为18到100岁。

草稿和文件

代码框最多524288字符,上传文件最多5MiB。成功生成后草稿清空,未提交的草稿保存在同一标签页的sessionStorage中。关闭标签页后请以另存的文件为准。批量导入很大的内嵌头像可能占用较多浏览器空间,建议先保存记忆备份。

维护预设角色请改仓库根目录roles.js。这里的单独导入文件用于玩家自建角色,preset-roles.json作为参考,不自动覆盖线上预设。

部署指南

运行结构

仓库根目录是静态网站。浏览器加载index.html、styles.css、角色配置与聊天脚本,再向config/app.js中配置的HTTP地址请求模型回复。没有前端构建框架,也不需要把模型密钥写进网页。

聊天需要可用后台。只发布静态页面,会显示界面,但不会自行产生模型回复。仓库提供Supabase Edge Function参考实现,也可以对接满足下面协议的其他后台。

本地预览

在仓库根目录执行:

node scripts/validate.mjs
python3 -m http.server 8000

检查命令使用Node.js 24。浏览器打开http://localhost:8000,避免直接双击file://网页。运行静态服务器时保持终端开启。前端开发不需要npm安装依赖。

一个明确的接口配置入口

编辑config/app.js:

window.LIAOTIAN_CONFIG = Object.freeze({
  chatApiUrl: 'https://your-project.supabase.co/functions/v1/role-chat-fast'
});

自己的部署填写自己的兼容接口。默认地址用于本站演示,可能受运营方配额、上游限流或维护影响,不应把它当成无限公共服务。正式地址应使用HTTPS。开发时允许localhost、127.0.0.1及IPv6回环的HTTP地址,HTTPS站点也可以使用同源相对路径。

空配置、不合法协议或带用户名密码的地址不会让网页崩溃,发送时会提示接口未配置。不要把API密钥或数据库管理密钥放在这个文件、角色文件或公开仓库中。

Render静态发布

仓库包含render.yaml,可用Blueprint导入,也可创建Static Site,关联自己的仓库。

设置 值
服务类型 Static Site
Node版本 24,仓库.node-version与Blueprint已指定
发布分支 main或自己的发布分支
Build Command node scripts/validate.mjs
Publish Directory ./
Rewrite /* 到 /index.html,已有文件优先正常返回

先确认角色图片、脚本与docs/index.html都能作为实际文件访问。接口配置改好并提交后再部署。关联仓库开启自动部署时,合并发布分支会自动产生新版本,无需重复触发部署。

PPT文件保存在docs/character-chat-guide.pptx。静态平台应按文件返回,不应把PPT路径重写成聊天首页。上线检查既要打开页面,也要检查脚本、头像、说明书和PPT的实际响应。

Supabase参考后台

源码:supabase/functions/role-chat-fast/index.ts。该函数不依赖数据库表,使用Deno运行时,通过真实模型上游生成回复。当前演示实现有4条通道,完整有效回复竞速,成功后取消其他请求。仅首批内容随后断流不会取消其他可用线路。

在自己的Supabase项目部署同名函数,并确认网页跨域访问与请求认证方式一致。当前前端不发送登录令牌,本站现有函数允许匿名调用。若自己的后台要求认证,需要同时实现前端认证或自己的受保护网关,不能只改一个开关后期待匿名聊天继续工作。

使用Supabase CLI时,可参考下面的结构,project-ref替换为自己的项目标识:

supabase login
supabase link --project-ref YOUR_PROJECT_REF
# 仅适用于有意提供匿名演示接口的项目
supabase functions deploy role-chat-fast --no-verify-jwt

密钥型模型服务应把凭据存到后台环境变量,并在后台发请求时读取。仓库里的演示通道没有承诺可长期使用。公开运营应配置适合自己的上游、访问限额和异常监控,以免共享服务失效直接影响体验。

官方参考:部署Edge Functions、运行限制、Render静态站点。免费计划当前函数墙钟限制为150秒,本站长文流预算90秒,仍须考虑上游响应与平台实际运行情况。

请求协议

浏览器发送POST,Content-Type为text/plain;charset=UTF-8,正文仍为下面的JSON,credentials为omit。这种发送方式减少跨域预检往返;后台也继续接受旧版application/json请求。

GET仅返回{"ok":true}用于连接检查,不调用模型、不发送玩家资料。OPTIONS继续支持旧客户端的跨域预检。

{
  "client": "liaotian123",
  "stream": true,
  "max_tokens": 6000,
  "attempt": 0,
  "messages": [
    {"role": "system", "content": "角色人设、相处规则与相关记忆"},
    {"role": "user", "content": "玩家本次消息"}
  ]
}

client标识决定参考后台使用本站容量。attempt用于标识重试,当前后台不依赖它生成额外副作用。messages使用system、user、assistant角色。浏览器发送的是本轮相关文字,头像数据不随请求提交。

内容 本站容量
最新玩家消息 30000字符,完整保留
system人设与记忆 24000字符
近期消息 最多20条
旧消息预算 总12000字符,每条最多1600
输出请求 短180、普通300、长6000 token
回复文本保护 30000字符

后台拒绝超限最新消息或system内容,返回HTTP 400。旧消息压缩只影响本轮模型上下文,不删除浏览器里的完整历史。

返回协议

后台可返回完整JSON:

{"text": "角色的真实回复"}

或者返回Content-Type为text/event-stream的SSE,UTF-8编码,每个事件用空行分隔:

data: {"delta":"你来啦。"}

data: {"delta":"今天想慢慢说什么?"}

data: {"done":true}

最后的done必须存在。页面收到done后立即保存有效答复,不再等待连接关闭;连接清理也不会阻塞完成状态。流中可用{"error":"reply_unavailable"}说明失败。空内容、错误或未完成流不会成为正常答复。模型碰到输出额度时可能带limited=true,用户可要求继续,页面不会伪造剩余内容。

跨域后台要响应OPTIONS,并允许Content-Type与POST。不要缓存个性化聊天响应。参考实现使用no-store或no-cache、no-transform,防止代理缓存或缓冲影响聊天。

上线验收

  1. 新浏览器能打开首页,12位角色头像与文字正常。
  2. 发送一条普通消息,确认收到真实回复,失败时有可用重试。
  3. 测试一条超过6000字的内容,末尾问一个仅全文末尾才出现的问题。
  4. 表单与代码都能添加角色,刷新后角色仍存在。
  5. 手机相册换头像,两侧头像显示正常。
  6. 软键盘弹出时消息与输入区仍可见,平板和电脑没有横向溢出。
  7. 保存备份,换浏览器恢复,确认头像、角色、聊天和记忆。
  8. 打开在线说明书,下载PPT,确认返回真实文件。

node scripts/validate.mjs检查语法、JSON、静态引用、聊天传输契约和角色代码生成与修改。它不等同于真实上游服务的健康检查,也不代替手机真机体验。

架构与数据说明

文件职责

文件 职责
index.html 页面结构、弹窗与可访问控件
config/app.js 唯一聊天接口地址
styles.css 浅粉色样式、屏幕适配、可见视口布局
roles.js 12个预设、聊天风格与情境规则
role-code.js JSON解析、模板、文件导入和同标签页草稿
memory.js 明确自述、表达偏好与相关记忆选取
app.js 生命周期、角色状态、头像、请求、聊天和备份
supabase/functions/role-chat-fast/index.ts 请求压缩、真实通道竞速与SSE转发
roles/ 玩家可独立导入的模板和说明
docs/ 说明书、架构、故障处理和PPT
scripts/ 可复现的检查入口

旧config/role.json保留作历史参考,不是当前预设或接口配置入口。

一条消息的数据路径

flowchart TD
  A[玩家发送] --> B[完整消息写入本机历史]
  B --> C[提取明确细节与表达偏好]
  C --> D[人设与相关记忆组合]
  D --> E[最新全文和压缩近期上下文]
  E --> F[本站聊天接口]
  F --> G{完整真实回复竞速}
  G --> H[选中一个模型通道]
  H --> I[取消其他通道]
  H --> J[返回完整内容与完成标记]
  J --> K{收到完成标记}
  K -->|收到| L[保存完整答复]
  K -->|未收到| M[显示中断与重试]

网站不提前展示随机句子模拟回复。只有完整有效的真实内容能赢得竞速,第一段随后断流时仍保留其他线路的机会。无内容时可以自动再试一次。各角色有独立请求,切换角色不改变回复归属。清空或删除会取消请求,迟到结果不会写回。

连接预热使用不带玩家资料的GET检查。聊天POST仍传递完整JSON正文,使用text/plain类型以减少跨域预检等待。收到done即结束本轮并保存有效答复,不等连接关闭;完成之后的清理或迟到错误不会把成功回复改成失败。真正中断的部分内容仍显示重试入口,不写入正式回复历史。

普通通道首批预算12秒、完整预算17秒,前端总预算40秒,涵盖一次无内容重试。长通道首批预算12秒、完整预算90秒,前端总预算100秒。等待期间发送连接心跳,实际显示回复的时间取决于网络与上游。

本机保存键

localStorage键 内容
liaotian_custom_chars 自建角色、人设与头像
liaotian_chat_histories 各角色的完整聊天历史
liaotian_active_char 当前角色
liaotian_user_avatar 玩家头像
liaotian_player_profile 稳定玩家id、称呼与资料
liaotian_role_memories 按角色保存的事实、偏好与相处时间
liaotian_reply_length 回复长度选择

角色代码草稿使用sessionStorage键liaotian_role_code_draft。日常保存范围是当前域名、当前浏览器和当前设备。请求只带必要的文字上下文,不发送头像图片或完整备份。

图片在浏览器内裁剪压缩为384像素JPEG。预设图片来自站点文件,不依赖外部头像网址。用户主动配置的HTTPS头像可能由外部服务器加载。

记忆的边界

玩家资料的称呼最多24字符,资料与相处偏好编辑框各600字符。每个角色保存80条事实和16条偏好,再按本轮相关性挑选部分带入。姓名、宠物等身份细节优先参考,较新的反馈优先于相反旧反馈。

模型的本轮上下文不是全部永久历史。最新30000字符完整发送,旧消息总预算12000字符,每条1600字符,最多20条。人设、规则与相关记忆总上限24000字符。完整本机历史不会随此预算裁剪。

“自学习”指明确事实与表达偏好的持续保存和提示词调整。当前没有模型训练、自动Google云同步或后台主动发送消息。

备份格式

版本1使用format为liaotian123-backup,包含profile、userAvatar、characters、histories、memories以及时间和选项。导入只接受识别的格式。聊天按消息id去重,记忆合并去重,同id角色保护已有设定。备份包含私人内容,请由玩家自行保管。

维护原则

给所有设备保留同一套实际功能,不用假UI代替真实能力。角色扩展通过固定代码入口完成。界面以聊天为主,容量、上游与保存细节放在说明书。网页与后台容量必须一起调整,备份恢复和真实模型验证也要覆盖长文末尾。

常见问题

现象 先做什么 可能原因
页面打不开 换网络,稍后刷新,确认网址 静态部署失败、网络或域名问题
点输入框后画面异常 更新浏览器,收起键盘再打开,记录设备版本 可见视口变化或旧缓存
角色没回复 等自动重试结束,再用重试按钮 上游超时、限流、断网或接口配置
突然只显示半段 点重试,或说明从上段继续 传输中断或模型输出额度
新角色无法生成 按提示的行列修改,补全name和personality后再生成 缺少逗号、引号或括号;必填项、年龄或长度错误
上传后没新增 检查代码框,再点生成;修改已有角色先选择它 上传只载入草稿;已有id需要保存修改
头像无法加载 从相册另存JPEG/PNG再选 图片解码失败或外部地址不可用
换手机没有聊天 下载原备份,再恢复记忆 本机记录没有自动云同步
Google Drive没文件 在Drive确认文件,必要时手动上传 分享未完成或浏览器仅下载
提示空间不足 先保存备份,再处理不需要的角色 浏览器本地存储配额
恢复失败 确认是JSON备份且小于15MiB 格式、文件大小、空间或回复仍进行中
本地预览不能聊天 检查config/app.js和后台响应 接口未配置、跨域或认证不兼容

为什么长消息可以发送,回复仍不算很长

输入容量和模型输出额度分别控制。网站单条支持30000字符,长回复请求6000 token。模型会按题目、上游配置和上下文决定篇幅,token也不等于中文字数。给出明确主题、段落要求和期望长度,效果通常比只说“多写”更稳定。

为什么会忘掉某段旧聊天

完整历史保存在本机,但每次回复只带有限的近期上下文与相关记忆。重要信息可以明确说“记住”,或写入资料。每条长期细节有长度限制,建议拆开表达。角色不会从未保存、已删除或另一浏览器的数据里猜出你的身份。

如何反馈问题

描述“设备与浏览器版本、从哪个页面点了什么、期待什么、实际出现什么”。截图先遮住私人对话。不要上传完整备份、密钥或未经遮挡的个人照片。发布者可通过GitHub问题区接收报告,涉及敏感信息时使用私下渠道。

维护者排查顺序

先检查静态资产实际返回状态与内容,再核对接口配置。对API检查OPTIONS、POST、Content-Type、SSE完成标记和请求时长。确认未把PPT、图片或脚本路径重写成首页。构建检查通过只说明仓库文件可用,真实模型仍需单独验证。