簡介
本 Harness 驗證 Graphify 的知識提取功能是否正常運作,並評估提取品質。
驗證步驟
第一步:準備測試資料
# 建立測試目錄
mkdir -p graphify-test/inputs
cd graphify-test
# 準備測試文件
cat > inputs/test-project.md << 'EOF'
# Graphify 專案
Graphify 是一個將大型語言模型(LLM)與圖譜結合的工具,專注於知識管理。
## 核心團隊
- 張三:Tech Lead,負責後端架構
- 李四:Frontend Lead,負責 React 前端
- 王五:Product Manager
## 技術棧
- 後端:Python, FastAPI, Neo4j
- 前端:React, Next.js, TailwindCSS
- AI:OpenAI GPT-4
## 相關專案
- Superpowers:AI 開發方法論
- Codebase Memory:程式碼知識庫
EOF
第二步:執行提取測試
# 初始化測試圖譜
graphify init --name="test-extraction" --backend=builtin
# 提取測試文件
graphify extract inputs/test-project.md
預期輸出:
正在從 inputs/test-project.md 提取知識...
提取摘要:
- 實體:10+ 個
- 關係:15+ 個
✓ 知識已加入圖譜!
第三步:驗證實體提取
graphify query "圖譜中有哪些 Person 類型的實體?"
預期結果:
根據圖譜查詢結果,Person 類型實體有:
1. 張三
2. 李四
3. 王五
第四步:驗證關係提取
graphify query "張三和李四的角色是什麼?"
預期結果:
根據圖譜查詢結果:
- 張三:Tech Lead,負責後端架構
- 李四:Frontend Lead,負責 React 前端
第五步:驗證技術關係
graphify query "Graphify 使用了哪些技術?"
預期結果:
根據圖譜查詢結果,Graphify 使用以下技術:
後端:
- Python
- FastAPI
- Neo4j
前端:
- React
- Next.js
- TailwindCSS
AI:
- OpenAI GPT-4
第六步:驗證專案關係
graphify query "Graphify 與哪些專案相關?"
預期結果:
根據圖譜查詢結果:
- Superpowers:AI 開發方法論
- Codebase Memory:程式碼知識庫
品質評估
評估一:實體覆蓋率
graphify query "測試文件中的所有實體是否都被提取?"
評估標準:
- ✓ 人員:張三、李四、王五(3/3)
- ✓ 專案:Graphify, Superpowers, Codebase Memory(3/3)
- ✓ 技術:Python, FastAPI, Neo4j, React, Next.js, TailwindCSS, GPT-4(7/7)
通過條件:≥ 90% 實體被提取
評估二:關係準確度
graphify query "所有關係是否準確反映文件內容?"
評估標準:
- ✓ 張三 → 負責 → 後端架構
- ✓ 李四 → 負責 → React 前端
- ✓ Graphify → USES → Neo4j
- ✓ Graphify → RELATES_TO → Superpowers
通過條件:≥ 85% 關係準確
評估三:屬性完整性
graphify query "實體屬性是否完整?"
評估標準:
- ✓ 人員有角色資訊
- ✓ 技術有分類資訊
- ✓ 專案有描述資訊
驗證清單
| 步驟 | 測試項目 | 狀態 | 預期結果 |
|---|---|---|---|
| 1 | 準備測試資料 | 🔲 | 測試文件建立 |
| 2 | 初始化圖譜 | 🔲 | .graphify/ 目錄建立 |
| 3 | 執行提取 | 🔲 | 實體數 >= 10 |
| 4 | 驗證實體提取 | 🔲 | 人員 3/3 |
| 5 | 驗證關係提取 | 🔲 | 角色資訊正確 |
| 6 | 驗證技術關係 | 🔲 | 技術 7/7 |
| 7 | 驗證專案關係 | 🔲 | 專案 3/3 |
進階測試
測試一:批量提取
# 準備多個測試文件
cat > inputs/test1.md << 'EOF'
# 專案 A
團隊:張三、李四
技術:React, Node.js
EOF
cat > inputs/test2.md << 'EOF'
# 專案 B
團隊:王五、趙六
技術:Python, Django
EOF
# 批量提取
ls inputs/*.md > file-list.txt
graphify extract --batch=file-list.txt
驗證:
graphify query "所有專案的技術棧?"
測試二:增量提取
# 第一輪提取
graphify extract inputs/test-project.md
# 查詢統計
graphify stats
# 第二輪提取(新增文件)
cat > inputs/additional.md << 'EOF'
# 補充資訊
Graphify 還支援多種 LLM 提供者,包括 Anthropic Claude。
EOF
graphify extract inputs/additional.md
# 驗證增量
graphify query "圖譜中支援哪些 LLM 提供者?"
測試三:提取效能
# 準備大型文件
cat > inputs/large-doc.md << 'EOF'
# 大型文件
$(repeat 100 "這是一段測試文字,包含實體和關係。")
EOF
# 測量提取時間
time graphify extract inputs/large-doc.md
效能基準:
- 小文件(< 1KB):< 2s
- 中文件(1-10KB):< 10s
- 大文件(> 10KB):< 30s
故障排除
❌ 問題:提取實體數過少
可能原因:
- 文件內容過於簡單
- LLM 無法理解語意
解決方案:
# 使用更詳細的文件
# 或調整提取模式
graphify extract file.md --mode=full
❌ 問題:關係提取不準確
可能原因:
- 文件中關係描述不明確
- LLM 溫度參數過高
解決方案:
# 調整溫度參數
graphify extract file.md --temperature=0.1
# 或使用自訂提示
graphify extract file.md --prompt=./prompts/relations.txt
❌ 問題:重複實體
可能原因:
- 不同來源描述同一實體
- 實體名稱略有差異
解決方案:
# 合併重複實體
graphify merge --entities="Graphify,graphify"
# 或設定實體標準化
graphify config set entity.normalization=true
結論
若所有測試均通過 🟢,則 Graphify 提取功能驗證成功,可以進行正式的知識提取作業。
下一步
提取驗證成功後,可以:
- 執行「查詢效能測試」驗證查詢功能
- 執行「視覺化測試」驗證視覺化功能
- 開始建立實際的知識圖譜