那个因等待另一个 Agent 而死锁的 Agent
两个能力出色的 Agent 可能会在你的账单飞涨时永远互相等待。为什么是协作——而非模型能力——导致了 Agent 群体的崩溃,以及分布式系统准则如何修复这一问题。
你的智能体从未执行过的补偿事务
AI 智能体在现实世界中执行不可逆的操作,往往无法撤销。借用 Saga 模式:为每个工具配对一个补偿事务,对不可逆行为设置门控,并在执行前记录日志。
你的智能体忘记发送的幂等键
智能体重试带有副作用的工具调用时,其方式与重试读取操作完全相同 —— 这会导致静默地重复扣款和重复发送邮件。本文将探讨幂等性究竟应该放在哪里,以及为什么提示词(Prompt)不是实现它的正确位置。
你的 Agent 链路中无人分配的延迟预算
Agent 的 SLO 通常设置在边界处,而内部却缺乏预算分配,导致没人能归因是哪一跳搞砸了 P99。你需要分配逐跳预算,在 Span 级别进行追踪,并约束那个呈乘性而非加性增长的尾部延迟。
429 错误背后的惊群效应:速率限制是一个分布式系统问题
不带抖动的指数退避会组织你的重试集群而不是将其消解 —— 随之而来的是同步的 429 浪潮、重试放大和亚稳态故障。本文将探讨为什么 LLM 速率限制需要抖动、重试预算,以及你原本没打算构建的客户端调度器。
你的智能体需要的是监督者,而不是重试循环
当长时间运行的智能体失败时,重试循环回答了错误的问题。Erlang 的 OTP 监督树在三十年前就定义了真正的决策路径:是彻底重启、从检查点重启,还是升级给人工处理 —— 以及如何将这些策略映射到智能体流水线中。
在你的智能体能够自我重试之前,精确一次性处理(Exactly-Once)曾是一件难事
幂等键(Idempotency keys)假设调用者会逐字节重复其请求。而智能体(Agent)在重试时可能会转述自己的请求,这打破了该假设。本文将介绍如何构建工具级的去重机制,使其在调用者是语言模型的情况下依然有效。
代理墙钟预算:一场与工具超时机制的赛跑
在代理技术栈内部,代理的时钟与工具的时钟几乎从未共享同一个零时刻 (t-zero)。当它们的预算发生偏差时,一个耗时 8 秒的工具调用可能会撞上 7.9 秒的截止期限,导致框架针对一个它从未见过的“成功”结果进行重新规划。
用户关闭对话后才完成的异步工具调用
长时间运行的工具调用往往比触发它们的聊天会话存续时间更长。当你关闭标签页时,结果仍然会返回 —— 但面对的却是一个已不存在的对话、错误的会话,或者根本无处投递。
那些被你的智能体“触发并遗忘”的异步工具调用
函数调用将同步和异步工具视为相同的形式。智能体触发了一个任务,收到了一个 ID,随后标记该步骤已完成 —— 而实际工作却从未落地。
缓存击穿:这次冲击的是你的模型提供商,而不是数据库
当一个热门的 Prompt 前缀在整个集群中过期时,每个工作线程都会在同一瞬间成为缓存写入者 —— 曾经属于数据库的并发压力和账单,现在全都涌向了你的模型提供商。
悬在两张日历上的多智能体死锁
包含人工审批队列的多智能体工作流重现了每一个经典的死锁条件。这种循环隐藏在两个队列和两张日历之中,直到被客户发现。