dsh-educoder:EduCoder 作業全自動化插件

前言

DeepSeek Harness (DSH) 的核心理念是“一切皆插件”。在開發或使用 DSH 進行自動化任務時,往往需要編寫腳本調用外部接口。對於頭歌(EduCoder)這類作業平臺,通常的自動化方案需要瀏覽器自動化、截圖識別或 OCR,這會增加複雜度並消耗資源。

dsh-educoder 是一個直接針對 EduCoder 平臺 JSON 接口開發的 DSH 插件。它通過全量掃描賬號未完成的作業並一次性解決,實現了“零 token”掃描和“零 token”選擇題。本插件不依賴瀏覽器,僅使用平臺公開接口,適合需要在 DSH 流程中自動處理 EduCoder 作業的場景。

插件概況

  • 名稱:dsh-educoder
  • 所有者:isheng-eqi
  • 類別:工作流
  • 許可證:MIT

核心價值:
1. 全量掃描:一鍵掃描賬號下所有未完成的作業。
2. 低 token 設計:掃描過程零 token,選擇題零 token(通過平臺響應回吐答案鍵),僅代碼題調用模型。
3. 真實提交:自動執行真實的提交和評測流程,消耗評測次數。

安裝與啓用

插件包名爲 dsh-educoder,bundle 行 id 爲 educoder。推薦使用預構建的 npm 包,避免本地構建授權問題。

在 DSH 的插件管理中,執行以下命令之一:

# npm 安裝(推薦)
#   target: dsh-educoder

# 從 GitHub 安裝
#   target: github:isheng-eqi/dsh-educoder

安裝後,在 ~/.dsh/profiles/<profile>/cordis.patch.yml 文件中會出現 educoder 配置項。配置支持熱應用,修改後無需重啓 DSH。

配置項

在 DSH 的插件設置界面或配置文件中填寫以下參數:

鍵 默認 說明
login / password 空 頭歌賬號。首次登錄後複用會話 cookie,密碼不直接顯示在對話中。
sessionFile ~/.educoder/session.json 會話緩存路徑,與 educoder-lab CLI 共享。
provider / model 空 生成答案用的模型;留空則使用當前會話模型。
maxAttempts 3 每道代碼題最多重試次數。
maxTokens 8000 單次生成上限。
gradeTimeoutSec 180 單次評測最長等待時間。
pollIntervalSec 3 輪詢評測結果的間隔。
challengeLimit 0 單份作業中 0 表示一次做完所有未通過關卡。
homeworkLimit 0 單次全量掃描最多處理幾份作業;0 表示不限。
toolTimeoutMinutes 45 工具整體超時時間。

典型用法

1. 賬號檢測與課程列表

在提交任何作業前,先檢查賬號連接狀態。只列出課程不能證明會話有效(/courses.json 不需要登錄),必須讀取一次關卡數據。

educoder_account  url: <你的作業鏈接>

2. 掃描未完成作業

零 token 掃描賬號(或指定一門課)的所有作業,僅讀取數據,不提交。

educoder_sweep  mode=scan

3. 一次性解決所有作業

執行真正的解決流程。選擇題自動從平臺響應獲取答案鍵,無需模型;代碼題調用模型生成並提交評測。

educoder_sweep  mode=solve

4. 單份作業處理

針對特定作業進行巡檢或解決。

# 巡檢模式,只讀不提交
educoder_homework  url: <作業鏈接>  mode=survey

# 解決模式,默認
educoder_homework  url: <作業鏈接>  mode=solve

關鍵實現要點

插件基於對 EduCoder 平臺接口的實測實現,核心邏輯如下:

  • 簽名機制:每個請求攜帶 X-EDU-Type/Timestamp/Signature。簽名算法爲 md5(base64("method=<M>&ak=<AK>&sk=<SK>&time=<epoch-ms>"))。AK/SK 爲平臺前端 bundle 中的公開常量。
  • 關卡遍歷:平臺無“獲取第 N 關”接口。插件先通過 prev_game 回退到未通過關卡的起點,再向前遍歷。通過一關後需重新讀取該關卡,因爲 next_game 在通過前爲 null。
  • 一次評測:一個關卡的多個文件整體評測。上傳時設置 evaluate: 0,待所有文件傳完再觸發一次 game_build.json,避免多次觸發導致半成品評測浪費配額。
  • 評測判定:等待 game.evaluate_count 真正上漲,確認新一輪評測開始;隨後等待兩次輪詢結果一致。game.status == 2 直接判定通過。
  • 佔位符處理:平臺填空題的佔位符是 —(U+2014),非合法代碼。如果答案中保留該字符,插件會直接本地重試,不浪費評測次數。
  • 失敗反饋:不截斷兩邊輸出,而是定位第一處差異(行/列 + 上下文),以便模型快速修正。
  • 會話失效檢測:平臺返回 401 時 HTTP 狀態碼爲 200。插件檢測到 body 中的 {"status":401} 會自動觸發重登,並在任何寫入操作前執行。
  • 會話驗證:/courses.json 不需要登錄也返回數據,因此不能用來驗證憑據。插件將會話校驗放在第一次關卡讀取上。

適用場景與注意

  • 真實提交:mode=solve 會真實提交到平臺並消耗評測次數。不確定時請先用 mode=survey。
  • 賬號安全:驅動的是配置中填寫的賬號,請勿指向他人賬號。
  • 權限與緩存:會話緩存文件以 0600 權限寫入,僅本機可讀。
  • 公開密鑰:AK/SK 爲平臺公開常量,插件不涉及第三方密鑰。
  • 非官方客戶端:這是一個非官方自動化客戶端,請在頭歌平臺條款允許的範圍內使用。
  • 代碼修改:如果修改了 index.js 或 lib/*.js,必須重啓 DSH(dsh web)。DSH 按包名緩存模塊,同一進程內不會重新加載同名包。

總結

dsh-educoder 通過精準的 API 操作和低 token 策略,將 EduCoder 作業自動化集成到了 DSH 生態中。它適合需要在 DSH 流程中自動處理大量作業、追求成本控制和操作效率的開發者。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