修复翻译API认证错误 | AI生成和翻译

Home 2025.11

工作流程与错误原因分析

您的 “Translate Recent Notes” GitHub Actions 工作流程整体结构良好——它能够检出代码库、设置Python环境、安装依赖、对最近N篇文章运行翻译脚本,并将更改提交到_notes/目录。但根据您之前分享的日志(在翻译成ar、de、fr等语言时出现401错误),问题出在scripts/translation/update_lang_notes.py内部的翻译API调用认证环节。

根本原因

推荐修复方案

  1. 更新工作流程中的环境变量
    • 与常见的OpenRouter设置(OpenAI兼容)对齐。将”Translate posts”步骤中的env块改为:
      env:
        GITHUB_TOKEN: $
        OPENAI_API_KEY: $  # 将变量名改为脚本期望的名称
        OPENAI_BASE_URL: https://openrouter.ai/api/v1   # 路由到OpenRouter所必需
      
    • 如果DEEPSEEK_API_KEY是您的OpenRouter密钥,很好。如果这是直接的DeepSeek密钥,请在仓库设置中创建一个新密钥OPENROUTER_API_KEY,填入您实际的OpenRouter密钥(在openrouter.ai/keys获取)。
    • 测试:在运行步骤中添加echo $OPENAI_API_KEY(已脱敏)用于日志调试。
  2. 修复Python脚本(update_lang_notes.py
    • 确保按以下方式初始化OpenAI客户端(假设使用openai库):
      import os
      from openai import OpenAI
      
      client = OpenAI(
          api_key=os.getenv("OPENAI_API_KEY"),
          base_url=os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")  # 如果未设置则默认使用OpenAI
      )
      
      # 然后使用 client.chat.completions.create(..., model="x-ai/grok-4-fast")
      
    • 如果使用LiteLLM(常用于多提供商):如果requirements.txt中没有,请安装它,并调用completion(model="openrouter/x-ai/grok-4-fast", api_key=os.getenv("OPENAI_API_KEY"), api_base="https://openrouter.ai/api/v1", ...)
    • 对于翻译循环:为每种语言添加错误处理(例如,在API调用周围使用try/except,记录失败,如果是401则跳过)。
    • 显式处理cookies?可能不需要——坚持使用API密钥。如果脚本有浏览器/Selenium代码,请移除以提高CI可靠性。
  3. 工作流程改进
    • 输入验证:添加对N=0或无效--n的检查,避免处理空内容。
    • 条件提交:您的git diff --cached --quiet || git commit很好,但更新提交消息以反映所有语言:-m "Add translated posts (ar, de, es, fr, hi, ja, zh, hant)"
    • 缓存:添加actions/cache用于pip以加速安装。
    • 调试模式:添加可选输入debug: true和脚本的--debug标志用于详细日志记录。
    • 权限:确保github-pages环境具有所需的读写权限。
    • 完整的”Translate posts”步骤更新YAML片段: ```
      • name: Translate posts run: | python scripts/translation/update_lang_notes.py –n $ env: GITHUB_TOKEN: $ OPENAI_API_KEY: $ OPENAI_BASE_URL: https://openrouter.ai/api/v1 ```
  4. 测试步骤
    • 本地测试:在本地使用导出的环境变量运行python scripts/translation/update_lang_notes.py --n 1(例如export OPENAI_API_KEY=your_key)。
    • 工作流程测试:使用workflow_dispatch和N=1触发,检查日志中的API调用。
    • 验证密钥:在仓库设置 > Secrets中,确认DEEPSEEK_API_KEY具有有效的OpenRouter密钥(以sk-or-...开头)。
    • 如果仍然失败,向脚本添加--verbose并检查请求头(例如通过print(client.api_key))。

这应该能解决401错误并使翻译流程正常运行。如果您分享update_lang_notes.py的代码片段(例如API客户端初始化部分),我可以更精确地定位问题。

参考资料


Back

x-ai/grok-4-fast

Donate