ClawAI 是如何构建的
十八个可独立部署的服务,每个服务都拥有自己的数据库,通过事件驱动的主干进行协调。响应在生成时流动,并且每一层都有自己的防御。
最后评论 2026-07-27
ClawAI 是如何构建的
ClawAI 是单个反向代理后面的 18 个可独立部署的服务。身份验证、聊天、路由、连接器、内存、文件、研究、工作区、图像生成、文档导出、计费、审计和日志记录每个都作为自己的进程使用自己的数据库运行。该网络应用程序通过一个 API 表面到达所有这些。
原因是遏制。缓慢的提供程序、文件转换卡住或导出失败都无法让聊天停止,因为它们不共享进程、连接池和数据库。每个服务都是自行部署、扩展和回滚的。
- 18
- 可独立部署的服务
- 每项服务一项
- 从来没有共享数据库
- HTTP + 事件
- 同步调用加上异步事件总线
- 一个入口点
- 一切面前的单一反向代理
服务
并非每项服务从外部来看都很有趣。这些是单个请求往往会接触到的内容,大致按照接触它们的顺序排列。
- 验证PostgreSQL
- 帐户、会话、令牌发行和刷新轮换、角色和权限集。
- 聊天PostgreSQL
- 对话和消息、上下文组装、流式执行和多模型编排。
- 路由PostgreSQL
- 对每条消息进行分类,应用主动模式和任何策略,并使用其后备链记录决策。
- 连接器PostgreSQL
- 提供者凭证、模型目录、功能标志和持续健康检查。
- 记忆和背景PostgreSQL + pgvector
- 内存记录、建议队列、上下文包及其版本以及语义检索。
- 文件PostgreSQL
- 上传、安全扫描、文本提取、OCR、分块和保留。
- 研究PostgreSQL
- 通过网络搜索、页面获取和证据收集来获取答案和来源。
- 工作空间PostgreSQL
- OAuth 连接到十二个第三方工具、网络钩子、计划同步和跨工具搜索。
- 图像生成PostgreSQL
- 图像渲染时的图像请求、提供程序适配器和每步进度。
- 文档生成PostgreSQL
- 将答案呈现为 PDF、DOCX、CSV、HTML、Markdown、TXT 和 JSON。
- 计费PostgreSQL
- 计划、订阅、版本化价格、发票和津贴执行。
- 审计MongoDB
- 谁做了什么的不可变记录,加上每个津贴数字所源自的使用分类账。
- 记录MongoDB
- 来自每个服务和浏览器的结构化日志,保留在滚动窗口中。
每个服务都会为其拥有的数据库命名。没有其他东西与之连接——需要其他数据的服务通过 HTTP 请求数据或对事件做出反应。
每个服务一个数据库
每项服务都拥有一个数据库,并且是唯一连接到该数据库的服务。没有共享模式,没有跨服务连接,也没有报告数据库悄悄读取每个人的表。
代价是有些问题需要两次调用而不是一次连接。好处是计费中的架构更改不会中断聊天,并且日志记录中的失控查询不会耗尽对话所依赖的连接池。
- 没有跨数据库查询
- 服务读取自己的表,而不读取其他人的表。来自其他地方的数据通过 API 调用或事件到达。
- 模式是私有的
- 服务可以更改自己的表而无需与任何人协调,因为没有外部消费者依赖于它们的形状。
- 每个服务运行的迁移
- 每个服务在启动时都会迁移自己的数据库。不存在每个人都必须等待的全球移民。
- 故障留在本地
- 缓慢或不可用的数据库会降低一项功能,而不是整个产品。
一个请求的一生
按发送和阅读答案之间会发生什么。
请求已验证
反向代理将其传递给聊天室,聊天室会验证您的访问令牌以及附加到您的角色的权限。
津贴已检查
账单确认您的计划允许您要求的型号,并且您的每日和每月津贴仍有空间。
消息被存储并公布
chat 将消息写入自己的数据库并发布事件。路由正在监听它。
路由选择模型
对消息进行分类,应用主动模式和策略,咨询连接器运行状况,并记录带有后备链的决策。
上下文已组装
聊天会要求内存提供相关记录和打包项目,以及相关块的文件,然后将它们合并到令牌预算内的提示中。
模型被调用并流式传输
聊天会调用提供程序,并在阶段、文本、推理和指标到达时通过服务器发送的事件将其转发到您的浏览器。
结果一直存在
答案、它的路由决策、它的令牌计数和它的上下文接收被一起写下来。
记录使用和审核
计费根据您的津贴计算成本,并审计记录该事件。内存提取也在这里运行。
步骤 1 到 7 是同步的 - 您等待它们。第 8 步和内存提取发生在答案已经显示在屏幕上之后,因此它们不会给您的体验增加任何延迟。
活动巴士
在您看到答案之前不需要完成的工作将作为 RabbitMQ 主题交换上的事件发布,并由任何关心它的服务处理。使用计量、审计记录和内存提取都以这种方式运行。
事件是聊天不需要知道审核存在的原因。聊天记录发生了什么;任何需要做出反应的内容都会订阅。添加消费者不需要对发布者进行任何更改。
- 话题交流
- 出版商说出发生了什么,而不是告诉谁应该听到它。消费者会遵循他们所关心的模式。
- 后退重试
- 失败的处理程序会随着延迟的增加而重试 3 次,这会吸收大部分的瞬时故障。
- 死信队列
- 重试后仍然失败的消息将进入死信队列,而不是被删除或阻止其后面的所有内容。
- 幂等处理程序
- 处理程序可以容忍同一事件两次到达,因为至少一次传递可以保证最终会到达。
- 一切都可审计
- 审计订阅每个领域事件,因此所发生事件的记录并不依赖于每个服务记住写入一个事件。
流媒体
答案通过服务器发送的事件到达,而不是轮询。当您发送消息时,连接就会打开并携带所有内容,直到答复完成或取消为止。
缓冲在代理和路径上的每个服务中被端到端禁用,因为缓冲的流只是带有额外步骤的缓慢响应。
同一通道承载文本生成、图像生成进度和长期运行的研究,因此界面有一种方式来显示飞行中的工作,而不是三种。
- 阶段变化
- 排队、路由、组装上下文、调用模型、完成——所以暂停总是有明显的原因。
- 内容增量
- 模型逐个生成答案文本。
- 推理增量
- 对于暴露其思维的模型,推理流与答案分开交付并单独渲染。
- 指标刻度
- 到目前为止的令牌、每秒的令牌、第一个令牌的时间以及时间实际去向 - 模型加载、提示评估或生成。
- 终端事件
- 最终使用摘要,或明确的错误或取消。溪流永远不会停止。
什么存储什么
四种商店,各有其所长。
- PostgreSQL
- 帐户、对话、路由决策、内存、文件、连接和计费的记录系统——每个服务一个数据库。
- pgvector
- PostgreSQL 内部的矢量相似性搜索,用于检索相关记忆和上下文包项目,而无需运行单独的矢量数据库。
- MongoDB
- 审计事件、使用分类帐和结构化日志:具有滚动保留窗口的大容量仅附加数据。
- Redis
- 缓存、速率限制计数器和短暂的协调状态。没有什么重要的东西只存储在这里。
安全机制
产品中存在的具体控制。没有认证声明 - 请参阅最后的注释。
- 访问和刷新令牌
- 具有刷新轮换功能的短期访问令牌。重复使用轮换令牌会使会话无效。
- 密码散列
- Argon2 与每个用户的盐。密码绝不会以任何可恢复的形式存储或记录。
- 基于角色的访问控制
- 角色携带显式权限集,由每个服务的每个端点上的守卫强制执行——而不仅仅是在接口中。
- 加密凭证
- 提供程序和连接器机密使用 AES-256-GCM 进行静态加密,并且 API 绝不会返回。
- 模式验证
- 每个请求正文在到达任何逻辑之前都会根据具有明确长度和大小限制的 Zod 模式进行验证。
- 速率限制
- 每项服务均按帐户进行限制,因此一个客户端无法耗尽其他每个客户端的容量。
- 安全标头
- 严格的内容安全策略,包括每个请求的随机数、HSTS 以及每个响应的标准强化标头。
- TLS 无处不在
- 从浏览器到边缘以及每个内部跃点的 TLS,并在服务之间进行证书验证。
- 日志编辑
- 在将任何内容写入日志之前,令牌、密码、API 密钥和授权标头都会被删除。
ClawAI 目前没有任何第三方安全认证 - 没有 SOC 2、ISO 27001、HIPAA。我们描述了上述机制,而不是暗示我们尚未获得保证。有正式要求的组织应向我们提出这些要求,以便将其纳入合作范围。
可观察性
每个服务都会以相同的形状发出相同的信号,并且它们都落在可查询的地方。回答“此请求发生了什么”的操作员不必打开十八个日志文件。
- 结构化日志
- 来自每个服务和浏览器的 JSON 日志,通过事件总线传送并保留在滚动窗口中。
- 请求关联
- 请求ID在浏览器中生成并通过每个服务跳来承载,因此一个标识符重构了整个路径。
- 审计事件
- 与安全和业务相关的操作的独立的、不可变的记录,与操作日志分开。
- 使用账本
- 每个按计量的呼叫都被写入分类帐条目。津贴数字来自账本,而不是来自可能漂移的计数器。
- 健康聚合
- 专门的服务会轮询所有其他服务并报告最新情况的综合视图。
当某事失败时
模型提供商会遇到断电、速率限制和缓慢的情况。该平台的建立是为了吸收它们,而不是将它们作为一个永远无法解决的旋转器传递给您。
- 后备链
- 每个路由决策都带有一个有序的备选列表。如果所选模型失败,则会自动尝试下一个模型并记录替换情况。
- 基于健康的回避
- 连接器会持续进行健康检查,并且路由器会跳过出现故障的提供程序,直至其恢复。
- 安全重试
- 事件处理程序容忍重复传递,因此重试可以纠正失败,而不是收取两次津贴。
- 错误是可见的
- 当每个选项都失败时,一个明确的错误将被写入对话中并推送到流中。不存在导致界面等待的静默故障。
- 爆炸半径
- 单独的进程和单独的数据库意味着故障会降低一项功能。图像生成失败并不会阻止您聊天。
网络内部采用相同的架构
此页面上的所有内容都描述了托管服务,但架构与其无关。相同的十八个服务、相同的事件总线和相同的数据模型可以部署在组织自己的网络内。
在该配置中,外部模型提供程序被您自己的 GPU 上提供的开放权重模型所取代,因此任何提示、文档或对话都不会离开您的基础设施。这是一个有范围的参与,而不是您可以购买的计划——我们会与您的团队一起确定规模。