
Big-AGI 数据主权指南Client-First 架构下的本地存储、Direct Connection 与自托管数据流解析【免费下载链接】big-AGIAI suite powered by state-of-the-art models and providing advanced AI/AGI functions. Includes AI personas, AGI functions, world-class Beam multi-model chats, text-to-image, voice, response streaming, code highlighting and execution, PDF import, presets for developers, much more. Deploy on-prem or in the cloud.项目地址: https://gitcode.com/GitHub_Trending/bi/big-AGIBig-AGI 是一款客户端优先client-first的 Web 应用与传统的云端应用不同它的 API 密钥、聊天记录与设置默认存放在你浏览器本地的 localStorage 与 IndexedDB 中而非云服务器上。本文基于官方数据所有权文档 docs/help-data-ownership.md结合仓库源码深入讲解 Big-AGI 的数据存储机制、三种数据流向自部署 / 托管版 / Direct Connection 直连、设备标识符agi.client-token以及安全最佳实践读完你既能清楚理解自己的数据在哪里、如何流动也能掌握在自托管场景下保护密钥与聊天数据的具体做法。两种使用方式自托管 vs 托管版你可以通过两种方式使用 Big-AGI自行部署开源版从仓库 clone 后自行运行所有数据都在你的基础设施内流转详见 docs/installation.md。使用托管服务 big-agi.com数据会经由 Big-AGI 的边缘网络转发到 AI 服务。无论哪种方式本指南的核心结论一致Big-AGI 的后端主要扮演路由角色把请求转发给 AI 服务OpenAI、Anthropic 等本身不存储你的数据——唯一的例外是聊天分享chat-sharing功能如果使用的话。Client-First 的浏览器本地存储Big-AGI 中几乎所有的聊天/密钥数据都在浏览器端处理依赖两种标准浏览器存储机制Local Storage本地存储存放 API 密钥、设置与配置。IndexedDB存放聊天历史与较大的文件。文档提供了一段可自行验证的操作在 Chrome 中按 F12Windows或 ⌘ ⌥ IMac打开 DevTools进入Application Local Storage即可看到你的设置与 API 密钥。对应地IndexedDB 中的数据可在Application IndexedDB中查看。源码级佐证从 Zustand 持久化到 IndexedDB从源码看聊天数据的持久化链路非常清晰。聊天会话存储 src/common/stores/chat/store-chats.ts 使用 Zustand 的persist中间件并显式将存储后端替换为 IndexedDB 适配器// src/common/stores/chat/store-chats.ts persist( ..., { name: app-chats, ... storage: createIDBPersistStorageConversationsStore(), }, )其中的createIDBPersistStorage定义在 src/common/util/idbUtils.ts。这是一个高性能的自定义存储后端基于idb-keyval读写 IndexedDB采用截止时间驱动的批处理调度器写入会先合并merge window 为 321ms最迟在 deadline1234ms内落盘避免聊天过程中频繁小写入造成的性能抖动序列化仅在真正写盘前执行内存中始终保留最新状态removeItem刻意不实现——数据以只增不删的方式留在本地。仓库中各持久化 store 使用的 key 名称也能让你在浏览器里直接对应查找app-chats聊天、app-folders文件夹、app-models模型配置、app-metrics指标、app-ai-preferencesAI 偏好、app-device设备标识、app-ui界面设置、app-ux-labs实验室功能。此外src/common/util/storageUtils.ts 提供了requestPersistentStorageSafe()通过navigator.storage.persist()向浏览器申请持久化存储防止 IndexedDB 内容被浏览器在存储压力下自动清除并可调用navigator.storage.estimate()输出当前用量与配额以 MB 为单位。这意味着在支持的浏览器上Big-AGI 会主动降低聊天数据被意外回收的风险。这对你意味着什么数据存放在浏览器中直接带来以下特性与注意点数据只存在于单台设备/单个浏览器不跨设备同步除非启用 Sync清除浏览器数据会抹掉你的聊天记录——务必做好备份任何使用你浏览器的人都能看到你的聊天与密钥自行运行服务器需要一定的技术能力。已登录用户的 Sync 与设备标识符Sync可选的服务器端复制在 big-agi.com 拥有账号并主动选择开启 SyncPro 功能的用户其实体数据如对话与 Persona会被复制到服务器端以支持多设备访问。服务器端数据通过行级安全Row Level Security, RLS按用户隔离确保其他用户无法访问你的同步数据。Sync 完全可选——不开启时所有数据都留在本地浏览器中。设备标识符Device Identifier登录后Big-AGI 会保留一个设备标识符用于区分你的各台设备以支持可选的 Sync 并将设备列在你的账号下。其关键特性文档原文要点由服务器签发随机 UUID存储在持久化的一方 httpOnly Cookie名为agi.client-token中——页面脚本既不能创建它也无法读取它标识的是你的客户端每个浏览器一个同一台机器上的第二个浏览器或已安装应用会被视为另一台设备取代了旧的 localStorage 机制源码见 src/common/stores/store-client.ts不会为未登录访客设置也从不用于跟踪、广告、分析或遥测通过行级安全隔离到你的账号其他用户不可见属于服务器设置的 Cookie只有清除 cookies/站点数据时才会重置。从源码看旧机制src/common/stores/store-client.ts在本地维护一个app-device持久化 store其中localDeviceId由 6 位随机字符 4 位时间戳字符构成_generateLocalDeviceIdentifier()格式如a7f3g9h812并且只在启用 Sync 功能时才会上传新的agi.client-tokenCookie 机制则是服务器签发的 UUID从根本上把设备身份与页面可读的本地存储解耦进一步降低了被脚本窃取的可能。数据如何流动三组件模型AI 交互聊天、AI 标题、文本转语音、浏览等在 Big-AGI 中流经三个组件浏览器客户端/已安装 App——本地存储你的密钥与数据后端路由服务器——把请求转发给 AI 服务AI 服务——真正执行 AI 处理的地方。自部署版本数据在你的基础设施内自行部署时你运行服务器。数据只在你发起 AI 请求时才会离开你的环境。密钥和聊天都在你的掌控之下、流经你自己的代码并按请求逐个发送到上游 AI 服务。托管版本经由 big-agi.com 边缘网络使用 big-agi.com 时你的数据经由托管的 Big-AGI 边缘网络到达 AI 服务密钥和聊天按请求逐个经过 Big-AGI 的边缘网络再发送到上游 AI 服务。Direct Connection浏览器直连 AI 服务大多数 AI 服务在其Advanced高级设置中提供了Direct Connection直连开关。启用后浏览器将直接调用 AI 提供商的 API完全跳过 Big-AGI 服务器。收益没有 4.5MB 上传限制Vercel 的 body 大小上限不再适用更大的附件和长提示词可以正常通过没有 300 秒超时Vercel 的函数超时不再适用长时间运行的生成可以持续流式输出更私密连接元数据IP、时间戳、边缘区域、Vercel 遥测不再被 Big-AGI 边缘服务器观测到。代价下行带宽略增流量经过 Big-AGI 边缘时重复的流式帧会被压缩直连时流式数据由提供商原样到达。启用条件两者缺一不可API 密钥必须设置在浏览器端客户端而不是服务器环境变量。仅配置服务器密钥的部署无法使用直连因为浏览器手里没有可发送的凭证AI 服务必须允许CORS浏览器源请求。大多数主流提供商都支持Big-AGI 会为其设置所需的额外请求头。只要提供商允许Direct Connection 在速度、限制与隐私上都是净收益。源码级佐证客户端直连的执行路径直连能力在源码中有完整的实现脉络。在 src/modules/llms/llm.client.ts 中模型更新逻辑会先检查传输访问配置是否带有clientSideFetch标记若存在则动态加载llm.client.direct-listModels中的clientSideListModels直接在浏览器内执行模型列表获取否则回退到经服务器 tRPC 的路径// src/modules/llms/llm.client.ts节选 let clientSideListModels: ... | undefined; if (!!transportAccess typeof transportAccess object (transportAccess as any).clientSideFetch) try { clientSideListModels (await import(./llm.client.direct-listModels)).clientSideListModels; } catch (error) { ... } // LLMs [CSM] Direct Execution if (clientSideListModels) models await clientSideListModels(transportAccess); // LLMs tRPC Execution经服务器 else models (await vendor.rpcUpdateModelsOrThrow(transportAccess)).models;其中 src/modules/llms/llm.client.direct-listModels.ts 的模块注释明确写道Client-side LLM model listing - Direct in-browser execution without client -- tRPC-server即完全绕开客户端与服务器之间的 tRPC 通道。各服务商的接入层也都有对应的标记与请求头处理例如src/modules/llms/server/anthropic/anthropic.access.ts 中定义了可选的clientSideFetch字段并在启用时附带ANTHROPIC_HEADERS_CORS请求头src/modules/llms/server/gemini/gemini.access.ts、src/modules/llms/server/openai/openai.access.ts 等同样声明了clientSideFetch在 src/modules/llms/vendors/ 下各家供应商的*.vendor.ts会依据用户配置如!!partialSetup?.csf计算clientSideFetch值并在*ServiceSetup.tsx中提供对应的开关 UI。从代码结构可以推断直连并非全局一刀切而是逐服务商、逐配置生效的开关——这正对应文档所说的位于服务 Advanced 设置中的 Direct Connection 开关。安全最佳实践基础安全绝不分享 API 密钥不要使用公用电脑一次性会话使用隐私浏览模式使用可信网络备份你的数据尤其因为清除浏览器数据即等于删除聊天记录。自行运行服务器时使用环境变量配置 API 密钥避免硬编码进代码或 UI 中明文暴露运行在可信基础设施上保持安装持续更新。小结TL;DR你的 API 密钥和聊天记录留在浏览器中服务器只负责把请求转发给 AI 服务需要便利性可用 big-agi.com需要完全控制权可自行部署开启 Direct Connection 可让浏览器直连 AI 提供商进一步减少服务器参与启用 Sync 后数据才会上传服务器端且通过行级安全RLS按用户隔离由于数据只在单浏览器本地请务必养成备份习惯并在共享设备上保持警惕。【免费下载链接】big-AGIAI suite powered by state-of-the-art models and providing advanced AI/AGI functions. Includes AI personas, AGI functions, world-class Beam multi-model chats, text-to-image, voice, response streaming, code highlighting and execution, PDF import, presets for developers, much more. Deploy on-prem or in the cloud.项目地址: https://gitcode.com/GitHub_Trending/bi/big-AGI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考