Semantic Query Skill
Semantic Query 是 graphify 的三大查詢指令之一:graphify query。不同於傳統 graph database(要寫 Cypher),你只要打中文 / 英文的問題,graphify 就會:
- 挑關鍵字(filter stop-words,涵蓋英德法等歐語)1
- 每個關鍵字找 BFS seed(最高 degree 的命中節點)
- 擴張子圖(依 relevance ranking)
- 回傳 ranked subgraph + 每條邊的 relation 與信心標籤
何時使用
✅ 適合的情境:
- 開放式問題「認證怎麼做的?」
- 找一個概念但不知道相關函式名稱
- 助理要先給你看子圖再回答
❌ 不適合的情境:
- 已知兩個節點要看連結 → 用
graphify path - 已知單一節點要看脈絡 → 用
graphify explain - 想算 exact match 數量 → 用
jq直接查graph.json
查詢機制
Stop-word 過濾
中文 / 英文 / 德文 / 主要拉丁語系的 stop-words 會被過濾。例如:
"Wie funktioniert die Authentifizierung?"
→ 關鍵字:Authentifizierung(不是 Wie、der)
BFS seeds
graphify 對每個關鍵字找圖譜中的名稱 / alias / community label 命中點,挑出最高 degree 的種子,從這些種子 BFS 擴張。
Ranking
回傳節點依 relevance rank(hop distance + 文字命中分數),seed first 永遠置頂不會被截斷。
Budget 控制
--budget N 限制輸出 token:對 god node 跑 query 時建議加 budget,避免塞爆 context。
範例對話
使用者:這個專案的 auth 在哪?
助理:我先 query 圖譜。
> graphify query "auth 在哪?"
Showing 6 of 6 nodes (ranked by relevance)
Node: login
Source: auth.py:1
Community: 2 (Auth)
Degree: 4
Node: verify_password
Source: auth.py:6
...
Edges (5):
login -[calls]-> verify_password [EXTRACTED]
login -[calls]-> create_session [EXTRACTED]
create_session -[imports]-> Session [INFERRED]
→ 認證流程:
`auth.py` 的 `login()` → `verify_password()` → `create_session()`
`session.py` 的 `Session` 類別負責產生 token。
效能特性
v0.9.17 起 scoring 改為「每查詢 1 次 pass」2,比舊版(per-token)快 1.3-1.4 倍。對於 T-token 查詢,舊版要 T+1 次完整 scoring,新版只要 1 次。
對 small corpus(< 100 nodes),查詢通常 < 1 秒。
不一樣:「Semantic Query」≠ Vector Search
graphify 不是 vector index:沒有 embeddings、沒有 vector store。
| 維度 | Vector RAG | graphify Semantic Query |
|---|---|---|
| 資料結構 | embedding + similarity | graph traversal |
| 解釋性 | 黑盒子(相似度分數) | 每條邊可追到 source_file + 行號 |
| 信心 | 沒有 | EXTRACTED / INFERRED / AMBIGUOUS |
| Cross-hop | 一次只能找單層相似 | 可 BFS 多跳 |
graphify 對「理解架構」遠優於 vector RAG;對「找近似字串」則 vector RAG 更合適。
MCP 工具對應
把圖譜開成 MCP server (python -m graphify.serve) 後,host 端可呼叫:
query_graph("<問題>")— 等同 CLIgraphify queryget_neighbors(node_id, token_budget=2000)— 列出鄰居