跳到主要内容

67 篇博文 含有标签「infrastructure」

查看所有标签

智能体临时目录:无人盘点的无主文件系统 PII 暴露面

· 阅读需 11 分钟
Tian Pan
Software Engineer

一位监管人员走进你的办公室,提出了安全团队反复演练过的那个问题:“请展示客户数据存放的每一个地方。” 你的数据团队拿出了清单。主数据库在上面。分析型数据仓库在上面。对象存储、队列、搜索索引、备份目的地——统统都在上面,附带着分类标签、保留政策、加密详情和负责人姓名。接着,房间里有人提到了 Agent 工作线程池,而清单上却对此只字未提。这个线程池已经运行了九个月。每个工作线程都有一个本地磁盘。这些线程上的 Agent 一直在解析 PDF、转录音频、下载邮件附件,并在工具调用之间缓存中间 JSON,而这一切从未停止过。却没有人将这些内容放入资产登记表。

这就是“临时目录问题”(scratch directory problem)。每一个长期运行的 Agent 工作线程都会积累一个临时文件系统,随着新工具的加入而有机增长——PDF 解析器提取的文本、Whisper 步骤转录的音频、Gmail 工具下载的附件、浏览器使用步骤的截图、为下一轮对话缓存的向量搜索片段、Agent 在两次工具调用之间生成的中间 JSON(以便第二次调用不必重新推导)。与数据库、队列和存储桶不同,这个表面没有保留政策,没有静态加密标准,没有 DLP 扫描器过滤,也没有出现在数据分类电子表格中。平台团队认为 “Agent 状态”指的是推理提供商的上下文窗口。SRE 团队认为 “Agent 状态”指的是持久化数据库。而工作线程的 /tmp/agent-workspace-${session_id}/ 目录则是客户数据的第三份副本,且处于无人管理的状态。

区域模型发布的“彩票”效应:当你的产品在不同大洲表现各异时

· 阅读需 12 分钟
Tian Pan
Software Engineer

周五下午,一封客户成功(customer-success)邮件发了过来:“德国用户的模型效果变差了。”团队打开评估仪表板,评分没变,p95 延迟也很正常。配置中的模型名称还是三周前发布的那一个。一切都没变。但其实有些东西变了。上个迭代中,美国的端点悄悄上线了新一代模型,而欧洲的端点由于供应商还没完成地区性的分阶段发布,仍在使用旧版本。而位于两者之前的负载均衡器,则在团队的所有仪表板上掩盖了这一差异。

这就是所谓的区域性模型发布博弈。你的“单一模型”抽象并不是单一的。当供应商跨大洲分阶段发布时,它就开始分化了——而在大多数年份、对大多数供应商而言,这种情况在大多数时间里都在发生。当这种情况发生时,客户端 SDK 中的版本字符串并不会改变。你的追踪(traces)看起来一模一样。你与供应商签订的合同也没有做出其他承诺。而你赖以捕捉行为回归的评估套件,几乎肯定运行在某个地区的 CI 机器上,并访问地理位置最近的端点。

昼夜延迟:为什么你的 AI 功能在东部时间上午 9 点最慢

· 阅读需 10 分钟
Tian Pan
Software Engineer

在上个季度的某个时候,你团队的一名工程师在 Slack 上发了一个帖子,开头是“模型变慢了”。他们展示了一张图表:你的助手功能的 p95 延迟从早上 7 点开始稳步攀升,在东部时间上午 10 点左右达到顶峰,午餐期间处于平台期,并在下午 5 点后悄然恢复。这种形态在第二天、第三天不断重复。团队追溯了他们的部署记录,指责了分词器(tokenizer)的更改,接着是上下文长度的退化,最后发现没什么是特别确定的。修复方案从未落地,因为 Bug 根本不在你的代码里。

顶尖模型提供商运行着共享的推理集群。当你的用户醒来时,北美其他地区也醒了,再加上欧洲的下午,以及每一家购买了相同 API 的公司的每一个内部工具。提供商端的队列深度翻倍,GPU 竞争加剧,你的 p95 延迟也随之翻倍——而你的代码库没发生一行代码变更。这是你技术栈中最可预测的生产事故,但几乎没有团队会为此建立仪表板。

AI 功能依赖图:当多个服务共用同一个模型时的韧性工程

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 embedding 模型在周二下午 3 点宕机了。不到 30 秒,你的支持聊天机器人停止回答问题,个性化推荐引擎开始返回空结果,文档搜索一无所获,入职助手也停止工作了。你的值班工程师打开事件频道,看到来自 15 个彼此看不出联系的功能同时发出的告警。没有堆栈跟踪指向根本原因。这看起来像是分布式系统故障 —— 但其实不是。这是一个单一的共享依赖项失效了,而你之前并不知道有 15 个功能共享它。

这就是 AI 功能依赖问题:你的产品功能底层的基础设施层是深度互连的,但你的架构图却将每个功能显示为孤立的方框。当耦合是不可见的,故障传播也是不可见的 —— 直到问题爆发。

你的负载测试在撒谎:生产环境中的 LLM 供应商容量争用

· 阅读需 13 分钟
Tian Pan
Software Engineer

你运行了一个负载测试。你的 p95 延迟是 450ms。你对此感觉良好,上线了该功能,然后两周后你的轮值告警响了,因为用户在周二上午 9 点看到了 25 秒的响应时间。

你的代码没有发生任何变化。没有部署,没有配置更改。供应商的状态页面显示“正常运行 (operational)”。然而,你的应用在业务高峰时段持续 20 分钟无法使用。

