尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SpacetimeDB LLM 基准测试中的匿名到注册身份迁移:chat-app Level 12 提示词规格、UI 契约与身份模型解析

SpacetimeDB LLM 基准测试中的匿名到注册身份迁移:chat-app Level 12 提示词规格、UI 契约与身份模型解析 SpacetimeDB LLM 基准测试中的匿名到注册身份迁移chat-app Level 12 提示词规格、UI 契约与身份模型解析【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB在 SpacetimeDB 仓库的tools/llm-oneshotLLM 基准测试中12_anon_migration.md 是 chat-app 场景第 12 级满配级的累计提示词其最后一块新增能力是匿名用户到注册用户的身份迁移。本文围绕该文档的完整功能规格与 UI 测试契约展开结合评分细则中的验收用例以及仓库中真实 LLM 生成应用的 SpacetimeDB 源码解析这套免注册进入、注册后身份与数据无缝保留机制背后的数据库身份模型。一、文档定位llm-oneshot 基准测试的 Level 12 提示词该文件位于tools/llm-oneshot/apps/chat-app/prompts/composed/目录属于一套模块化的提示词系统。按 prompts/README.md 的说明使用方式是将一个语言文件与一个composed 累计提示词拼接后交给 LLM 执行例如language/typescript-spacetime.md composed/12_full.md execute提示词分为两层结构features/目录存放各功能的最小规格块本功能的独立块为 12_anon_migration.md仅 4 行要点composed/目录存放累计提示词——每一级包含之前所有功能。Level 12 是全功能集README 中标记为12 full带 ⭐属于特别有利于 SpacetimeDB的特性档累计包含 Basic Chat、Typing Indicators、Read Receipts、Unread Counts、Scheduled Messages、Ephemeral Messages、Reactions、Edit History、Real-Time Permissions、Rich Presence、Threading、Private Rooms DMs、Activity Indicators、Draft Sync 共 14 个前置功能最后新增本节的 Anonymous to Registered Migration。composed 提示词还包含统一的 UI 风格规范深色主题、左侧约 220px 边栏、消息组件、状态指示点、键盘交互等并声明每个功能附带的 UI contract 章节规定了自动化测试所需的元素属性必须遵守——架构、状态管理和后端设计则完全自由。这一点决定了下文 UI 契约的强制性地位。二、功能规格四条核心需求文档正文对Anonymous to Registered Migration的定义如下完整继承自 features 块免注册使用用户无需创建账号即可加入聊天室并发送消息会话级匿名身份匿名用户拥有一个临时身份temporary identity并在整个会话期间持续有效注册后保留身份与历史匿名用户注册时其身份和消息历史被保留preserved归属数据整体转移房间成员关系及所有关联数据转移到注册账号上。这四条看似简单实则构成一个零数据迁移约束注册不是新建账号 拷贝历史而是同一个身份获得一个正式名字。这正是评分细则中2 分档可注册但丢失部分历史、1 分档注册产生新身份所惩罚的失败模式——实现必须避免复制消息或重建房间成员行。UI 契约自动化测试约束文档为每个功能给出必须严格遵守的 UI 元素契约。本功能的契约共 5 条契约项要求Guest entry游客入口文本为 Guest、Anonymous 或 Join as Guest 的button或应用自动分配形如 Guest-XXXXX、Anon-XXXXX 的名字Guest indicator游客标识匿名用户名字旁可见含 guest 或 anon 的徽章/标签Register button注册按钮对游客用户可见文本为 Register 或 Sign Up 的buttonRegistration form注册表单用于选择显示名的inputplaceholder含 name 或 usernameMigration迁移验证注册完成后此前所有消息显示新的显示名最后一条是端到端断言不改一行消息记录的前提下历史消息的署名要自动换成注册后的显示名——这要求消息只存发送者 ID显示名由发送者 ID → 用户表动态解析前端不得把昵称硬编码进消息气泡的持久状态。三、评分与验收Feature 15 的测试用例grading_rubric.md 将该功能编为 Feature 15满分 3 分给出 4 项判分标准判分项分值用户无账号即可加入并发送消息1匿名身份在会话内持续有效0.5注册保留消息历史与身份1房间成员关系转移到注册账号0.5并规定了 6 个手工/自动化测试用例可作为验收清单直接复用无账号用户加入 → 以临时名字聊天刷新页面 → 仍是同一个匿名身份验证会话持久性匿名用户发送 5 条消息、加入 2 个房间用户注册 → 5 条消息仍归属于 ta注册后房间成员关系保留其他用户无感知不出现 user left/joined 类骚扰事件。Level 12 提示词对应测试框架的--level12覆盖 1–15 号功能、满分 45 分。README 还给出了基准运行方式CLIENT_URLhttp://localhost:5173 npm run benchmark -- staging 目录 --level12即在 LLM 生成的应用落盘到staging/时间戳目录后由 Playwright 驱动的测试框架按上述契约逐项打分。四、源码级机制SpacetimeDB 身份模型如何让迁移免费README 的Feature Difficulty Comparison表将本特性标为SpacetimeDB Easynative identity systemvs PostgreSQL Hardsession/token management。仓库中 LLM 实际生成的应用可以印证这个结论。以 opus-4-5 的 SpacetimeDB 实现 为例其 schema.ts 中的用户表是这样定义的export const user table( { name: user, public: true }, { identity: t.identity().primaryKey(), name: t.string().optional(), // 注意可空 status: t.string(), lastActive: t.timestamp(), online: t.bool(), } );三个关键设计共同满足了无缝迁移约束t.identity().primaryKey()主键不是自增 ID而是 SpacetimeDB 内建的连接身份类型。每次客户端连接ctx.sender就是一个稳定、可哈希、可索引的 identity。浏览器侧通常配合 localStorage 持久化的客户端证书因此测试用例 2刷新页面仍是同一身份成立——匿名身份并不是服务端发的临时 token而是连接本身。name字段可空匿名用户的用户行存在但name为空前端渲染为 Anonymous 或自动分配的 Guest-XXXXX注册时只是把name从空更新为正式显示名用户行、消息行、RoomMember行userId: t.identity()全程不动。消息只存senderId: t.identity()Message 表 同样只用 identity 关联发送者前端把 identity 解析为用户表里的当前名字注册改名后历史消息署名自动更新——这正是 UI 契约第 5 条的数据库基础。注册动作对应后端一个极简 reducer。index.ts 中的set_namespacetimedb.reducer(set_name, { name: t.string() }, (ctx, { name }) { const trimmed name.trim(); const user ctx.db.user.identity.find(ctx.sender); // 已有则更新 name没有则插入 ctx.db.user.identity.update({ ...user, name: trimmed }); });注册的全部逻辑就是按ctx.sender定位用户行并写入名字——没有 token 交换、没有历史数据搬迁、没有成员关系重建。从源码结构看匿名/注册的区别仅是user.name是否为空这也解释了为什么该特性在 SpacetimeDB 下被评级为 Easy所谓迁移是命名问题而非数据问题。与之相对PostgreSQL 路线没有内建 identity 类型README 指出需要session/token management——即自管匿名会话令牌、注册时把旧 token 下的消息与成员记录批量改写外键这正是判分标准中2 分可注册但丢历史最常见的失败来源。五、实操路径小结查看规格读 composed/12_anon_migration.md 获取累计功能全集 本功能 UI 契约读 features/12_anon_migration.md 获取最小功能块拼接提示词按 README 用语言文件如 language/typescript-spacetime.md内含 SpacetimeDB 品牌色与backend/spacetimedb/client/src/目录约束在前 composed 在后验收评分按 grading_rubric.md 的 Feature 15 标准与 6 个测试用例核对重点验证刷新后身份不变注册后 5 条消息仍归属其他用户无感知三条端到端用例对照实现参考 opus-4-5 生成应用的 schema.ts 与 index.ts理解 identity 主键 可空 name identity 外键消息表这一套免迁移数据模型。综上这份 Level 12 提示词的技术要点不在于多写功能而在于用 UI 契约把身份连续性变成可自动化验证的断言而 SpacetimeDB 的连接身份模型把这类需求从数据迁移工程降维成了给同一个主键补一个名字这正是该基准测试用它来体现两类后端能力差异的意图所在。【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表