一台服务器撑起三千人:我在内网做AI云工作台,踩过的坑和想明白的事

0 评论 153 浏览 0 收藏 22 分钟

在企业内网部署AI云工作台,服务3000名用户,作者踩过云电脑的坑、争论过AI能否删文件,最终提炼出“权限跟着可逆性走”等核心原则。本文不仅分享架构设计与安全闸门,更深入剖析五个关键取舍和算力瓶颈下的额度策略,附自查清单,为内网AI同行提供实战参考。

过去一年多,我牵头做了一个部署在企业内网的AI云工作台:1到2台服务器、3000名注册用户、每人500MB云工作区,AI能在沙箱里真正干活——分析数据、画图、产出Word/Excel/PPT。这篇文章不只是讲方案,更多是讲我们踩过的坑、吵过的架,以及我在这之后想明白的几件事:为什么云电脑是个美丽的误会、为什么AI可以移动文件却永远不能删除文件、为什么我说额度是产品决策而不是技术优化。文末附数据示例、场景演练和一份我踩完坑整理的自查清单,供准备做内网AI的同行对照。

一、从AI能不能删文件这场争论说起

整个项目里,我们内部争论最久的问题不是选型、不是架构,而是一个看起来很小的问题:AI到底能不能删用户工作区里的文件?

主张给的一方理由很充分:你不是要做真正干活的AI吗?干活就要整理文件,整理就免不了删除,只给移动权限是半吊子。反对的一方只问了一句话:AI删库了,谁负责?当时谁也说服不了谁。

我最后站到了反对那一边,并且说服自己的过程让我提炼出一条后来贯穿整个产品的原则:权限跟着可逆性走。移动文件是可逆的组织性操作——目标被覆盖时先进回收站、原文件留版本快照、全程记审计,最坏情况能一键退回来;而删除是不可逆的数据销毁,更要命的是,模型输出是可能被诱导的,把不可逆交给一个可能被诱导的东西,这个风险我不接。所以最终的设计是:建目录、移动文件、查看版本给AI,删除只留给用户界面按钮。

先把这件事摆在最前面,是因为它很能代表这个项目的气质:每一个听起来理所当然的功能,都值得问一句出事了怎么办。后面的所有设计,基本都是这句话的展开。

二、云电脑是个美丽的误会:白板上的一笔账

坦白说,项目立项时我们也认真评估过云主机路线——给每个用户开一台虚拟电脑,把模型和工具装进去,甚至早期方案里还写过”每用户容器作为演进目标”。回头看,那是我们离深渊最近的一次。

把我拉回来的是一道在白板上算的账。按桌面虚拟化的通行配置,每人2个vCPU、4GiB内存、40GiB磁盘:3000人全部在线需要6000个vCPU、12TiB内存、120TB磁盘,大约30到50台服务器;就算只按5%的并发率算,也要300个vCPU和600GiB内存——单台服务器已经顶到极限,而且这台机器再也没有余量跑模型推理了。会议室安静了半分钟,然后大家达成共识:这条路在数学上就不成立。

但那场讨论真正有价值的是后半段:我们到底要云电脑干什么?逐条问下来,用户要的无非是”我的文件在云上、AI替我干活”。他们要的不是一台归自己所有的操作系统实例。把这个需求翻译错,才会去造VDI;翻译对了,产品形态自然就是云工作台:一个类似大众AI助手网页版的对话入口,加上一个用户与AI共享的云端工作区——AI在沙箱里执行分析、生成文档,用户在工作台里预览、编辑、下载、回滚版本。

我后来观察了不少同类项目,相当一部分就是被云电脑这个词带偏的:先被概念锚定了形态,再用采购预算去填数学上填不平的坑。这也是我想给同行的第一个提醒:先翻译需求,再选形态,顺序反了代价极大。

三、一个进程、四道闸门:我不信任提示词

单机支撑3000人,架构上最反直觉的决策是:一个服务进程服务全部用户,而不是每个用户一个运行环境。这在评审时被质疑过隔离性够不够,我的回答是:对话和文件操作是典型的异步I/O场景,150路并发会话的内存开销不到3GiB,单进程扛得住;而用户之间的边界,不靠每人一个盒子来划,靠一套收敛的控制点——我们内部叫四道闸门:

