從 GitHub repo 取得原始碼並對照 RAG 知識庫中的題目與評分方式進行評分。 觸發詞:「幫我評分」、「批改」、「看看我的 GitHub」、「評量我的作業」、 「check my repo」、「評分這個 repo」。 需要使用者提供:GitHub repo URL(支援公開 repo,私有 repo 需 token)。
此 Skill 分為兩個子任務:
fetch-repo — 從 GitHub API 取得 repo 原始碼(可獨立呼叫)grade — 結合題目 + 評分方式 + 原始碼 → 輸出評分報告兩者都可透過 RAG KB 的 /grade_stream SSE API 一次完成,也可單獨呼叫 GitHub API。
當使用者說「看一下這個 repo」、「幫我讀取這個專案」、「這個 GitHub 有什麼」時, 只執行 fetch-repo,不進行評分。
Step 1: 解析 GitHub URL → owner / repo / branch
Step 2: 取得檔案樹(GitHub Trees API)
Step 3: 篩選並讀取主要程式碼檔案
Step 4: 整理成結構化摘要回傳
支援格式:
https://github.com/{owner}/{repo} → branch 預設 mainhttps://github.com/{owner}/{repo}/tree/{branch}GET https://api.github.com/repos/{owner}/{repo}/git/trees/{branch}?recursive=1
Authorization: Bearer {token} # 私有 repo 才需要
User-Agent: openclaw-grader
回傳的 tree[] 陣列中,type=blob 的是檔案。
讀取副檔名為 .java .kt .py .ts .js .go .cs .sql .md .xml .gradle 的完整檔案內容。
跳過路徑含 test target build node_modules __pycache__ .git dist vendor 等目錄。
跳過 lock 檔案:package-lock.json yarn.lock poetry.lock 等。
GET https://raw.githubusercontent.com/{owner}/{repo}/{branch}/{path}
Authorization: Bearer {token} # 私有 repo 才需要
Token 保護策略:
.java .kt .py .ts .js .go .cs .sql 邏輯檔案,直到填滿 600KB 為止AI 自行決定重點: 不預先截取片段,讓 AI 看完整程式碼後自行判斷評分依據。
Repo: {owner}/{repo} @{branch}
共 {N} 個檔案,讀取 {M} 個程式碼檔案({KB}KB)
📄 讀取的檔案:
- src/main/java/.../UserController.java (完整內容)
- src/main/java/.../UserService.java (完整內容)
...
直接呼叫 RAG KB 的 SSE 端點,一次取得題目 + 評分方式 + 程式碼:
GET http://localhost:8765/grade_stream?repo_url={url}&token={token}
SSE 事件:
event: progress — 進度訊息event: done — 完成,data 為 JSON:
{
"owner": "stu24801",
"repo": "my-project",
"branch": "main",
"file_count": 45,
"code_files_read": 12,
"questions_available": ["社群媒體系統.md", ...],
"grading_prompt": "你是一位嚴格但公正的後端工程師面試評審..."
}
event: error — 錯誤訊息收到 done 事件後,將 grading_prompt 交給 AI 推論(即本對話)進行評分。
GET http://localhost:8765/sources
找 category 含 題目_md 的文件,取其 id:
GET http://localhost:8765/doc/{file_id}
取評分方式:
GET http://localhost:8765/doc_by_source?source_name=評分方式
| 題目 | 關鍵 Entity / 關鍵詞 |
|---|---|
| 社群媒體系統 | User, Post, Like, Follow, Feed |
| 金融商品喜好紀錄 | Fund, Product, Portfolio, Transaction |
| 員工座位系統 | Employee, Seat, Office, Booking |
| 電商購物中心 | Product, Order, Cart, Payment |
| 圖書借閱系統 | Book, Borrow, Return, Member |
| 線上投票系統 | Vote, Poll, Option, Result |
依 評分方式.md 的每個項目評定:
✅ [項目名稱] — 已完成
說明:在 XxxController.java 第 42 行實作 POST /api/users。
⚠️ [項目名稱] — 部分完成(扣 X 分)
說明:缺少密碼加鹽處理。
❌ [項目名稱] — 未完成
說明:未找到 JWT 相關實作。
## 評分結果
### 是否符合技術要求(共 N 項):X 項
(逐項列出 ✅ / ❌)
### 是否符合架構要求(共 N 項):X 項
(逐項列出 ✅ / ❌)
### 是否符合功能要求(共 N 項):X 項
(逐項列出 ✅ / ❌)
---
## 總評 ({等級符號})
### 未達標部分
1. (列出未達標的具體說明)
2. ...
### 其他評論
- (其他觀察,如是否用 TypeScript、是否有 AI 生成痕跡等)
---
## 結果
- **分數:** {數字} ({等級符號})
- **達標項目數 / 總項目數:** {達標} / {總計} = {比率}
### 評分等級說明
◎(90-100)/ ○(80-89)/ ▲(60-79)/ △(30-59)/ ×(29 以下)
| 情況 | 處理方式 |
|---|---|
| 公開 repo | 直接讀取,不需 token |
| 私有 repo | 請使用者提供 ghp_xxxx token |
| 大型 repo(>200 檔) | 優先讀關鍵目錄,不需全讀 |
| 無法判斷題目 | 請使用者確認,或列出最可能的 2 個 |
| 多道題目在同一 repo | 分別評分或請使用者指定 |
| GitHub API rate limit | 提示使用者提供 token(即使公開 repo token 也可提升限制) |
https://rag.alex-stu24801.com/grade_uihttp://localhost:8765/grade_stream?repo_url=...http://localhost:8765/sources、/doc/{id}、/doc_by_source