Vercel AI 代理 IP 配置指南:模型 API 与请求转发
Vercel AI 代理 IP 配置指南:模型 API 与请求转发,覆盖 Serverless/Node.js Runtime、环境变量和超时排查。
在 Vercel 项目中,代理 IP 应配置在真正发起模型 API 请求的服务端函数中,而不是只在浏览器端设置。先验证服务端出口 IP,再检查 AI SDK、上游 API Key、运行时和函数超时。
Vercel AI 请求链路中代理 IP 应该放在哪里
完整链路可以写成:浏览器 → Vercel 函数 → HTTP 客户端或代理连接层 → 模型 API。代理配置应位于 Vercel 函数实际发出上游请求的位置,模型 API Key 也应保留在服务端环境变量中。
需要先确定请求是在浏览器、Vercel 函数还是上游模型服务端发出。代理 IP 必须配置在实际发起上游请求的那一层,浏览器端配置不会自动传递给服务端函数。
Node.js Runtime 中的模型 API 转发
下面以 Next.js App Router 的 app/api/chat/route.ts、Node.js Runtime、Node 20+ 和 Undici 6.x ProxyAgent 为例。先安装 undici,再通过 PROXY_URL 注入代理协议、主机、端口和认证信息。该入口不是所有 Vercel 框架的通用写法:
```ts
import { ProxyAgent, fetch as proxyFetch } from 'undici';
export const runtime = 'nodejs';
export async function POST(req: Request) {
if (req.headers.get('authorization') !== Bearer ${process.env.INTERNAL_TOKEN}) {
return new Response('Unauthorized', { status: 401 });
}
if (!process.env.PROXY_URL || !process.env.MODEL_API_KEY) {
return new Response('Server configuration missing', { status: 500 });
}
const dispatcher = new ProxyAgent(process.env.PROXY_URL);
const body = await req.json();
const upstream = await proxyFetch('https://api.example.ai/v1/chat/completions', {
method: 'POST',
dispatcher,
headers: {
'content-type': 'application/json',
authorization: Bearer ${process.env.MODEL_API_KEY},
},
body: JSON.stringify(body),
});
return new Response(upstream.body, {
status: upstream.status,
headers: { 'content-type': upstream.headers.get('content-type') ?? 'application/json' },
});
}
```
PROXY_URL、MODEL_API_KEY 和内部调用凭证都应保存在 Vercel 服务端环境变量中,不要写进前端代码。正式部署还应限制允许的模型、输入大小、频率和成本;本文示例只适合受控开发验证。模型 API Base URL 是上游服务地址,代理 URL 是出口 IP 配置,两者不能混用。当前示例绕过 AI SDK 直接使用 Undici;若标题要覆盖 AI SDK,应另补指定 Provider 的自定义 fetch、流式取消和超时测试,不能把裸 Undici 示例当作通用 SDK 配置。
Edge Runtime 为什么不能直接套用 Node.js 代理代码
Edge Runtime 与 Node.js Runtime 的网络库和代理能力不同,不能把 Node.js 的 Agent 或依赖直接假定为 Edge 可用。
部署验证和常见错误排查
Node.js Runtime 更适合需要 Node 网络库的代理场景;Edge Runtime 是否支持某个代理库,要以当前运行时能力为准。部署后先调用一个出口 IP 检测地址,再调用模型 API,记录函数日志、响应状态和总耗时。
正式验证至少包括:环境变量是否存在、服务端出口 IP 是否变化、模型 API 是否返回、流式响应是否完整、函数耗时是否接近平台限制。不要仅凭本地请求成功判断部署环境也已正确接入。
函数超时、407、429 和上游模型错误
- 401/403:模型 API Key、权限或上游服务策略。
- 407:代理 IP 认证。
- 429:模型配额、并发或请求频率。
- 504/函数超时:上游响应、代理链路、函数超时或流式响应处理。
- 客户端成功、服务端失败:优先检查 Vercel Runtime 是否真正读取代理配置。
本地成功、Vercel 失败的常见原因
重点对比 Runtime、环境变量、部署区域、函数超时、流式响应和上游 API 权限,不要只更换代理 IP。
官方文档
Vercel Runtime、Undici 和 AI SDK 的能力可能更新,部署前可核对:
- Vercel Functions Runtimes:确认 Node.js 与 Edge Runtime 的能力差异。
- Vercel Environment Variables:确认环境变量的作用范围。
- Vercel AI SDK:核对模型请求和流式响应。
- Undici ProxyAgent:核对当前版本的代理 Agent 配置。
- Fetch API:了解标准请求行为。
FAQ
Vercel AI 代理 IP 适合什么场景?
适合在 Vercel 服务端函数中为模型 API 请求提供指定出口 IP。它不能替代 API Key、模型权限或平台配额。
普通 fetch 是否代表已经接入代理 IP?
不是。还需要在实际发起上游请求的 HTTP 客户端中注入代理配置,并在部署环境验证出口 IP。
部署后先验证环境变量和服务端出口 IP,再测试模型 API、流式响应和函数耗时。需要核对基础代理参数时,可参考代理设置帮助。
