数十亿(日志):使用 Cloudflare Developer Platform 扩展 AI Gateway

2024-10-24 13:00:47 英文原文

作者:Catarina Pires MotaGabriel MassadasNelson Duarte

新的模型和提供商不断涌现,可以理解的是,开发人员希望试验和测试这些选项,以找到最适合其用例的选项。

这就需要一种简化的方法来管理多个模型和提供商,以及一个集中的平台来有效地监控使用情况、实施控制和收集数据以进行优化。

人工智能网关

是专门为解决这些痛点而设计的。自推出以来2023 年 9 月,AI Gateway 在短短一年内成功代理了超过 20 亿个请求,从而为开发人员和组织提供了支持,因为我们九月生日周期间突出显示。借助 AI Gateway,开发人员可以轻松存储、分析和优化他们的 AI推理实时请求和响应。

在我们最初的架构中,AI Gateway 面临着重大挑战:日志(应用程序和 AI 模型之间数据交互的关键轨迹)只能保留 30 分钟。这种限制不仅仅是一个小小的不便;它对需要分析长期模式、确保合规性或只是在更长时间内进行调试的开发人员和企业构成了巨大障碍。

在这篇文章中,我们将探讨将日志存储能力从 30 分钟扩展到能够无限期存储数十亿条日志背后的技术挑战和战略决策。我们将讨论规模的挑战、数据管理的复杂性,以及我们如何设计一个不仅满足当今需求,而且还可以针对未来人工智能开发进行扩展的系统。

AI网关构建于Cloudflare 工人是一个在 Cloudflare 网络上运行的无服务器平台,允许开发人员编写小型 JavaScript 函数,这些函数可以在 Cloudflare 庞大的数据中心网络上、靠近用户的需要点执行,而无需担心平台可扩展性。

BLOG-2593 2

我们的客户使用多个提供商和模型,并且始终寻求优化他们的推理方式。当然,为了评估其提示、性能、成本并排除正在发生的问题,AI Gateway 的客户需要存储请求和响应。新请求会在 15 秒内出现,客户可以检查请求的成本、持续时间、代币数量,并提供反馈(赞成或反对)。

BLOG-2593 3

这种扩展方式使得一个帐户可以拥有多个网关,并且每个网关都有自己的设置。在我们的第一个实现中,后端工作人员负责存储实时日志和其他后台任务。然而,在快速发展的人工智能领域,实时数据与其提供的见解一样宝贵,有效管理日志数据变得至关重要。我们认识到,要真正为用户提供支持,我们需要提供一种解决方案,使日志不仅仅是暂时记录,而且可以永久存储。永久日志存储意味着开发人员现在可以随着时间的推移跟踪其 AI 应用程序的性能、安全性和操作见解,不仅可以立即进行故障排除,还可以对 AI 行为、使用趋势和系统运行状况进行纵向研究。

BLOG-2593 4

上图描述了我们的旧架构,它只能存储 30 分钟的数据。

通过 AI Gateway 跟踪请求的路径,如上面的序列所示:

  1. 开发人员发送一个新的推理请求,该请求首先由我们的 Gateway Worker 接收。

  2. 然后,网关工作线程执行多项检查:查找缓存结果、实施速率限制并验证用户为其网关设置的任何其他配置。如果满足所有条件,它会将请求转发到选定的推理提供程序(在此图中为 OpenAI)。

  3. 推理提供者处理请求并发回响应。

  4. 同时,当响应被转发回开发人员时,请求和响应详细信息也被分派给我们的后端工作人员。这个worker的角色是管理和存储这个事务的日志。

挑战:存储 20 亿条日志

第一步:实时日志

最初,AI Gateway 项目将请求元数据和实际请求主体存储在一个D1数据库。这种方法促进了项目初期的快速发展。然而,随着客户参与度的提高,D1 数据库开始加速填充,最终一次仅保留日志 30 分钟。

为了缓解这个问题,我们首先优化了数据库架构,将日志保留时间延长到一小时。然而,由于请求正文中的字节数据量巨大,我们很快就遇到了收益递减的情况。发布后,很明显需要一个更具可扩展性的解决方案。我们决定将请求主体迁移到 R2 存储,从而显着减轻 D1 上的数据负载。这一调整使我们能够逐步将日志保留时间延长至 24 小时。

因此,D1主要起到日志索引的作用,使用户能够高效地搜索和过滤日志。当用户需要查看详细信息或下载日志时,这些操作会无缝代理到 R2。

这种双系统方法为我们提供了思考和开发未来更复杂的存储解决方案的喘息空间。