第一道,工具白名单:模型能调用的工具是封闭清单,默认没有Shell、没有包管理器、没有任意网络访问;

第二道,参数校验:每次调用按固定顺序过Schema合法性、路径归属、业务参数、配额与沙箱准入;

第三道,归属校验:所有文件操作必经唯一的文件入口组件,它在系统层面把根目录锁死为当前用户的目录,路径穿越、绝对路径、控制字符被结构性拒绝,而不是靠校验函数;

第四道,配额与额度预检:磁盘配额由操作系统内核强制裁定,算力由每用户每日token额度控制,都在调用模型之前预检。

数据层同样收敛:数据库用国产达梦,行级隔离保证任何查询只返回当前用户的数据;向量检索强制按用户过滤;代码执行进沙箱——零网络、文件系统只读、只挂载当前用户目录、不持有任何凭据;AI要搜索或发邮件,只能走带域名白名单和全量审计的出站代理。

为什么把边界做成这样?因为我的一个基本立场:提示词管行为,结构管安全,两者不能混。我见过不少团队把已提示模型不得访问他人数据写进安全设计,我对此是不信任的——提示注入是真实存在的攻击面,你防不住一个决心绕过你措辞的人。但结构防得住:沙箱里根本没有别人的目录,穿越请求到不了文件系统那一层。

这个立场是被教训买来的。我们的v3方案里埋过12处技术错误,最惊悚的一个是沙箱启动参数的语义被写反了——照那版文档部署,本该零网络的隔离沙箱会反向开启全局网络。幸好它在评审中被抓住。这件事让我对”文档里写的安全”彻底祛魅,v4立了条规矩:每一条安全声明都必须配可执行的验收用例,说得出就要测得到。

四、让AI真正干活,且永不越界:五个取舍

真正干活是项目的第三条硬约束,也是最难落地的。能聊天到能干活之间,我们做了五个设计取舍。

取舍一:三视图,对应说—管—等三种心智。会话视图负责对话,流式输出、工具执行卡片、引用来源;工作台视图负责文件,文件树、预览、版本历史,顶部常驻配额条;任务视图负责长任务,进度条、已用时、产物链接、可取消可重试。少一个视图,干活的体验就断一截。

取舍二:产物必须回流而不是飘在聊天里。AI在沙箱生成的所有产物,先写入沙箱内唯一可写的产物目录,结束后由平台逐一校验类型、经唯一文件入口落盘、计入配额、生成版本记录,再推送产物卡片。可执行文件被结构性拒绝回流。聊天记录里的成果会沉底,工作区里的才是资产。

取舍三:AI永不覆盖用户。这是我认为在人机共享工作区形态里最容易被忽略、又最容易挨骂的一个点。规则是:每个文件维护自增版本号,所有写入必须携带基准版本;版本不匹配时不覆盖,AI写入自动改道为带时间戳的AI副本并在会话里说明;用户编辑中持有120秒心跳续期的编辑锁,AI写入一律走副本。有人问我这样AI会不会太怂,我的看法是:用户对AI的信任是一次性的,覆盖掉他刚改的内容一次,这个产品在他心里就死了。

取舍四:版本快照不占配额。AI写入前、用户保存前、文件被移动覆盖前,自动生成快照,每文件保留3个版本或7天。关键决策是快照存放在工作区之外的独立存储池、不占用户的500MB配额——否则用户的实际可用空间会凭空缩水两三成,然后天天来找管理员要额度。快照池独立还有一个好处:用户把配额写满,不会影响快照和上传暂存,故障被物理隔离在各自的池子里。

取舍五:能力边界呼应第一节的争论。可逆的给AI,不可逆的只给人。删除永远由用户按钮触发;AI在配额写满时可以主动列出大文件、给出清理建议,用户一键确认后由界面侧执行——AI可以提议,执行权在人。

五、真正的瓶颈是算力:我坚持最久的一个设计

