当前位置: 首页 > news >正文

察元AI单机版与多用户版同源 governance模块的退化方式

察元AI智能体桌面单机版的代码跟多用户版本(chayuan-server 完整服务)共用一份 git 仓库。这种 同源 不是巧合,而是有意为之的设计。这一篇讲单机版怎么从多用户版退化出来,governance 这一类企业模块在单机模式下变成什么样。
先看不同形态的差别。多用户版 chayuan-server 跑在服务器上,监听公网或内网,多个用户各自登录,每个用户有 KB 隔离、配额、审计、RBAC。单机版 chayuan-desktop 是 Tauri 加 sidecar 跑在一台电脑上,没有用户概念,所有数据是当前 OS 用户的,鉴权关掉。
如果两个版本是不同代码库会怎样。最直接的问题是 重复维护。同样一个 RAG 检索逻辑,两个仓库各写一遍,bug 修两遍,特性加两遍。新厂商接入要在两边都做。结果是要么单机版落后,要么多用户版落后。免费开源的AI软件 的资源不多,浪费在这种重复上得不偿失。
同源的实现思路。一份代码,两套部署形态。所有的核心业务模块(kb_query、retrieval、knowledge_source、tools_factory 等)跟部署形态无关。差异在外围模块和配置层。
环境变量切换。chayuan-server 启动时读 CHAYUAN_DESKTOP_MODE 环境变量。单机版下 Tauri 注入 CHAYUAN_DESKTOP_MODE=1,sidecar 据此切换到单机模式。多用户版下这个变量为空,走完整模式。
单机模式下的退化。鉴权模块(authz)退化为 always allow,所有请求被视为合法。用户上下文退化为单一隐式用户。配额模块(quota)退化为不限速。审计模块(audit)退化为本地日志,不写中央审计库。RBAC(role-based access control)退化为不校验角色。这些退化不是删代码,是模块内的 if 分支。
governance 模块在单机版的形态。governance 包含审计、配额、RBAC、PII 脱敏、数据血缘等子模块。单机版下:审计仍写本地日志,给用户自己看;配额关闭;RBAC 跳过;PII 脱敏可选开启(用户可在设置里勾);数据血缘仍记录,给用户排查诊断用。整个 governance 模块在单机版变得轻但仍存在。
为什么不直接删掉 governance。删掉的话单机版升多用户版要重写一遍。保留之后切换成本几乎是零,只需要改 CHAYUAN_DESKTOP_MODE 这一个环境变量。这种 永远准备好升级 的设计让单机版用户后续要部署多用户系统时无需迁移数据。
多人单机部署。某些客户场景需要 一台后端服务器加多个 GUI 客户端,但每个客户端仍按 单机模式 工作(不区分用户)。这种用法叫 共享单机模式。chayuan-desktop 支持这种用法,但前提是这台后端不是公网开放,是部门内的私有部署。
multi-tenant 模式。如果客户需要正经的多租户,应该部署多用户版(chayuan-server 完整服务),单机版不是设计来扛多租户的。multi-tenant 在 governance 的 tenancy 子模块里实现,单机版下这个模块禁用。
数据迁移路径。单机版用户后期升级到多用户版,CHAYUAN_ROOT 下的所有数据可以迁过去。多用户版接受单机模式的数据导入,自动把所有 KB 归到一个默认用户名下,钥匙重新加密。这是 同源 的实际收益之一:不会因为升级被锁死。
测试覆盖。两套形态共用一份测试集。pytest 跑 chayuan-server 测试时,会同时跑多用户场景测试和单机场景测试,每个测试函数加 mode=desktop 或 mode=multi 参数化。这种覆盖确保新 PR 不会一边修好另一边坏掉。
社区版与企业版。同一份代码可能演化出社区免费版(AGPL-3.0)和企业商业版的差异。chayuan-desktop 当前所有功能都在 AGPL-3.0 下开源,没有功能锁。企业版的差异主要在合规、审计、审批、白标这些方面,跟核心 AI 能力无关。这种纯净的开源策略对 免费开源的AI软件 用户最友好。
WPS AI 插件 chayuan-wps 不参与单机/多用户的形态判断,它只是一个 HTTP 客户端,连什么后端就用什么后端。在单机版后端下加载项体验是 单机模式,在多用户后端下加载项体验是 多用户模式(要登录、要带 token)。
同源代码的好处对维护者最直接,对用户最间接。用户不感知这些代码组织上的细节,但能从中受益的是产品迭代速度和稳定性。chayuan-desktop 单机版用户得到的功能强度跟多用户版基本一致,差异只在 是不是给你看用户那一栏。

http://www.jsqmd.com/news/908027/

相关文章:

  • RailX架构:超大规模LLM训练的网络革新与优化
  • 四足机器人越野行走:基于语义感知的自适应运动控制框架
  • SWAT建模效率翻倍:用ArcGIS Pro自动化处理中国土壤数据库并生成土壤库
  • 长文本开放域问答:稀疏注意力与对比检索的技术融合与评估反思
  • ROS2的DDS隔离术:用ROS_DOMAIN_ID轻松搞定多机器人分组,避免消息串扰
  • 跨电脑同步私库 单机用户的现实选项
  • 避坑指南:惠普光影精灵2升级固态硬盘后,如何确保系统从新盘启动?
  • 游戏物理引擎实战:用GJK算法搞定Unity/Unreal中的复杂碰撞检测
  • RuoYi-Vue + PostgreSQL实战:除了改驱动和URL,别忘了配置Quartz和修复这些Mapper坑
  • 别再当‘黑盒’了!用PyTorch钩子函数给ResNet模型做个‘X光透视’(Grad-CAM实战)
  • 避开这些坑!GD32F4xx定时器配置常见误区与实战排错指南
  • Proteus 8.13仿真STM32F103C8避坑指南:从新建工程到供电网配置的完整流程
  • 从模型到机器人:如何用YOLOv5s.onnx和ROS Melodic/Noetic为你的移动机器人打造“视觉大脑”(Ubuntu 20.04环境)
  • FreeRTOS任务调度“慢镜头”回放:用SystemView揪出优先级反转的元凶
  • Arduino避障小车:从硬件选型到算法实现的完整指南
  • 给老MacBook Air续命:保姆级Fedora 35安装与Wi-Fi驱动修复全记录
  • 基于Arduino与WS2812B的64像素俄罗斯方块游戏机设计与实现
  • 用Arduino与纸板制作四自由度机械臂:从PWM控制到结构设计全解析
  • AI应用实战:从技术原理到工程落地的核心方法论
  • 金蝶K3 Wise老用户必看:这个单据导入导出工具,帮你把Excel玩成万能接口
  • 基于ESP8266的便携式Wi-Fi学习工具:从硬件设计到产品化实践
  • 告别电机狂转!Arduino连接L298N驱动板最常见的5个接线与供电问题排查
  • 从靶场到实战:手把手教你用Burp Suite爆破SSRF端口(CTFHub实战复盘)
  • 别再让Ubuntu偷偷升级内核了!手把手教你用apt-mark hold锁定20.04特定版本
  • 别只复制粘贴!Allegro 17.4中Copy、Z-copy与Sub-drawing的精准应用场景拆解
  • 无接触睡眠感知技术解析:从Soli雷达原理到智能家居实践
  • 加密市场周期分析:构建风险管理仪表盘与逆向投资策略
  • 责任链三剑客——事务日志监控,注解驱动拼拦截器
  • SpeakFaster:基于大语言模型的AAC缩写扩展系统,为运动障碍者提升60%输入效率
  • 告别Putty!Tabby终端保姆级安装与SSH/SFTP配置全攻略(Windows版)