第二步:持久日志和持久对象事务存储

随着流量激增,我们遇到了越来越多的客户希望访问和比较旧日志的请求。

在得知 Durable Objects 团队正在为其新产品寻找 Beta 测试人员后使用 SQLite 实现持久对象,我们踊跃报名。

最初,我们认为持久对象是扩展日志存储容量的理想解决方案,这需要我们通过唯一的字符串对日志进行分片。最初,该字符串是帐户 ID,但在开发中期负载测试期间,我们达到了每个持久对象 1000 万条日志的上限。此限制意味着每个帐户最多只能支持此数量的日志。

鉴于我们对 DO 迁移的承诺,我们看到了机遇而不是限制。为了克服每个帐户 1000 万条日志的限制,我们通过帐户 ID 和网关名称改进了分片方法。这一调整有效地将存储上限从每个账户1000万条日志提高到每个网关1000万条。默认设置允许每个帐户最多 10 个网关,每个帐户的潜在存储空间猛增至 1 亿条日志。

这一战略支点不仅使我们能够存储大量日志。而且还增强了我们网关管理的灵活性。现在,当删除网关时,我们可以简单地删除相应的持久对象。

此外,这种分片方法隔离了大容量请求场景。如果某个客户的大量使用减慢了日志插入速度,它只会影响其特定的持久对象,从而为其他客户保留性能。

BLOG-2593 5

浏览一下修改后的架构图,我们用新集成的持久对象替换了后端工作人员。请求流程的其余部分保持不变,包括对用户的并发响应以及与持久对象的交互,这发生在第四步中。

利用 Cloudflare 的网络,我们的 Gateway Worker 在用户位置附近运行,从而将用户的耐用对象定位在附近。这种接近性显着提高了日志插入和查询操作的速度。

第三步:管理数千个耐用对象

随着 AI Gateway 上的用户数量和请求数量不断增长,管理每个独特的耐用对象 (DO) 变得越来越复杂。新客户不断加入,我们需要一种有效的方法来跟踪每个 DO,确保用户保持在 10 个网关限制内,并管理免费用户的存储容量。

为了解决这些挑战,我们引入了另一层控制,即一个新的持久对象,我们将其命名为客户管理器。帐户管理器的主要功能简单但至关重要:它控制用户活动。

它的工作原理如下:在任何网关将新日志提交到永久存储之前,它都会咨询帐户管理器。该检查根据用户当前的使用情况和权限确定是否允许网关插入日志。账户管理器使用自己的 SQLite 数据库来验证用户拥有的总行数及其服务级别。如果所有检查都通过,则会向网关发出信号,表明可以插入日志。保证整个验证过程在后台进行至关重要,从而确保用户体验保持无缝且不间断。

帐户管理器通过定期接收来自每个网关的耐用对象的数据来保持更新。具体来说,每 1000 个推理请求后,网关会将其总行数的更新发送给账户管理器,然后账户管理器会更新其本地记录。该系统确保客户经理在做出决策时拥有最新的数据。

此外,客户经理还负责监控客户的权利。它跟踪帐户是免费还是付费计划、允许用户创建多少个网关以及分配给每个网关的日志存储容量。 

通过这些机制,账户管理器不仅有助于维护系统完整性,还能确保 AI Gateway 所有用户的公平使用。

人工智能评估和耐用对象分片

随着我们继续开发全自动评估,并在未来使用大型语言模型 (LLM),我们现在正在朝着这一目标迈出第一步,并启动全面的公开测试阶段人工智能评估,以人在环反馈为中心。

此功能使用户能够从其应用程序日志创建定制数据集,从而使他们能够对模型的性能、速度和成本效益进行评分和评估,主要关注法学硕士和自动评分,分析法学硕士的性能,提供开发人员具有客观的、数据驱动的见解来完善他们的模型。

为此,开发人员需要可靠的日志记录机制来持久保存来自多个网关的日志,总共存储多达 1 亿条日志(每个网关 1000 万条日志,跨 10 个网关)。这代表了大量的数据,因为通过 AI 网关发出的每个请求都会生成一个日志条目,其中一些日志条目的大小可能超过 50 MB。

这种必要性促使我们致力于日志存储能力的扩展。由于每个网关的日志存储限制为 1000 万条日志,因此在未来的迭代中,我们的目标是通过实施分片持久对象 (DO) 来扩展此容量,允许每个网关使用多个持久对象来处理和存储日志。这种扩展策略将使我们能够存储更多的日志,为评估提供更丰富的数据(使用法学硕士作为法官或来自用户输入),所有这些都通过 AI Gateway 进行。

