在没有基础设施人员的情况下,解决将 AI Agent 集成到 Next.js 应用时产生的成本和安全问题
19. Juni 2026
0
Computing/SoftwareRelated Video
53:42Ship 26 London - 主题演讲
Vercel
Comments (0)
Log in to leave a comment
No posts yet
53:42Vercel
Log in to leave a comment
No posts yet
自主型 Agent 会在达到目标之前持续思考并调用工具。这种循环结构是一个隐患。如果特定的工具调用失败,或者系统提示词陷入无限重复的操作锁死状态,短短几十分钟内就可能产生数千美元的 API 账单。根据 2026 年 Vercel 平台的数据,由编码 Agent 生成的提交占了总部署流量的一半以上,通过 AI Gateway 的令牌数量比去年激增了 10 倍。这就是为什么必须在网关层设计预先阻断令牌滥用机制的原因。仅靠简单的 IP 限制很难探测到 Agent 内部的语义无限循环。需要将 Next.js Edge Middleware 与 Upstash Redis 相结合,构建一个能够实时计算两个提示词向量 和 之间余弦相似度的过滤层。
ext{Cosine Similarity} = rac{mathbf{A} cdot mathbf{B}}{|mathbf{A}| |mathbf{B}|}阻断无限循环调用的实时中间件防御体系分为三个步骤实现。首先在项目根目录下创建 middleware.ts 文件,利用 @upstash/ratelimit 定义一个滑动窗口限流器,限制单个会话在 30 秒内最多只能发起 5 次执行请求。其次,调用 AI SDK 的 embed 函数和 text-embedding-3-small 模型,实时提取传入提示词的向量嵌入,并编写计算其与 Upstash Redis 中存储的前一个提示词向量之间余弦相似度的逻辑。如果计算出的相似度超过 0.95,则判定为无限循环状态,立即停止 LLM 后端调用,并配置条件语句强制返回存储在 Redis 中的上一次成功响应数据 agent:response:${sessionId}。完成这些步骤后,异常的资源消耗将被实时拦截,最高可节省 40% 的 LLM API 运营成本。
当 Agent 处理用户生成的脚本(如网页搜索或数据分析)时,会面临提示词注入攻击。如果攻击者通过沙箱越狱并运行宿主机 Shell 命令,会导致原始数据库凭据等环境变量泄露。为了从物理上将计算层与恶意攻击隔离开来,我们引入了基于 AWS Firecracker 且具备毫秒级冷启动性能的微型 VM 技术——Vercel Sandbox。Vercel Sandbox 能够隔离新的 Node.js 26 运行时实例,并按每 2 个 vCPU 配备 2GB 的比例自动调整总计 4GB 的内存,从而预防凭据窃取,每周可减少 5 小时以上的手动安全审计时间。
隔离的安全代码执行环境由基于白名单的沙箱执行器控制。在项目根目录下编写 sandbox.config.ts 文件,并将 networkPolicy 属性指定为 deny-all,从而从源头上切断通过外部越狱进行的提示词注入及专用数据库环境变量的泄露。在环境变量白名单 envWhitelist 中,仅注册 NODE_ENV、TZ 和 AGENT_RUN_MODE。接着创建 sandbox-runner.ts 脚本,通过 sandbox.writeFiles 结构将外部输入的原始代码文件 runner_entry.js 写入隔离目录,然后调用 sandbox.runCommand,在阻断宿主机敏感信息流入的状态下运行运行时。在通过流式传输监控沙箱输出日志的 for await 循环内部,插入跟踪累积字节大小的条件语句;当 stdout 和 stderr 的总和超过 50KB 时,立即执行 sandbox.stop() 以强制清理虚拟机,从而构建错误边界。应用此安全隔离程序后,可以防御导致系统瘫痪的 DoS 攻击,且不会产生资源泄漏和不必要的计算成本。
Web Agent 往往作为需要数分钟到数小时才能完成的长期业务运行。当发生网络断开或超时等异常时,如果已完成的中间探索阶段的所有成果丢失,则必须重新消耗令牌并从头开始,从而带来重复支付成本的风险。为了解决分布式状态丢失问题,引入了 Vercel Workflows SDK 及其框架 Eve 提供的持久化执行模式。使用 use workflow 和 use step 编译器指令,即使 Serverless 容器生命周期结束,失败前最终成功执行的单步骤快照数据也会保存在持久内存日志队列中,从而无需重复执行,从故障发生点继续业务。
故障可恢复的持久化检查点系统,是通过植入状态跟踪拦截器代码来构建的,该拦截器会对与 Vercel Connect 关联的存储基础设施调用 Upsert 查询。定义核心状态结构体 DurableStateContext 以管理 Agent 任务的生命周期,并将当前执行阶段细分为 Task_Start、API_Called、Data_Parsed 和 Task_Complete。编写 upsertCheckpointState 拦截器函数,通过 Vercel Connect 以 OIDC 方式(无需额外认证证书)在绑定的 Upstash Redis 存储 connectStateStore 中,在每个阶段成功时立即记录当前上下文状态。最后,实现处理 Agent 通信重试请求的 executeOrResumeAgent 处理程序,从数据库检索基于会话 ID 的最终状态;如果进行中的会话阶段不是 Task_Complete,则生成控制流,强制从最近保存的快照点恢复工作流,而不是从头开始重新执行任务。启用此状态保持处理程序后,消除了因 Serverless 超时及故障而导致的从头重启的低效,从而提高了 Agent 的任务成功率。
要在不中断生产环境的情况下,将现有 Web 服务的单体 API 路径迁移到基于 AI SDK 的 Agent 架构,需要功能标志控制和实时边缘路由分支。服务无中断的渐进式迁移方式是:在保持现有稳定运行的单一响应 API 不变的情况下,逐步对新设计的 Agent 基础设施路径进行金丝雀部署。将可确保超低延迟 CDN 边缘读取的 Vercel Edge Config 技术与中间件层结合,无需远程数据库访问开销,即可实时搜索推出标志并安全地控制流量。
为实现旧代码库的无中断迁移,执行三阶段渐进式生产环境发布程序。保留现有正在运行的旧业务地址 /api/v1/generate 路径,并新建集成 AI SDK Agent 功能的专属文件端点 /api/v1/agent/generate。在 Next.js middleware.ts 内植入通过 get 函数读取 Vercel Edge Config 动态阈值指标 agent_canary_rate 的逻辑,建立金丝雀环境:仅允许浏览器唯一 ID 哈希值分配在设定阈值(例如 10)以下组内的 10% 用户流量,通过 NextResponse.rewrite 动态分流至新 Agent 系统端点。在前端 UI 组件内部,配置混合 Fetch Wrapper 通信适配器客户端 unifiedAgentRequest,根据 Accept 标头值实时分流处理,以同时支持旧版短时结束型 JSON 结果处理方式和新版异步 Agent 的 SSE 流式令牌输出。应用此迁移框架后,可以将现有系统负载及意外异常运行的风险隔离在 10% 以下的流量范围内,并无中断地完成整个系统的重构。