SwiftUI聊天机器人开发遇Google Generative AI 400错误求助
Google Generative AI 400错误排查与解决(SwiftUI聊天机器人)
以下是针对你遇到的「运行1-2次后出现400错误」问题的排查方向和解决方案:
1. 触发API调用速率限制
Google Generative AI的免费额度有严格的调用频率限制,短时间内重复调用会触发400错误,这是最可能的原因。
- 解决方案:
- 在每次调用接口前添加延迟(比如
try await Task.sleep(nanoseconds: 1_000_000_000),即1秒延迟); - 登录Google Cloud控制台,查看你的Generative AI配额使用情况,若额度不足可申请提升。
- 在每次调用接口前添加延迟(比如
2. 异步逻辑的竞态条件
你的按钮点击逻辑中,会先启动异步任务goNuts(),再清空promptMain,虽然函数内先赋值了let prompt = promptMain,但极端情况下可能出现prompt为空的无效请求。
- 解决方案:调整按钮逻辑,确保先获取当前prompt再清空:
同时修改Button("ASK"){ let currentPrompt = promptMain guard !currentPrompt.isEmpty else { return } promptMain = "" history1 = currentPrompt Task { await goNuts(with: currentPrompt) } }goNuts函数:func goNuts(with prompt: String) async { do { let response = try await palmClient.generateText(with: prompt) if let candidate = response.candidates?.first, let text = candidate.output { answer = text } } catch { errorMessage = error.localizedDescription } }
3. API密钥权限或有效性问题
即便能运行几次,也可能是密钥权限变化或访问限制导致后续请求失败:
- 解决方案:登录Google Cloud控制台,确认你的API密钥已启用Generative Language API,且未设置IP限制等访问规则。
4. 显式指定模型参数
默认模型可能存在变动或配额限制,显式指定模型可避免此类问题:
- 修改
goNuts内的请求代码:let response = try await palmClient.generateText( model: "models/text-bison-001", prompt: prompt )
内容的提问来源于stack exchange,提问作者Kadri Özgür
相关产品推荐
相关产品推荐

