Skip to content

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

diary-batch · 实习日记批量提交工具

适用学校:广东建设职业技术学院(广州校区 / 清远校区) 目标系统:岗位实习管理信息系统(学校教务实习子系统) 运行环境:Windows 10+(打包版双击即用,无需 Python)

一次性补写整个实习周期的实习日记,并批量提交到学校岗位实习管理信息系统。与日常签到主脚本 gdcvi-checkin 相互独立、互不影响。


目录


功能特性

  • 按星期智能生成:工作日写办公室日常、周末写生活场景、法定节假日注入假期场景(内置 holidays.txt
  • 多批次自动选择:解析下拉框全部批次及起止日期,每篇按日记日期自动落到对应批次,无覆盖时兜底当前批次并提示
  • 分批流水线:线程池并发生成 + 串行提交 + 随机间隔,降低元数据集中度
  • 断点续跑:每篇结果即时落盘 diary_batch_state.json,中断/失败后重跑自动跳过已成功项,只补缺
  • 两道安全闸--dry-run 全量预演 + 大写 YES 确认(日记无删除入口,提交即永久)
  • 配置驱动config.json + 命令行覆盖,正式运行无需逐项问答
  • 单实例锁:Windows 命名 mutex,重复双击不会开多实例并发提交

快速开始

环境要求

要求
操作系统 Windows 10 / 11(打包版)
源码运行 Python 3.9+(需 cancel_futures),依赖 requests>=2.32.0
LLM 接口 OpenAI 兼容(NewAPI / OneAPI 等聚合网关均可)
网络 能访问学校实习系统与 LLM API

打包版双击 dist\diary_batch_submit.exe 即用;源码运行 python diary_batch_submit.py

命令 用途
diary_batch_submit.exe --init 首次配置:交互引导,写入 config.json(账号 / LLM / batch)
diary_batch_submit.exe --test 生成 1 篇看质量,不登录不提交
diary_batch_submit.exe --test --date 2026-08-26 测指定日期(看不同星期 / 节假日场景)
diary_batch_submit.exe --dry-run 走完全量生成 + 统计,不提交(验证生成链路)
diary_batch_submit.exe 正式批量:输大写 YES 后才开始提交

典型顺序:--init(首次)→ --test(验质量)→ --dry-run(验全量)→ 正式跑。

工作流程

正式模式时序

1. 单实例锁检查(已有实例在跑 → 提示退出)
2. 读 config.json + 命令行覆盖 → 打印参数总览
3. 登录(显示「姓名(学号)」;失败立即退出,防锁号)
4. 解析实习批次列表(只读,含各批次起止日期)
5. 当月日历查重(服务端仅能判断当月)
6. 打印待提交篇数(跨批次时列出各批次篇数)
   ┌─────────────────────────────────────┐
7. │ 输入大写 YES ★(唯一确认闸,不输不提交)│
   └─────────────────────────────────────┘
8. 分批流水线(每批 batch_size 篇):
   ① 线程池并发生成本批(gen_workers 路,单篇重试 3 次)
   ② 串行提交本批(篇间随机 gap 秒,每篇结果即时写 state)
   ③ 批间随机停顿 pause 秒
9. 全部完成 → 打印统计(成功 / 判重 / 失败)

中断与续跑

  • Ctrl+C:随时中断。排队中的生成任务立即取消,已提交的已存盘,重跑自动跳过已成功项
  • 进程异常退出:已落盘的结果保留,重跑只补缺
  • 生成失败的单篇:标记 failed 落盘,不影响整批;重跑时 failed 不算完成,会重新生成

预计耗时

190 篇约 35-40 分钟(默认激进档:并发 4 线程、gap 3-8s、pause 15-30s)。提交节奏是瓶颈,加速生成无意义;想更快可调小 gap / pause。

配置说明

位置:exe 同目录(或脚本目录)。首次用 --init 生成,也可手动编辑。

{
  "version": 2,
  "accounts": [
    {"student_id": "YourStudentID", "password": "YourPassword123"}
  ],
  "llm": {
    "api_base": "http://your-newapi-host:3000/v1",
    "api_key": "sk-xxxxxxxx",
    "model": "your-model-name",
    "prompt": "",
    "timeout_sec": 60
  },
  "batch": {
    "start": "2026-07-13",
    "end": "2027-01-18",
    "weekday_mode": 1,
    "holiday_mode": 3,
    "batch_size": 10,
    "gen_workers": 4,
    "gap": [3, 8],
    "pause": [15, 30]
  }
}

上例中的学号 / 密码 / API key / 域名均为占位符,请替换为真实值。该文件含明文凭证,勿外传。

字段说明

accounts

字段 说明
student_id 学号
password 登录密码(明文)

llm

字段 说明
api_base OpenAI 兼容 API 地址,结尾保留 /v1
api_key API 密钥
model 模型名(NewAPI 中的模型 / 渠道别名)
prompt 自定义系统提示词;留空用内置 DEFAULT_LLM_PROMPT
timeout_sec 单次 LLM 请求超时秒数

batch

字段 说明 默认
start / end 实习起止日期(YYYY-MM-DD) 2026-07-13 / 2027-01-18
weekday_mode 1=每天 2=仅工作日 3=周一到周六 1
holiday_mode 1=照常写 2=跳过 3=注入节假日场景 3
batch_size 每批篇数(生成 → 提交 → 停顿) 10
gen_workers 并发生成线程数(1-8) 4
gap 提交篇间隔随机区间(秒) [3, 8]
pause 批间停顿随机区间(秒) [15, 30]

命令行参数

均覆盖 config,单次生效。

参数 说明
--init 交互式配置引导,写入 config.json
--test 生成 1 篇看质量(不登录不提交)
--date YYYY-MM-DD --test 指定日期(默认 batch.start
--dry-run 全量生成 + 统计,不提交
--start / --end 覆盖起止日期
--weekday N 覆盖星期规则(1/2/3)
--holiday N 覆盖节假日模式(1/2/3)
--batch-size N 覆盖每批篇数
--gap A-B 覆盖篇间隔(如 --gap 5-10
--pause A-B 覆盖批间停顿
--workers N 覆盖并发生成线程数(1-8)
--student-id 覆盖学号(用 config 里同账号的密码)

安全与边界

安全机制

  • 提交即永久:日记无删除入口。正式提交前必须输入大写 YES
  • dry-run 预演:走完登录 + 查重 + 全量生成,不提交
  • 断点续跑:每篇结果实时写 diary_batch_state.json
  • Ctrl+C:随时中断,已提交的已保存,排队任务立即取消
  • 登录失败立即退出:不重试(连续错 5 次锁号 5 分钟)
  • 单实例锁:Windows 命名 mutex,防止重复双击开多实例
  • 会话失效自动重登:提交途中会话过期自动重登 1 次(令牌刷新),仍失败记 state 继续

已知边界

  • 日历查重仅能判断当月:服务端限制,早期月份若已有日记会重提、被服务端判重复(DUP 标记,无害但耗时)
  • 多批次按日期自动选择:批次下拉框选项自带起止日期,每篇提交到覆盖该日的批次;不在任何批次范围内的日期兜底用当前批次(计划概览会 [!] 提示)
  • 未来日期:可直接提交(已实测);日记入库日期为目标日期,非提交当天
  • 节假日列表:内置 holidays.txt(同目录),每行一个 yyyy-MM-dd# 后为注释;holiday_mode=3 时命中节假日的日期换用假期场景提示词

常见问题排查

现象 排查
LLM 403(AllocationQuota.FreeTierOnly NewAPI 渠道上游免费额度耗尽。用同一 key 逐模型实测(GET /v1/models 后逐个 POST chat)定位是账户级还是单渠道,换可用模型或修上游
exe 双击闪退 命令行运行看报错;常见为打包时漏装运行依赖 requests(exe 体积异常小是信号)
生成全失败 --test 验证 LLM 链路,API 正常后再跑批量
多个 cmd 窗口 旧版无单实例锁,连点导致多实例并发;新版已用 mutex 锁,重复开会被拒
提交被判 DUP 该日期日历已有日记(当月)或主脚本已写过(早期月份);无害,重跑会自动跳过

项目结构与打包

diary-batch/
├── diary_batch_submit.py     # 主脚本(子命令 + 分批流水线 + 线程池)
├── diary_batch_state.json    # 断点续跑状态(运行后生成)
├── config.json               # 配置(--init 生成或手动编辑;含明文凭证)
├── holidays.txt              # 法定节假日列表(可选,可自行追加)
├── README.md                 # 本文档
└── dist/
    ├── diary_batch_submit.exe  # 打包版(双击即用)
    └── config.json             # 打包版的配置(同目录)

打包前确保打包用的 Python 已装 requestspyinstaller

env -u CODEBUDDY_SESSION_ID -u CLAUDE_SESSION_ID python -m pip install "requests>=2.32.0" pyinstaller
env -u CODEBUDDY_SESSION_ID -u CLAUDE_SESSION_ID python -m PyInstaller --onefile --console \
    --name diary_batch_submit --collect-all requests diary_batch_submit.py --noconfirm

产物:dist\diary_batch_submit.exe

  • 打包后用 ./dist/diary_batch_submit.exe --help 验证 import 链(看 banner 是否出现)
  • CODEBUDDY_SESSION_ID / CLAUDE_SESSION_ID 是为绕过本机 safe-delete 对 os.remove 的拦截(详见 .workbuddy/memory 日志)
  • 清理旧产物(build / .spec / 旧 exe)也用清了 SESSION_ID 的 Python(shutil.rmtree / os.remove),勿用 bash rm

免责声明

本工具用 LLM 批量生成实习日记并提交学校系统,属于学术诚信灰色地带

  • 日记内容由 AI 生成,非真实实习记录
  • 提交元数据(连续 ID、集中时间戳)可能被教师后台识别
  • 一旦提交无法删除,提交即永久

使用者须自行承担相应后果。工具开发者不鼓励、不建议伪造实习记录,仅在技术层面提供维护。提交与否、提交多少,由使用者自行决定。

About

广东建设职业技术学院(gdcvi)岗位实习管理信息系统实习日记批量自动提交工具。一次性补写整个实习周期的实习日记并提交到学校教务系统,支持按星期智能生成、断点续跑、分批流水线、线程池并发、配置驱动。适用广建广州校区/清远校区实习报告补交。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages