You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R调用DeepSeek API返回401错误(密钥无误)

问题诊断与解决方案
  • 核心问题:环境变量名称不匹配
    你设置的环境变量是DEEPSEEK_API_KEY,但在请求头中读取的却是MY_API_KEY,导致API密钥无法正确传入请求,服务器返回401未授权错误。

  • 修正步骤

    1. 统一环境变量名称,保证设置和读取的是同一个变量;
    2. 确认请求头的密钥字段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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:40:01