这一节是我整个项目里态度最强硬的部分,先坦白一个弯路:项目早期我盯着磁盘算容量,500MB乘3000人等于1.43TiB,反复推演”够不够”。后来发现根本不用担心——按35%的实际占用率,1TiB可用分区就够,配块2TB固态盘还有余量。内存同理。

真正稀缺的是GPU的token吞吐。单张高端显卡跑量化后的14B模型,一天大约产出6000万token;3000注册用户里若有900个日活、人均每天6万token,需求就是5400万,超过单卡安全水位。换句话说:存储轻松撑三千人,算力只能稳稳服务几百人的重度使用。看清楚这一点之后,额度体系就从”可选项”变成了必选项:

  • 每用户每日默认4万token,全局每日预算3600万(单卡产能的60%);
  • 额度用完,生成类请求排队30秒后明确提示今日算力额度已用完,次日零点恢复;浏览、下载、预览不受影响;
  • 全局预算紧张时按当日用得越少越优先放行,保护轻度用户;
  • 提额是管理员动作,走审批并记审计。

方案评审时这个设计被质疑过是不是太抠了,用户体验在哪。我的回答写进了方案文档,也是我坚持加粗的一句话:不做额度,故障形态是所有人一起变慢,所有人都受害、没人说得清原因;做了额度,故障形态是少数重度用户当天受限,多数人体验稳定。用可解释、可沟通的限流,替换不可解释的卡顿——这是产品决策,不是技术优化。

说句可能得罪同行的话:我见过不少企业内网AI项目,买显卡的时候比算容量的时候认真多了。算力不规划额度,等于把一台公共资源变成先到先得的抢夺战,最后轻度用户沉默流失,重度用户抱怨卡顿,两头不讨好。配套的设计红线同样要明确:日活900、峰值并发80,越线后加卡、加分片,而不是降低隔离标准。

六、一次干活请求的完整链路

空讲理念容易飘,用一个典型场景把系统串一遍。角色是虚构的销售运营李敏,工作区已用402.1 MiB(配额500 MiB),请求是:读取sales.csv,按区域汇总销售额,画一张柱状图,导出Excel和一份Word汇报,放到reports文件夹下。

第1步 身份与上下文:请求经认证网关校验,网关剥离客户端一切可伪造的身份头,签发有效期不超过60秒的内部凭证;平台加载会话历史、配额视图与当日剩余额度(李敏当日已用31,200,剩余8,800);

第2步 额度闸门:剩余额度高于单轮预估消耗(4,000),放行;

第3步 能力闸门:模型返回的工具调用计划——读文件、建目录、执行代码——逐个过白名单、参数校验、路径归属、准入检查;

第4步 沙箱执行:代码在互动级沙箱内跑,时限30秒、内存384 MiB、半核CPU、零网络、用户目录只读,产物写入隔离目录(图表0.4 MiB、Excel 1.1 MiB、Word 2.4 MiB);

第5步 产物回流:三个文件经唯一入口落盘到reports目录,计入配额并生成版本记录;工作区用量从410.3 MiB(含刚上传的8.2 MiB源数据)变为414.2 MiB,占用率83%,配额条转黄;

第6步 记账:本会话累计消耗6,800 token,异步落库;工具调用、配额变化全部进审计日志。

业务验证点:评估同类产品时建议核对三件事——AI产物是否计入配额并有版本记录;额度预检发生在调用模型之前还是之后;越权与配额事件是否可审计。这三点决定”能干活”是可持续的能力,还是一次性的演示。

七、四条场景演练:干得成、盖不住、超得了、出不去

这四条是我建议拿来当验收用例用的,分别对应四个关键承诺。

场景A

正常闭环:即第六节的链路——李敏30秒内拿到图表、Excel与Word汇报,产物出现在工作台、计入配额、生成版本,她不需要了解沙箱与配额的任何细节。

场景B

冲突改道:王磊正在工作台在线编辑”数据说明.md”,又在另一个会话里让AI更新数据说明文件。系统判定该文件持有编辑锁,AI写入不覆盖原文件,自动改道存为带时间戳的AI副本并在会话中说明;王磊保存时收到提示,可选择查看差异或另存合并。双方内容零丢失,改道事件进审计。

场景C

