使用R调用DeepSeek API返回401错误(密钥无误)
问题诊断与解决方案
核心问题:环境变量名称不匹配
你设置的环境变量是DEEPSEEK_API_KEY,但在请求头中读取的却是MY_API_KEY,导致API密钥无法正确传入请求,服务器返回401未授权错误。修正步骤
- 统一环境变量名称,保证设置和读取的是同一个变量;
- 确认请求头的密钥字段
X-API-Key符合DeepSeek API要求(这部分你的代码是正确的)。
修正后的完整代码
library(httr) library(jsonlite) # 设置DeepSeek API密钥(统一环境变量名称) Sys.setenv(DEEPSEEK_API_KEY = "sk-000000000") # API端点URL api_endpoint <- "https://api.deepseek.com/chat/completions" # 构造请求体 payload <- list( model = "deepseek-chat", messages = list( list(role = "system", content = "You are a helpful assistant"), list(role = "user", content = "Hello") ) ) # 请求头:读取正确的环境变量 headers <- c( "Content-Type" = "application/json", "X-API-Key" = base::Sys.getenv("DEEPSEEK_API_KEY") ) # 发送POST请求 response <- POST( url = api_endpoint, add_headers(headers), body = toJSON(payload, auto_unbox = TRUE, encoding = "UTF-8"), encode = "json" ) # 处理响应 if (response$status_code == 200) { result <- fromJSON(content(response, "text", encoding = "UTF-8")) cat(result$choices[[1]]$message$content, "\n") } else { cat("请求失败,状态码:", response$status_code, "\n") cat("错误信息:", content(response, "text", encoding = "UTF-8"), "\n") }
- 额外检查项
- 确认API密钥未过期且具备对应模型的调用权限;
- 确保网络环境可正常访问DeepSeek API端点;
- 验证请求体格式(你的
messages结构和auto_unbox参数设置均符合要求)。
内容的提问来源于stack exchange,提问作者LocusClassicus
相关产品推荐
相关产品推荐

