背景说明
在人工智能大模型领域,DeepSeek开放平台自2025年2月27日起推出错峰优惠活动,每日00:30至08:30期间:
- DeepSeek-V3 模型价格降至原价50%
- DeepSeek-R1 模型价格降至原价25%
为帮助开发者和内容生产者高效利用该优惠时段,本文将介绍一种基于github workflow的自动化解决方案。
闲时R1能享受V3的半价, 你就说香不香吧😂
先看效果
- workflow scheduled 成功执行
- 成功请求,并自动提交结果
可行性分析
GitHub Actions支持:
- 定时任务(最大限制:每月2000分钟)
- 私有仓库免费使用
- 支持北京时间执行(需设置时区)
- 自带版本控制
前置条件
-
设置 Repository secrets,保护 DS API KEY
-
设置 Workflow permissions, 赋予Workflow自动提交权限
实现步骤
完整项目见 https://github.com/spaceack/auto-deepseek
- 仓库结构准备
├── .github
│ └── workflows
│ └── deepseek.yml
├── questions # 待解答的问题
├── processed # 已处理的问题
│ ├── content1.txt
│ └── content2.txt
└── results # 存放 DS API 响应结果
- 编写 DeepSeek Python处理脚本
import os
import shutil
from openai import OpenAI
# 读取 API Key
api_key = os.getenv("OPENAI_API_KEY")
# 定义目录
QUESTION_DIR = "question"
PROCESSED_DIR = "processed"
RESULT_DIR = "result"
# 确保目录存在
os.makedirs(PROCESSED_DIR, exist_ok=True)
os.makedirs(RESULT_DIR, exist_ok=True)
# 获取未处理的问题文件列表
question_files = [f for f in os.listdir(QUESTION_DIR) if os.path.isfile(os.path.join(QUESTION_DIR, f))]
if not question_files:
print("No more questions to process.")
exit(0)
# 选取第一个问题文件(保证不重复)
question_file = sorted(question_files)[0]
question_path = os.path.join(QUESTION_DIR, question_file)
# 读取内容
with open(question_path, "r", encoding="utf-8") as f:
question_content = f.read().strip()
# 创建 OpenAI 客户端
client = OpenAI(api_key=api_key, base_url="https://api.deepseek.com")
# 发送请求
response = client.chat.completions.create(
model='deepseek-reasoner',
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": question_content},
],
stream=False
)
# 获取返回结果
result_text = response.choices[0].message.content
# 生成结果文件
timestamp = question_file.replace("content", "").replace(".txt", "")
result_path = os.path.join(RESULT_DIR, f"response_{timestamp}.txt")
with open(result_path, "w", encoding="utf-8") as f:
f.write(result_text)
# 移动已处理的问题文件
shutil.move(question_path, os.path.join(PROCESSED_DIR, question_file))
print(f"Processed {question_file}, result saved to {result_path}")
- 编写Workflow配置文件
- deepseek.yml
name: DeepSeek Night Processing
on:
schedule:
# 北京时间00:45触发(UTC时间16:45)
- cron: '45 16 * * *'
workflow_dispatch: # 允许手动触发
jobs:
run-script:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v4
- name: 设置 Python 环境
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: 安装依赖
run: pip install openai
- name: 生成随机延迟
run: |
RANDOM_DELAY=$((RANDOM % 4)) # 0-3 分钟的随机延迟
echo "Sleeping for $RANDOM_DELAY minutes..."
sleep $((RANDOM_DELAY * 60))
- name: 运行 Python 脚本
run: python run_script.py
env:
OPENAI_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
- name: 提交结果到仓库
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
git add result/ processed/
git commit -m "Processed one question and stored response at $TIMESTAMP"
git push
云主机方案与 workflow方案对比
维度 | 云主机方案 | GitHub workflow方案 |
---|---|---|
成本 | 需云主机费用 | 免费(在限额内) |
维护复杂度 | 需自行维护服务器 | 无需基础设施维护 |
执行时长限制 | 无限制 | 免费版单Job最长72小时 |
网络稳定性 | 依赖云服务商网络 | 使用GitHub全球网络 |
数据安全性 | 自行保障 | 需注意敏感信息存储于Secrets |
《卡皮巴拉和小狗泥巴的“泡澡大作战”》赏析
结语
通过这次实践,了解了workflow的自动化流程,和Deepseek的定价方案,真是太好啦。

欢迎关注 公-众-号【编程之舞】,第一时间获取有趣的信息。