DeepSeek错峰优惠workflow技术实践

背景说明

在人工智能大模型领域,DeepSeek开放平台自2025年2月27日起推出错峰优惠活动,每日00:30至08:30期间:

  • DeepSeek-V3 模型价格降至原价50%
  • DeepSeek-R1 模型价格降至原价25%
    在这里插入图片描述
    为帮助开发者和内容生产者高效利用该优惠时段,本文将介绍一种基于github workflow的自动化解决方案。

在这里插入图片描述
5637557320fbfb3292307735f0b8acd53a791241.png@112w_112h.png

闲时R1能享受V3的半价, 你就说香不香吧😂


先看效果

  • workflow scheduled 成功执行
    在这里插入图片描述
  • 成功请求,并自动提交结果
    在这里插入图片描述

可行性分析

GitHub Actions支持:

  • 定时任务(最大限制:每月2000分钟)
  • 私有仓库免费使用
  • 支持北京时间执行(需设置时区)
  • 自带版本控制

前置条件

  • 设置 Repository secrets,保护 DS API KEY
    在这里插入图片描述

  • 设置 Workflow permissions, 赋予Workflow自动提交权限
    在这里插入图片描述

实现步骤

完整项目见 https://github.com/spaceack/auto-deepseek

  1. 仓库结构准备
├── .github
│   └── workflows
│       └── deepseek.yml
├── questions  # 待解答的问题
├── processed  # 已处理的问题
│   ├── content1.txt
│   └── content2.txt
└── results  # 存放 DS API 响应结果
  1. 编写 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}")

  1. 编写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的定价方案,真是太好啦。
c8e919a83f19aa615d0a24cb1e752a449561.gif

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Spaceack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值