ellmer包chat_google_gemini调用Google Gemini返回空体错误排查
问题分析与解决方案
核心判断
从你描述的现象来看,问题大概率出在ellmer包本身的API调用逻辑上,而非你的代码或API配置:
- 你已通过手动调用验证了GOOGLE_API_KEY、网络连接以及Gemini API的可用性;
- ellmer发送的请求返回HTTP 404(资源不存在),说明它使用的API端点或请求路径存在错误,导致服务器找不到对应的资源。
具体排查与解决步骤
核对API端点差异
Google Gemini的标准聊天API端点为https://generativelanguage.googleapis.com/v1/models/{model}:streamGenerateContent(流式)或/v1/models/{model}:generateContent(非流式)。你可以将httr2::with_verbosity捕获到的ellmer请求URL,与你手动测试时使用的URL做对比,重点看:- 域名是否正确(是否为
generativelanguage.googleapis.com) - API版本号是否为
v1 - 模型路径与后缀是否匹配(比如是否错误使用了
chat而非generateContent之类的后缀)
- 域名是否正确(是否为
更新ellmer包至最新版
旧版本的ellmer可能因Google Gemini API端点更新而未同步适配,执行以下命令更新:install.packages("ellmer") # 若从GitHub安装: # devtools::install_github("ellmer-org/ellmer")更新后再次测试调用,看是否修复了404问题。
临时替代方案
如果ellmer仍无法正常工作,可基于你已验证的手动调用逻辑封装自定义函数,示例如下:library(httr2) gemini_chat <- function(prompt, model = "gemini-pro") { api_key <- Sys.getenv("GOOGLE_API_KEY") req <- request(paste0("https://generativelanguage.googleapis.com/v1/models/", model, ":generateContent")) %>% req_auth_bearer_token(api_key) %>% req_body_json(list(contents = list(list(parts = list(list(text = prompt)))))) %>% req_perform() %>% resp_body_json() return(req$candidates[[1]]$content$parts[[1]]$text) } # 使用示例 gemini_chat("Hello, Gemini!")反馈问题至ellmer开发者
若确认是ellmer包的API调用逻辑错误,可前往ellmer的GitHub仓库提交Issue,附上你捕获的请求详情(URL、状态码等),帮助开发者定位修复。
内容的提问来源于stack exchange,提问作者Christoph_J
相关产品推荐
相关产品推荐

