Refly v0.2.3 更新解析:产品引导向导、会话制计费与知识库体验升级的实现细节

发布时间:2026/9/16 18:17:26
Refly v0.2.3 更新解析:产品引导向导、会话制计费与知识库体验升级的实现细节 Refly v0.2.3 更新解析产品引导向导、会话制计费与知识库体验升级的实现细节【免费下载链接】reflyThe first open-source agent skills builder. Define skills by vibe workflow, run on Claude Code, Cursor, Codex more. Build Clawdbot · APIs for Lovable · Bots for Slack Lark/Feishu · Skills are infrastructure, not prompts.项目地址: https://gitcode.com/GitHub_Trending/re/refly本文基于 Refly 仓库中的 v0.2.3 更新日志系统梳理该版本的核心变更全新产品初始化设置向导、由 Token/存储容量制转向“会话次数 文件数量”的计费方案、知识库文档与资源预览、节点级永久删除能力以及五项核心问题修复。读完本文你可以理解每一项功能在前端触发链与后端服务层的对应实现引导表单如何被服务端 Schema 驱动、用户偏好如何回写、配额如何计量并能通过环境变量ONBOARDING_ENABLED等开关了解自部署时的相关配置项。一、v0.2.3 更新总览根据 v0.2.3 更新日志本版本的定位是“全面升级产品引导体验、优化付费方案设计并提供更直观的知识库展示同时修复多个核心使用问题”。变更分为四大块模块变更类型关键内容产品引导新功能初始化设置向导、核心功能介绍、交互式使用指南、功能点悬浮视频教程付费方案全新优化计费单位由 Token/存储容量改为会话次数与文件数量新增用量统计展示与用量不足提醒知识库体验升级新增文档和资源预览功能资源管理新功能删除节点时可永久删除对应资源/文档删除画布时可级联删除画布内全部资源核心修复缺陷修复频繁退出登录、网页内容复制导出丢失、文档标题末字符无法删除、空图片地址报错、弱网下删除最后画布跳转异常下面按模块展开并结合仓库源码说明各功能的实际实现位置。二、产品引导全面升级从“设置向导”到“悬浮视频教程”更新日志中引导模块包含四个具体能力产品初始化设置向导配置界面语言UI Locale、AI 回答语言Output Locale以及操作模式鼠标/触控板产品核心功能介绍帮助新用户快速理解产品价值交互式使用指南手把手引导体验 Refly 辅助内容创作全流程功能点悬浮视频教程直观了解各功能的使用方法。2.1 初始化设置向导的触发链设置向导是否弹出由登录后拉取的用户设置中的preferences.hasFilledForm字段决定。前端在 use-get-user-settings.ts 中完成这一判断// packages/ai-workspace-common/src/hooks/use-get-user-settings.ts const updateModalStatus (preferences: UserPreferences) { const hasBeenInvited preferences.hasBeenInvited; userStore.setShowInvitationCodeModal(!preferences.hasBeenInvited); // Only check form filling status if user has been invited if (hasBeenInvited) { const hasFilledForm preferences.hasFilledForm ?? false; userStore.setShowOnboardingFormModal(!hasFilledForm); } };即仅当用户已被邀请hasBeenInvited且尚未填过引导表单hasFilledForm false时才会置位showOnboardingFormModal。后端在注册时将该字段初始化为false见 auth.service.ts 中hasFilledForm: false的初始化表单提交成功后再置为true。2.2 服务端驱动的动态表单引导表单本身并不是前端写死的组件而是由服务端下发 JSON Schema、前端用 RJSFreact-jsonschema-form动态渲染的。FormOnboardingModal 的核心流程通过useGetFormDefinition请求表单定义含schema与uiSchema将服务端返回的 Schema 解析后合并formId与当前用户uid交给ReflyRjsfForm渲染解析失败或请求出错时展示错误占位避免白屏。对应的后端实现位于 form.service.tsgetFormDefinition从数据库FormDefinition表中读取已发布的表单定义formId、title、description、schema、uiSchema、statussubmitForm写入FormSubmission记录并将用户preferences.hasFilledForm更新为true同时从答案中提取role字段同步到遥测属性user_identityhasFilledForm对外暴露“是否已填写”的判断逻辑供用户设置接口聚合返回。这一设计意味着运营侧可以在不发布前端版本的情况下调整引导表单的字段与文案——表单结构完全由数据驱动。2.3 引导开关ONBOARDING_ENABLED是否强制走引导流程是一个可配置项。app.config.ts 中定义了// apps/api/src/modules/config/app.config.ts onboarding: { enabled: process.env.ONBOARDING_ENABLED true || false, },FormService.hasFilledForm首先检查auth.onboarding.enabled关闭时直接返回hasFilledForm: true跳过表单要求。对于自部署场景可以通过设置环境变量ONBOARDING_ENABLEDtrue来启用该引导链路可参考 env.example 中的环境变量约定。2.4 界面语言、AI 回答语言与操作模式的落地向导收集的三项配置最终会写入用户设置并驱动本地行为同样在 use-get-user-settings.ts 中可见localSettings { ...localSettings, uiLocale, // 界面语言 outputLocale, // AI 回答语言 isLocaleInitialized: true, canvasMode: settings?.preferences?.operationMode || mouse, // 操作模式鼠标/触控板 disableHoverCard: settings?.preferences?.disableHoverCard || false, };其中有一个值得注意的“首次登录回写”逻辑若服务端返回的uiLocale与outputLocale均为空新注册用户前端会用浏览器navigator.language映射出默认语言并立即回写updateSettings({ uiLocale, outputLocale })保证下次加载时语言配置已固化到服务端。操作模式则通过preferences.operationMode持久化缺省为mouse供画布交互层读取以切换鼠标/触控板适配方案。三、付费方案全新优化从 Token/存储容量到会话次数与文件数量更新日志明确说明计费方式的变更“由 Token/存储容量改为会话次数和文件数量更清晰直观”并配套了定价说明优化、用量统计展示与用量不足提醒。3.1 配额模型在源码中的体现当前仓库的订阅计量实现与“会话/请求次数 文件数量”的双维度模型一致。subscription.service.ts 中可以看到两类用量表usage meter请求计量t1CountQuota/t2CountQuota按请求层级计次的配额缺省回落到配置项quota.request.t1/quota.request.t2另有creditQuota对应的积分额度存储计量fileCountQuota缺省回落到配置项quota.storage.file用于约束用户上传/入库的文件数量。// apps/api/src/modules/subscription/subscription.service.ts节选 t1CountQuota: plan?.t1CountQuota ?? this.config.get(quota.request.t1), t2CountQuota: plan?.t2CountQuota ?? this.config.get(quota.request.t2), // ... fileCountQuota: plan?.fileCountQuota ?? this.config.get(quota.storage.file),即套餐plan上可单独配置各维度的上限未配置时使用全局默认值。这种“按次 按文件数”的配额结构正是更新日志所说新计费方式在服务端的落点。3.2 用量统计与不足提醒用量展示与提醒在前端有对应组件hint.tsx 负责订阅/用量相关的提示渲染聊天输入区如 chat-box.tsx与文件导入流程如 storageLimit.tsx也会基于剩余配额给出拦截或引导。套餐价格常量目前收敛在 pricing.tsplus / starter / maker 三档月付与年付价格注释说明应与支付平台配置保持一致。3.3 与旧方案的对照维度旧方案≤v0.2.2 时期v0.2.3 起计费单位Token 消耗、存储容量会话请求次数、文件数量用户感知需理解 Token 概念次数直观便于预估配额来源—套餐级t1CountQuota/t2CountQuota/fileCountQuota缺省回落到全局配置配套能力—用量统计展示、用量不足提醒与补充指引四、知识库体验升级预览与永久删除更新日志记录了知识库的两项变更文档和资源预览新增文档和资源预览功能界面更加直观美观永久删除资源或文档在节点删除时可永久从知识库中删除该资源或文档在删除画布时可删除画布中所有的资源或文档。永久删除的价值在于此前的删除多为画布层面的移除底层知识库资源仍会持续占用存储配额对应上一节提到的fileCountQuota维度v0.2.3 之后删除操作可以直接清理底层数据让配额回收成为可能。该能力在更新日志中描述为可选行为“可永久删除”即删除时由用户决定是否彻底移除。五、核心问题修复与源码印证更新日志列出了五项核心修复其中“频繁退出登录”一项与前端鉴权状态管理直接相关源码中可以看到对应的防御性设计见 use-get-user-settings.ts竞态请求防护activeRequestId递增 isLatestRequest()判断确保慢响应不会覆盖新请求写入的登录态登出误判防护鉴权失败或无凭据时调用authChannel.updateCurrentUid(null)避免跨标签页的 uid 监听把“未登录”误判为“切换用户/被登出”重定向环路短路鉴权失败时仅在“非公开页且不在根路径 /login”的情况下才跳转登录页并保留returnUrl避免登录态检查引发的循环跳转——这类异常跳转在弱网环境下会显著放大“频繁掉登录”的观感。其余四项修复网页内容复制到 AI 文档再导出的内容丢失、文档标题最后字符无法删除、文档编辑器空图片地址报错、弱网环境下删除最后画布的跳转异常属于编辑器与画布交互层面的缺陷修复以 更新日志 的条目描述为准。六、小结这一版本解决了什么问题降低上手门槛初始化向导 功能介绍 交互式指南 悬浮视频教程构成完整的新用户引导链路表单由服务端 Schema 驱动可通过ONBOARDING_ENABLED在自部署中开关计费心智更清晰以会话次数和文件数量替代 Token/存储容量配额按套餐维度配置并回落到全局默认配套用量统计与不足提醒资源生命周期闭环知识库预览提升浏览体验节点/画布级永久删除打通了配额回收稳定性针对登录态竞态、弱网跳转等高频问题做了修复。如果想进一步跟进相关实现建议从 form.service.ts、use-get-user-settings.ts、subscription.service.ts 三个文件入手分别对应引导表单、登录态与本地偏好、配额计量三条主线。【免费下载链接】reflyThe first open-source agent skills builder. Define skills by vibe workflow, run on Claude Code, Cursor, Codex more. Build Clawdbot · APIs for Lovable · Bots for Slack Lark/Feishu · Skills are infrastructure, not prompts.项目地址: https://gitcode.com/GitHub_Trending/re/refly创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考