BLOG-2593 6

我们正在努力改善我们现有的通用端点是增强解决方案的下一步,该解决方案建立在现有回退机制的基础上,以在请求管理中提供更大的弹性、灵活性和智能性。

目前,当提供商遇到错误或不可用时,我们的系统回落到替代提供商以确保连续性。改进后的通用端点更进一步,引入了自动重试功能,允许在触发回退之前重新尝试失败的请求。通过处理瞬态错误并增加成功满足请求的可能性,显着提高了可靠性。它看起来像这样:

卷曲--位置'https://aig.example.com/'\--header 'CF-AIG-TOKEN:承载者 XXXX' \--header '内容类型:application/json' \--数据原始'[{“id”:“0001”,“提供者”:“openai”,"endpoint": "聊天/完成",“标题”:{"授权": "承载者XXXX",“内容类型”:“应用程序/json”},“询问”: {“型号”:“gpt-3.5-turbo”,“消息”:[{“角色”:“用户”,"content": "生成创建 cloudflare 随机图像的提示"}]},“选项”: {“重试”:2,“延迟”:200,“完成”:{“提供者”:“工人-ai”,“端点”:“@cf/stabilityai/stable-diffusion-xl-base-1.0”,“标题”:{"授权": "承载A5UFQkHewHF1-sA3hTVQFaPxRuu5wmS0eJcCS_MC",“内容类型”:“应用程序/json”},“询问”: {“消息”:[{“角色”:“用户”,"content": "<提示响应 id='\''0001'\'' />"}]}}}},{“提供者”:“工人-ai”,“端点”:“@cf/stabilityai/stable-diffusion-xl-base-1.0”,“标题”:{"授权": "承载者XXXXXX",“内容类型”:“应用程序/json”},“询问”: {“消息”:[{“角色”:“用户”,"content": "创建失踪猫的图像"}]}}]'

对改进的通用端点系统的请求演示了它如何通过集成的重试机制和回退逻辑来处理多个提供者。在此示例中,第一个请求被发送到 OpenAI 等提供商,要求其生成文本到图像的提示。“重试”选项可确保暂时性问题不会立即导致失败。

该系统能够在应用重试策略的同时在提供商之间无缝切换,从而确保管理请求时具有更高的可靠性和稳健性。通过利用后备逻辑,改进的通用端点可以动态适应提供商故障,确保即使在复杂的多步骤工作流程中也能成功完成任务。

除了重试逻辑之外,我们还能够检查请求和响应,并根据结果的内容做出动态决策。这使得开发人员能够创建条件工作流程,系统可以根据响应的性质调整其行为,从而创建高度灵活和智能的决策流程。

如果您尚未使用 AI Gateway,请查看我们的开发者文档关于如何开始。如果您有任何疑问,请联系我们不和谐频道

Cloudflare 的连接云保护整个企业网络,帮助客户构建高效的互联网规模应用,加速任何网站或互联网应用程序,抵御 DDoS 攻击, 保持黑客陷入困境,并且可以帮助您您的零信任之旅

访问1.1.1.1从任何设备开始使用我们的免费应用程序,让您的互联网更快、更安全。

要详细了解我们帮助建立更好的互联网的使命,从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位

人工智能人工智能网关耐用的物体D1开发者平台开发商敏捷开发者服务Cloudflare 工人R2存储

关于《数十亿(日志):使用 Cloudflare Developer Platform 扩展 AI Gateway》的评论


暂无评论

发表评论

摘要

2024-10-248 分钟阅读随着人工智能领域的快速发展,开发人员在跟上不断变化的形势方面面临着重大挑战。然后,网关工作线程执行多项检查:查找缓存结果、实施速率限制并验证用户为其网关设置的任何其他配置。当用户需要查看详细信息或下载日志时,这些操作会无缝代理到 R2。这种双系统方法为我们提供了喘息空间,让我们可以思考和开发未来更复杂的存储解决方案。此功能使用户能够从其应用程序日志创建定制数据集,从而使他们能够对模型的性能、速度和成本效益进行评分和评估,主要关注法学硕士和自动评分,分析法学硕士的性能,提供开发人员具有客观的、数据驱动的见解来完善他们的模型。如果您尚未使用 AI Gateway,请查看我们的开发人员文档,了解如何开始使用。2024-10-248 分钟阅读随着人工智能领域的快速发展,开发人员在跟上不断变化的形势方面面临着巨大的挑战。