簡介
本 Harness 驗證 Graphify 的查詢功能是否正常運作,並評估查詢效能與準確度。
驗證步驟
第一步:準備測試圖譜
# 建立測試圖譜
graphify init --name="test-query" --backend=builtin
# 準備測試資料
cat > test-data.md << 'EOF'
# 測試知識庫
## 人員
- 張三:資深工程師,專精 Python
- 李四:前端工程師,專精 React
- 王五:產品經理
## 專案
- Graphify:LLM + 圖譜工具
- Superpowers:AI 開發方法論
- TechDocs:技術文件平台
## 關係
- 張三 → 參與 → Graphify
- 李四 → 參與 → Graphify
- 李四 → 參與 → TechDocs
- 王五 → 負責 → Superpowers
- Graphify → 依賴 → Superpowers
EOF
# 提取資料
graphify extract test-data.md
第二步:簡單查詢測試
# 測試一:列出所有人員
graphify query "圖譜中有哪些人?"
預期結果:
根據圖譜查詢結果:
1. 張三 - 資深工程師,專精 Python
2. 李四 - 前端工程師,專精 React
3. 王五 - 產品經理
驗收標準:
- ✓ 返回 3 人
- ✓ 角色資訊正確
- ✓ 回應時間 < 1s
# 測試二:列出所有專案
graphify query "有哪些專案?"
預期結果:
根據圖譜查詢結果:
1. Graphify - LLM + 圖譜工具
2. Superpowers - AI 開發方法論
3. TechDocs - 技術文件平台
驗收標準:
- ✓ 返回 3 個專案
- ✓ 描述資訊正確
- ✓ 回應時間 < 1s
第三步:關係查詢測試
# 測試三:查詢參與關係
graphify query "誰參與了 Graphify 專案?"
預期結果:
根據圖譜查詢結果,參與 Graphify 專案的人員有:
1. 張三 - 資深工程師
2. 李四 - 前端工程師
驗收標準:
- ✓ 正確識別參與者
- ✓ 排除未參與者(王五)
- ✓ 回應時間 < 2s
# 測試四:查詢多個專案
graphify query "李四參與了哪些專案?"
預期結果:
根據圖譜查詢結果,李四參與了以下專案:
1. Graphify - LLM + 圖譜工具
2. TechDocs - 技術文件平台
驗收標準:
- ✓ 返回 2 個專案
- ✓ 專案名稱正確
- ✓ 回應時間 < 2s
第四步:多跳查詢測試
# 測試五:兩跳查詢
graphify query "張三參與的專案依賴哪些專案?"
預期結果:
根據圖譜查詢結果:
張三 → 參與 → Graphify
Graphify → 依賴 → Superpowers
答案:Superpowers(AI 開發方法論)
驗收標準:
- ✓ 正確推斷兩跳關係
- ✓ 邏輯清晰
- ✓ 回應時間 < 3s
第五步:聚合查詢測試
# 測試六:統計查詢
graphify query "每個專案有多少人參與?"
預期結果:
根據圖譜查詢結果:
1. Graphify - 2 人(張三、李四)
2. TechDocs - 1 人(李四)
3. Superpowers - 1 人(王五,但為負責人)
驗收標準:
- ✓ 正確統計人數
- ✓ 分組正確
- ✓ 回應時間 < 3s
# 測試七:最大值查詢
graphify query "哪個專案人數最多?"
預期結果:
根據圖譜查詢結果:
Graphify 專案人數最多,有 2 人參與。
驗收標準:
- ✓ 正確識別最大值
- ✓ 理由充分
- ✓ 回應時間 < 3s
第六步:條件查詢測試
# 測試八:條件過濾
graphify query "哪些人專精 Python?"
預期結果:
根據圖譜查詢結果:
張三 - 資深工程師,專精 Python
驗收標準:
- ✓ 正確過濾
- ✓ 無誤判
- ✓ 回應時間 < 2s
# 測試九:否定條件
graphify query "哪些專案李四沒有參與?"
預期結果:
根據圖譜查詢結果:
李四沒有參與的專案:
1. Superpowers - AI 開發方法論
驗收標準:
- ✓ 正確識別非參與專案
- ✓ 無遺漏
- ✓ 回應時間 < 3s
第七步:邊界情況測試
# 測試十:空結果查詢
graphify query "誰參與了不存在專案?"
預期結果:
根據圖譜查詢結果,沒有人參與「不存在專案」。
驗收標準:
- ✓ 正確處理空結果
- ✓ 無錯誤
- ✓ 回應時間 < 1s
效能基準
小圖譜(< 100 節點)
| 查詢類型 | 目標時間 |
|---|---|
| 簡單查詢 | < 1s |
| 關係查詢 | < 2s |
| 多跳查詢 | < 3s |
| 聚合查詢 | < 3s |
中圖譜(100-1000 節點)
| 查詢類型 | 目標時間 |
|---|---|
| 簡單查詢 | < 2s |
| 關係查詢 | < 5s |
| 多跳查詢 | < 10s |
| 聚合查詢 | < 10s |
驗證清單
| 步驟 | 測試項目 | 狀態 | 預期結果 |
|---|---|---|---|
| 1 | 準備測試圖譜 | 🔲 | 3 人、3 專案提取 |
| 2 | 簡單查詢(人員) | 🔲 | 3 人,< 1s |
| 3 | 簡單查詢(專案) | 🔲 | 3 專案,< 1s |
| 4 | 關係查詢(參與) | 🔲 | 正確識別,< 2s |
| 5 | 關係查詢(多專案) | 🔲 | 2 專案,< 2s |
| 6 | 多跳查詢 | 🔲 | 正確推斷,< 3s |
| 7 | 聚合查詢(統計) | 🔲 | 正確統計,< 3s |
| 8 | 聚合查詢(最大值) | 🔲 | 正確識別,< 3s |
| 9 | 條件查詢(過濾) | 🔲 | 正確過濾,< 2s |
| 10 | 條件查詢(否定) | 🔲 | 正確識別,< 3s |
| 11 | 邊界查詢(空結果) | 🔲 | 無錯誤,< 1s |
故障排除
❌ 問題:查詢回應時間過長
可能原因:
- 圖譜規模過大
- 查詢複雜度高
- 索引未建立
解決方案:
# 建立索引
graphify index create --type=Person --property=name
graphify index create --type=Project --property=name
# 或限制查詢範圍
graphify query "..." --limit=10
❌ 問題:查詢結果不準確
可能原因:
- 圖譜資料不完整
- LLM 理解錯誤
- 查詢詞彙模糊
解決方案:
# 驗證圖譜內容
graphify stats
# 使用更明確的查詢詞
graphify query "明確指定查詢條件"
# 或調整 LLM 溫度
graphify config set llm.temperature=0.1
❌ 問題:查詢返回錯誤
可能原因:
- 圖譜資料庫連線失敗
- 查詢語法錯誤
解決方案:
# 測試連線
graphify test-connection
# 查看詳細錯誤
graphify query "..." --verbose
結論
若所有測試均通過 🟢,則 Graphify 查詢功能驗證成功,可以進行正式的知識查詢作業。
下一步
查詢驗證成功後,可以:
- 執行「視覺化測試」驗證視覺化功能
- 執行「來源追蹤測試」驗證驗證功能
- 開始使用查詢探索知識圖譜