虽然使用 curl 直接调用 API 成功,但在 FlowPilot 中验证模型配置时失败。
你的 curl 测试中使用了 max_tokens: 50,但 FlowPilot 的验证 API 没有传递这个参数。某些模型可能要求必须设置 maxTokens。
// ❌ 错误:requestMaxDuration 已经是秒,但又乘以 1000
const testMaxDuration = Math.min((requestMaxDuration ?? 30) * 1000, 60000);
await generateText({
abortSignal: AbortSignal.timeout(testMaxDuration), // 这里得到的是超大的数字
});应该改为:
// ✅ 正确:保持秒为单位
const testMaxDuration = Math.min((requestMaxDuration ?? 30), 60);
await generateText({
abortSignal: AbortSignal.timeout(testMaxDuration * 1000), // 转换为毫秒
});之前的错误处理没有记录 AI SDK 的 cause 字段,导致难以诊断真实错误。
const result = await generateText({
model: resolvedModel.model,
messages: [{ role: "user", content: "Hi" }],
maxOutputTokens: 50, // ✅ AI SDK 标准参数名(不是 maxTokens 或 max_tokens)
temperature: 0,
maxRetries: 1,
abortSignal: AbortSignal.timeout(testMaxDuration * 1000),
});原因:
- ❌
maxTokens- 旧版本的参数名,已弃用 - ❌
max_tokens- OpenAI API 的原始参数名,但 AI SDK 不直接使用 - ✅
maxOutputTokens- AI SDK v5+ 的标准参数名
根据 AI SDK 官方文档,maxOutputTokens 是控制生成 token 数量的正确参数。
// ✅ testMaxDuration 保持为秒
const testMaxDuration = Math.min((requestMaxDuration ?? 30), 60);
// ✅ 传给 AbortSignal 时转换为毫秒
abortSignal: AbortSignal.timeout(testMaxDuration * 1000)console.error("模型验证失败:", {
error: modelError,
message: modelError.message,
cause: modelError.cause, // ✅ 新增
stack: modelError.stack?.split('\n').slice(0, 5).join('\n'),
});
// ✅ 检查 cause 字段获取更详细的错误信息
if (modelError.cause) {
const cause = modelError.cause;
if (cause.message) {
errorDetails = cause.message;
}
if (cause.response) {
console.error("API 响应错误:", {
status: cause.response.status,
statusText: cause.response.statusText,
});
}
}cd /Users/huangtao/WebstormProjects/flowpilot
./test-validation.sh这会自动测试:
- ✅ 直接 API 调用(curl)
- ✅ FlowPilot 验证 API
- 启动开发服务器:
npm run dev - 打开 FlowPilot
- 点击「配置」→「添加接口」
- 填写:
- Base URL:
https://www.linkflow.run/v1 - API Key:
sk-7oflvgMRXPZe0skck0qIqsFuDSvOBKiMqqGiC0Sx9gzAsALh
- Base URL:
- 添加模型:
claude-sonnet-4-5-20250929 - 点击「验证」按钮
- 查看浏览器控制台和终端日志
✅ 验证成功
响应时间: 1234ms
Token 使用: 72 tokens
测试响应: Hello! I'm Claude...
终端会显示详细的错误日志,包括:
- 错误类型(401/403/404/timeout等)
- 错误详情(cause、response等)
- 堆栈跟踪(前5行)
如果问题仍然存在,请:
- 查看终端日志:运行
npm run dev的终端窗口会显示详细的服务端日志 - 查看浏览器控制台:F12 打开开发者工具,查看网络请求
- 运行测试脚本:
./test-validation.sh会对比两种调用方式 - 提供完整日志:包括终端和浏览器控制台的完整错误信息
- 在前端添加重试机制
- 增加验证超时时间的 UI 配置
- 显示更友好的错误提示
- 缓存验证结果(避免重复验证)
app/api/model-validation/route.ts- 后端验证 APIcomponents/model-config-dialog.tsx- 前端配置界面lib/server-models.ts- 模型解析逻辑test-validation.sh- 测试脚本TEST_VALIDATION.md- 详细诊断文档