额度耗尽:赵倩当天用完4万token,晚上又提交汇总200个文件生成周报。请求排队30秒后提示次日零点恢复;她仍可浏览、预览、下载已有文件。次日额度自动重置;确有高频重度需求的岗位,管理员提额并留审计——重度需求走管理通道,不挤占公共算力。

场景D

越权尝试:用户B在对话中诱导AI读取上级目录里别人工作区的工资表。请求在文件入口处被结构性拒绝——入口的根已锁死为B自己的目录,与绝对路径一律不通过;即便换成代码执行,沙箱也只挂载了B的目录且零网络。失败尝试记入越权审计,供管理员回溯。

八、几点个人判断

最后把散在各节的观点收拢一下,这是我个人最想传递的四条判断,未必都对,欢迎讨论。

判断一:内网AI的死穴在最后一公里,不在模型。大部分项目的差距不在能不能跑通演示,而在敢不敢交给员工日常用。日常使用意味着冲突、超额、误操作、审计,这些无聊的问题不解决,演示结束之日就是项目归档之时。

判断二:提示词管行为,结构管安全。凡是写在提示词里的安全承诺,都应视为不存在;凡是能用结构锁死的边界,就不要留给模型的自觉。这不是对技术不信任,是对攻击面的尊重。

判断三:安全声明没有验收用例,等于没说。我们v3的12处错误里,最危险的都是文档说安全、部署即翻车的类型。每条声明配一个可执行的用例,是让文档长出牙齿的唯一办法。

判断四:约束是最好的产品经理。1到2台服务器禁止每用户容器这些当时看起来苛刻到不讲理的前提,反而逼出了云工作台这个更准确的形态。我甚至有点后怕:如果资源宽裕,我们大概率顺手做成VDI,然后把成本问题留给采购环节去吵架。所以现在遇到项目资源紧张,我会先问一句:这到底是障碍,还是一份伪装成障碍的设计输入?

往前看一年,我的预期是:内网AI产品的分化点不在谁的模型更大,而在谁先把配额、额度、版本、审计这些”无聊的能力”做扎实。模型能力在拉平,工程与产品的扎实程度在拉开。

九、一份踩完坑整理的自查清单

如果你的企业正准备上内网AI,这八个问题是我在这个项目里交过学费之后整理的,建议在立项前逐条过一遍:

  • 部署形态|要问:几台服务器、服务多少人?|系统需支持:单机基线起步、分片扩容,而非每用户容器;
  • 数据边界|要问:哪些数据绝不能出内网?|系统需支持:全组件本机部署,唯一出站通道带白名单与审计;
  • 用户隔离|要问:一个用户能不能看到别人的文件?|系统需支持:唯一文件入口、数据库行级隔离、沙箱挂载白名单三重边界;
  • 空间配额|要问:每人多少空间,快照算不算?|系统需支持:内核强制配额、快照不占配额、档位与提额审批;
  • 算力额度|要问:重度用户会不会拖垮所有人?|系统需支持:每用户日额度、全局预算、”用得少者优先”的公平排队;
  • AI操作边界|要问:AI可以删文件吗?|系统需支持:可逆操作授予AI、删除仅限用户界面触发、AI可提议不可执行;
  • 冲突处理|要问:AI会覆盖用户刚改的内容吗?|系统需支持:基准版本校验、AI副本改道、编辑锁与冲突审计;
  • 验收闭环|要问:安全与能力声明怎么证明?|系统需支持:每条声明对应可执行用例(本文场景A至D可直接当起点用)。

十、写在最后

回头看这一年多,这个项目教会我的不是某个技术点,而是一种做产品的方式:把每一句理所当然都按住问一遍出事了怎么办,把每一个约束都当成设计输入而不是抱怨理由。我的文件在云上,AI替我干活——这句话离普通员工越近,内网AI的价值刻度就越高;而让它变近的,恰恰是删权限之争、500MB之争、额度之争这些吵出来的细节。

本文由 @天涯轩 原创发布于人人都是产品经理。未经作者许可,禁止转载

题图来自AI生成,由作者提供

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
海报
评论
评论请登录
  1. 目前还没评论,等你发挥!