如何在不重写产品的前提下把有状态 LLM 平台推向生产
有状态 LLM 平台的生产架构,是一组让 AI 应用能够面向多个用户持续、安全运行的系统边界。它涵盖权威数据、身份、对象访问、昂贵的后台工作、外部接口、部署、恢复和验证。模型调用只是这个运行系统中的一个组件。
本文只回答一个明确问题:如何把功能丰富、原本用于本地研究的有状态 LLM 应用,转变为可控的共享试点?是否需要知识图谱,由我们的AI 智能体图工程决策指南负责回答。通用的从原型到生产指南也拥有独立搜索意图。本文关注的是一套已经包含有价值产品逻辑的平台,应当按照什么依赖顺序完成生产化。
有状态 LLM 应用与演示版有什么不同?
演示版可以把上下文留在浏览器会话里,从文件重新加载样例数据,并同步等待模型响应。共享平台不能依赖这些假设。用户会期待数据在部署后仍然存在,权限在所有接口上保持一致,长时间操作在超时、刷新或失败之后仍然能够被理解和恢复。
本项目的起始应用已经包含结构化领域数据、图操作、文档摄取、有依据的对话、访谈、模拟和评估等大量产品逻辑。缺口并不在功能清单,而在于连接这些功能的各条路径缺少明确的运行责任。
| 适合研究的假设 | 共享平台的要求 | 保持隐式时的故障 |
|---|---|---|
| 文件就是实时状态 | 单一权威事务存储 | 部署或并发用户产生不一致数据。 |
| 只有一个可信操作者 | 服务端验证身份和对象访问 | 合法用户可以访问他人的数据。 |
| 请求一直等待模型 | 有归属、可观察、可恢复的任务 | 超时看起来像失败,重试会重复工作。 |
| 浏览器是唯一客户端 | 浏览器、API 和 MCP 使用同一策略 | 新接口绕过只存在于 UI 的规则。 |
| 进程运行就代表健康 | 依赖感知的就绪检查和回滚 | 流量进入无法给出正确结果的应用。 |
| 手工测试证明可发布 | 自动检查加代表性流程 QA | 跨层回归在每次变更后重复出现。 |
按七层依赖顺序完成生产化
顺序至关重要。先打磨界面再解决持久化和访问控制,只会让不稳定行为更容易展示。先开放外部 API 再统一授权,则会制造第二套安全模型。因此,每一层基础都要先获得稳定责任人,之后才能扩大上层能力。
1. 先定义运行边界,再选择基础设施
目标是受控初始发布,而不是宣称拥有全球冗余的企业基础设施。这个目标给出了直接验收标准:可重复的 HTTPS 部署、持久数据、受控入驻、可恢复发布、可用日志,以及一份明确的后续扩展与可用性工作清单。
准确描述边界可以避免架构表演。对于设计合作伙伴试点,单个应用任务和单可用区数据库可能合理,前提是故障模式、备份和升级路径已经记录。但这并不等于高可用。明确边界之后,团队可以在真实使用量值得投入时购买下一层可靠性。
2. 将权威运行状态迁移到 PostgreSQL
应用原本拥有便于携带的种子文件和本地数据流,这些设计在研究阶段很有用。Wavect 保留文件作为受控启动材料,同时把领域对象、本体、用户、组织、访问授权、会话和机器凭据迁移到 PostgreSQL 支持的存储层。
关键选择是所有权,而不是数据库品牌。每个领域都获得存储或仓储契约、连接池和明确的增删改查行为。启动时仍可确定性地初始化空环境,但运行中的容器不再把可变文件视为事实来源。数据库集成测试随后验证了共享部署实际使用的持久化行为。
3. 集中管理身份、租户成员关系和对象授权
身份验证只能证明请求是谁发出的,不能证明此人可以打开某个对象、图或任务。因此,平台把可撤销的服务端浏览器会话、管理员角色、组织成员关系和用户级对象授权统一到一条访问决策路径。浏览器路由、JSON API 与外部客户端都必须询问同一个问题。
OWASP API1:2023 对象级授权失效描述的正是这条边界:每个接收对象标识符的端点,都必须验证已登录用户是否有权对该对象执行请求操作。UUID、有效 JWT 或隐藏按钮都不能替代授权检查。
实用测试矩阵需要交叉覆盖角色、组织、对象和传输方式。普通用户不能通过修改标识符获得访问权。组织管理员必须被限制在自己的组织内。会话或 API 密钥被撤销后,应当立即失效,而不是等待下一次部署。
4. 把长时间 LLM 工作视为有归属的任务
文档提取、访谈、画像生成和模拟可能持续超过普通 HTTP 请求。单纯延长 Web 服务器超时只能缓解一个症状,无法回答任务属于谁、重试是否安全,以及用户如何知道真实状态。
Wavect 引入了与后端实现无关的任务契约,包括类型化状态、处理器注册、用户级并发限制、幂等键、协作取消、结果与错误存储、完成任务过期以及优雅关停。轮询端点提供简单基线,Server-Sent Events 提供应用进度和心跳,同时不让浏览器连接成为任务本身的所有者。
| 任务属性 | 必须回答的问题 | 发布证据 |
|---|---|---|
| 归属 | 哪个已认证用户可以查看或取消? | 跨用户访问测试默认拒绝。 |
| 幂等性 | 同一操作提交两次会怎样? | 重复请求对应一次预期执行。 |
| 进度 | 能否区分运行、停滞、失败和完成? | 轮询与事件路径显示相同状态。 |
| 取消 | 昂贵工作能否在安全边界停止? | 处理器配合取消并记录最终状态。 |
| 关停 | 部署期间会发生什么? | 队列完成排空或标记未完成工作以便恢复。 |
进程内执行器是试点阶段的有意权衡,而不是最终扩展方案。任务契约让系统以后可以迁移到持久队列,而无需重写每个产品流程。重点在于把任务生命周期与最初执行它的后端分离。
5. 为浏览器、API 与 MCP 明确定义安全契约
外部 API 被重组为模块化路由组,共享依赖、标准错误、范围检查、对象授权和限流。用户会话、JWT 和哈希 API 密钥服务不同客户端,但最终都进入同一领域权限体系。管理员还可以针对特定对象关闭外部访问,而不是默认暴露全部能力。
MCP 同样需要这些纪律。工具调用不会因为由智能体发起就自动可信。标识符验证、读写范围分离、速率限制和错误清理仍然必要。当前的Model Context Protocol 授权规范要求授权请求绑定目标资源,并验证令牌受众。新集成应遵循当前协议,不能复制旧实现的会话或传输假设。
6. 让部署健康反映用户真正依赖的服务
基础设施即代码定义网络、容器服务、私有数据库、负载均衡、TLS、DNS、镜像仓库、日志与权限。工作流从提交构建带版本镜像,更新服务并等待稳定。应用健康端点还检查数据库连接,所以一个无法访问权威存储的活进程不会被视为就绪。
部署控制必须包含失败动作。AWS 文档说明了部署熔断器与 CloudWatch 告警,它们可以检测失败的 ECS 部署并回滚到上一个已知正常状态。在本项目中,基于健康状态的部署和回滚属于发布设计,而不是运维人员临时补救。
7. 将自动化测试与反复浏览器 QA 结合
单元测试分别覆盖图存储、检索、依据、安全和任务行为。独立集成测试轨道使用真实 PostgreSQL,验证持久化、身份验证、API 与 MCP。这样既保留快速反馈,又没有模拟掉共享环境中最容易失败的边界。
自动化不能替代探索式 QA。反复浏览器测试发现了登录过期、选择状态、长任务进度、图编辑、计算、主题同步、错误和加载行为中的交互问题。每个缺陷都在最低且稳定的责任层修复,并在可行时加入回归测试。
这种按风险排序的方法与NIST 安全软件开发框架一致。该框架将安全开发分为组织准备、软件保护、安全软件生产以及对残余漏洞的响应。NIST 明确把它定位为可调整的风险改进基础,而不是适用于所有项目的固定清单。
哪些证据能让受控试点可信?
生产就绪不是代码仓库的二元属性,而是需要在运行边界内用证据支持的发布主张。对于这类平台,最低有效证据集如下:
| 边界 | 发布前证据 | 需要说明的残余风险 |
|---|---|---|
| 数据 | 针对 PostgreSQL 的持久化和种子测试,以及备份恢复流程 | 迁移与恢复成熟度 |
| 访问 | 会话和令牌客户端的角色、租户与对象测试 | 管理员滥用与未来策略增长 |
| LLM 任务 | 重复、取消、超时、错误与关停行为 | 进程内队列的持久性与容量 |
| 外部接口 | 范围、限流、无效输入和清理后错误测试 | 协议演进与第三方客户端行为 |
| 部署 | 健康感知发布、可观察失败和已测试回滚 | 单任务与单可用区的可用性 |
| 用户流程 | 包含过期或部分状态恢复的代表性浏览器路径 | 大型交互界面中未覆盖的组合 |
为什么渐进式生产化优于重写
现有应用已经编码了来之不易的产品行为。重写会把可见技术债换成隐藏的产品回归风险。更快的路径是保留已验证流程,在其下方建立稳定责任边界,再基于新基础修复缺陷。
这不代表保留所有旧选择。文件不再是权威运行状态,访问检查离开单独路由,长任务不再属于某个请求,API 依赖变得明确,共享界面模式替代局部修补。渐进式生产化是带证据链的选择性替换,不是无限打补丁。
如果你的产品也有类似结构,Wavect 的AI 赋能与架构服务覆盖评估、系统边界、生产加固与交接。匿名的分析平台案例提供了另一个不公开客户名称的复杂数据产品稳定化实例。若要决定保留还是重建,请使用从原型到生产指南,或带上当前运行限制申请生产架构评审。
有状态 LLM 平台生产架构常见问题
什么是有状态 LLM 平台?
LLM 应用应当先生产化哪一部分?
长时间 LLM 工作应当留在 HTTP 请求中吗?
MCP 服务器应如何访问平台数据?
成功试点是否代表高可用?
什么时候值得重写?
最终思考
当每个重要状态和权限都有明确责任人时,有状态 LLM 平台才真正可运营。PostgreSQL 负责持久运行数据,中央策略负责租户与对象访问,任务层负责昂贵工作,API 与 MCP 路由复用这些决定,部署健康反映真实依赖,测试与浏览器 QA 提供发布证据。
保留用户已经认可的产品行为,替换无法支持共享运行的基础。最重要的是诚实命名运行边界。一个明确说明权衡的受控试点,比含糊的生产就绪声明更能体现工程质量。
