在 Vercel AI SDK 中保护 AI Agents
Source: Dev.to

2025 年是大语言模型(LLM)的时代。2026 年是 Agent 的时代。
Agent 不仅仅是回答问题——它们会执行操作。它们可以浏览网页、执行代码、查询数据库以及调用 API。这彻底改变了安全模型。
出现幻觉的 LLM 令人恼火。出现幻觉的 Agent 可能会删除你的生产数据库。
本指南面向使用 Vercel AI SDK 的开发者。Lint 规则原生支持 generateText、streamText、tool() 等 SDK 函数。
OWASP 代理系统 Top 10 2026
| 类别 | 风险 |
|---|---|
| ASI01 | 代理混淆 – 系统提示被动态覆盖 |
| ASI02 | 输入验证不足 – 工具参数未验证 |
| ASI03 | 凭证不安全 – API 密钥硬编码在配置中 |
| ASI04 | 输出中包含敏感数据 – 工具在响应中泄露机密 |
| ASI05 | 意外代码执行 – AI 输出被当作代码执行 |
| ASI07 | RAG 注入 – 恶意文档注入指令 |
| ASI08 | 连锁故障 – 错误在代理步骤之间传播 |
| ASI09 | 信任边界违规 – AI 绕过授权 |
| ASI10 | 日志不足 – 缺乏 AI 行动的审计记录 |
Source: …
可视化示例:问题
Vercel AI SDK 让构建代理变得轻而易举。也许太容易了。
❌ 之前:未受保护的代理
// 这段代码每天都会部署到生产环境
const result = await generateText({
model: openai('gpt-4'),
tools: {
deleteUser: tool({
execute: async ({ userId }) => {
await db.users.delete(userId); // 没有确认,也没有校验
},
}),
},
});
哪里出错了?
- 在执行破坏性操作前没有人工确认
userId参数没有进行校验- 没有
maxSteps限制——代理可能无限循环 - 缺少错误边界,导致级联故障
✅ 之后:使用 ESLint 进行保护
安装并运行 linter:
npm install eslint-plugin-vercel-ai-security --save-dev
npx eslint src/
对每个问题提供即时反馈:
🔒 CWE-862 OWASP:ASI09 CVSS:7.0 | 未经确认的破坏性工具 | HIGH
at src/agent.ts:5:5
Fix: 在执行前添加人工确认
🔒 CWE-20 OWASP:ASI02 CVSS:6.5 | 工具参数未校验 | MEDIUM
at src/agent.ts:6:7
Fix: 为工具参数添加 Zod 架构校验
🔒 CWE-400 OWASP:ASI08 CVSS:5.0 | 代理缺少 maxSteps 限制 | MEDIUM
at src/agent.ts:3:16
Fix: 添加 maxSteps 选项以防止无限循环
✅ 修复后的代码
import { z } from 'zod';
const result = await generateText({
model: openai('gpt-4'),
maxSteps: 10, // ✅ 防止无限循环
tools: {
deleteUser: tool({
parameters: z.object({
userId: z.string().uuid(), // ✅ 已校验输入
}),
execute: async ({ userId }, { confirmDangerous }) => {
await confirmDangerous(); // ✅ 人工确认
await db.users.delete(userId);
},
}),
},
});
结果: 所有警告已解决。代理已具备生产就绪的安全性。
设置 (60 秒)
// eslint.config.js
import vercelAISecurity from 'eslint-plugin-vercel-ai-security';
export default [
vercelAISecurity.configs.strict, // Maximum security for agents
];
严格模式强制执行:
- ✅ 工具模式验证(Zod)
- ✅ 对破坏性操作进行人工确认
- ✅ 多步骤工作流的
maxSteps限制 - ✅ 级联故障的错误处理
Coverage: 9/10 OWASP Agentic Categories
eslint-plugin-vercel-ai-security 覆盖 9/10 OWASP Agentic 类别。ASI06(内存损坏)对 TypeScript 不适用。
插件能够:
- 判断哪些函数是 Vercel AI SDK 调用
- 判断哪些工具执行破坏性操作
- 判断是否已就位适当的安全防护
要点
AI 代理是我们迄今为止构建的最强大——也是最危险——的软件。
有用的助手和潜在的风险之间的区别在于你所设立的安全防护措施。
不要在没有这些防护措施的情况下发布代理。