Prompt Lens 项目调试总结

问题1:上传返回 400 Bad Request

症状: 上传文件时 API 返回 400,但看不到具体原因

调试过程:

  1. 检查 Vercel 日志,发现只有 “No outgoing requests”
  2. 添加详细日志后,发现 Magic number validation: { valid: false }
  3. 原因:文件扩展名是 .mp4,但 Magic Number 不匹配(可能是手机拍的视频格式问题)

解决方案: 临时禁用 Magic Number 验证


问题2:B2 Access Key 一直报错

症状:

  • InvalidAccessKeyId: The key 'xxx' is not valid
  • Malformed Access Key Id

调试过程:

  1. 检查环境变量配置 - 都配了
  2. 检查 bucket 名称 - 正确
  3. 检查 region - 正确 (us-west-000)
  4. 重新创建 key - 用户复制的 key 太短(手动输入抄错了)
  5. 指导用户从 B2 控制台直接复制完整 key

解决方案: 引导用户正确复制 key(24位数字)


问题3:Vercel 连接本地代理失败

症状: connect ECONNREFUSED 127.0.0.1:7897

调试过程:

  1. 代码里有 process.env.NODE_ENV === "development" 判断,但 NEXT_PUBLIC_SITE_URL 包含 localhost 时也会启用
  2. 发现 Vercel 环境变量里没有 PROXY,但代码里有硬编码的 http://127.0.0.1:7897 作为 fallback
  3. 发现两处问题:
    • lib/auth/index.ts - 代理配置
    • lib/ai/analyzer.ts - axios proxy 配置

解决方案: 只在 NODE_ENV === "development" 时启用代理


问题4:音频分析 Vercel 上无法工作

症状: ENOENT: no such file or directory, mkdir '/var/task/temp_audio_analysis'

调试过程:

  1. Vercel Serverless Functions 不能写本地文件系统
  2. 原方案用本地文件提取音频 → 不可行
  3. 改用云端服务:AssemblyAI(免费1小时/月)

解决方案: 上传文件到 B2,然后调用 AssemblyAI API 转录


教训总结

教训 说明
本地代理不要带上线 代码里的 127.0.0.1:7897 要用环境变量判断
添加足够的日志 方便定位问题
云端环境限制 Vercel 不能写文件,FFmpeg 等工具不能用
用户输入要验证 B2 key 手动输入容易出错

涉及文件

  • lib/auth/index.ts - 代理配置
  • lib/ai/analyzer.ts - AI 分析 + proxy 配置
  • app/api/upload/route.ts - 文件上传
  • app/api/audio-analyze/route.ts - 音频分析

新增功能

  1. 上传功能 - 从本地存储改为 B2 上传
  2. AI 默认提供商 - 从智谱AI改为 OpenRouter
  3. 音频分析 - 从本地 Whisper 改为 AssemblyAI 云端转录