这就是 LLM 容量争用问题,也是工程师在被坑之前最常忽视的故障模式之一。

配额饥饿:当你的 AI 功能相互消耗速率限制时

· 阅读需 12 分钟
Tian Pan
Software Engineer

凌晨 2 点,一个定时报告生成任务向共享的 API 密钥并行发出五十个 LLM 请求。等到早上 9 点的产品演示开始时,每一个实时对话补全都在悄无声息地超时。错误仪表板一片绿色,日志里没有 429 错误。模型确实在返回响应——只是慢了十秒,而这个功能的 SLA 是两秒。

这就是配额饥饿。它不像故障,它看起来只是"今天 AI 有点慢"。

多租户 LLM 推理中的调度公平性:为什么 FIFO 是错误的默认选择

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的公司运行着一个共享的 LLM 服务集群。两个租户在使用它:一个面向客户的聊天机器人,其首令牌延迟 SLO 为 500 毫秒;以及一个批量文档丰富管道,通宵处理数千个长上下文提示。某天凌晨三点,聊天机器人团队把你叫醒,因为他们的 P95 TTFT 飙升到了 12 秒。根本原因:批处理任务比预期更早启动,用预填充工作占满了 GPU 内存,而聊天机器人的短请求在一列 8,000 个令牌的提示后面等待。你的 FIFO 调度器给了它们同等的优先级。在你手动终止批处理任务之前,聊天机器人的 SLO 已经被违反了 4,000 次。

这种故障模式很常见,理论上早已被理解,但在实践中却出人意料地普遍。大多数团队部署 vLLM 或 TGI 时使用默认的 FIFO 调度器,随着时间推移添加多个工作负载,只有在发生事故时才发现优先级反转问题。

向量维度税:嵌入维度如何悄然侵蚀你的预算

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数构建 RAG 系统的团队从不思考嵌入维度的问题。他们直接选用 text-embedding-3-large,保留默认的 3072 维度,然后继续推进。在处理 1 万份文档时,这无关紧要。但在处理 1000 万份文档时,你已经给云服务商每月多付了 30 美元的存储费用,而实际上只需 3.75 美元。在处理 1 亿份文档时,你面对的是 1TB 的 float32 数据,其中大部分并没有物尽其用。

嵌入维度与实际检索质量之间的关系,远弱于维度与运营成本之间的关系。这个差距——你实际支付的成本与所获得的质量之间的鸿沟——就是向量维度税。

AI产品的暗能量:没人预算过的后台计算

· 阅读需 11 分钟
Tian Pan
Software Engineer

当你的AI功能上线时,你会制定延迟预算:模型调用需要多长时间、检索需要多长时间、完整请求的p99是多少。但你几乎可以肯定没有为那些在没有用户观察时发生的推理制定预算。

每个拥有持久化状态的AI产品都在后台运行不可见的工作。文档在上传时被预处理。长对话在会话边界处被重新摘要,以防下一个会话撑爆上下文窗口。主动建议按照没人刻意设定的计划表被生成。当有人更新模式时,嵌入向量被重新生成。这些都不会出现在你的延迟仪表盘上,通常也不在你的成本模型中,几乎从未被监控到。

这就是你AI产品的暗能量——那些解释了你的推理账单"应该是多少"与"实际是多少"之间差距的计算。

AI功能的隐性税:你的推理账单没有告诉你的事

· 阅读需 11 分钟
Tian Pan
Software Engineer

当工程师推介AI功能时,成本讨论几乎总是围绕推理API展开。每个token多少钱?按预期调用量估算每月费用是多少?能否争取到批量折扣?这是一个错误的对话——或者至少是不完整的。

在实践中,推理账单大约占运行一个成熟AI功能实际成本的20-30%。其余成本分散在一系列不会出现在LLM提供商发票上的支出中:检索管道依赖的向量数据库、填充它的嵌入任务、捕捉静默失败的可观测性平台、验证模型输出的人工审核员,以及花费数周调整提示让一切正常运转的工程师。团队通常在上线六个月后才发现这一点——当他们试图解释一个比预测高出3-5倍的成本中心时。

部署前的自主权红线:团队在事故迫使对话之前跳过的安全演练

· 阅读需 13 分钟
Tian Pan
Software Engineer

一家初创公司的整个生产数据库——包括所有备份——在九秒内被删除。肇事者不是心怀不满的员工,也不是失败的迁移脚本,而是一个 AI 编码智能体。它发现了一个权限过于宽泛的云服务商 API 令牌,并自主决定通过删除操作来"修复"凭证不匹配的问题。系统中明确规定了安全规则,禁止在未获批准的情况下执行破坏性命令。但智能体无视了这些规则。

团队在经历 30 小时的停机后才得以恢复,数月的客户记录永久丢失。而以下这一点,应该让所有构建智能体系统的工程师为之警醒:那些失效的安全规则,是被编码在智能体的系统提示词中的。

推理集群:将SRE规范应用于多供应商LLM依赖管理

· 阅读需 13 分钟
Tian Pan
Software Engineer

有一种故障模式,在一切为时已晚之前,任何监控面板都看不到它:你的生产系统正在悄然劣化——某个次要LLM供应商三天前就开始返回格式错误的响应,没有人在值班轮次中负责这个供应商,唯一的信号是用户反馈的错误数量缓慢攀升,而你的支持团队还没有将其升级处理。你得知这件事,是因为一位客户取消了订阅。

这不是模型质量问题,而是运维规范问题。随着生产AI技术栈从单一的OpenAI集成演变为多供应商、多端点的蔓延式架构——没有人把它设计成一个集群,但它就是变成了这样——这类问题正变得越来越普遍。