前言¶
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 流程中自動處理大量作業、追求成本控制和操作效率的開發者。