兩階段 embedding router,能在數百個 CLI 工具中挑出對的那一個—— 僅 ~36 ms 延遲、~150 tokens開源、多語言、不需微調模型
原始碼在 GitHub · MIT 授權 · Python 3.10+
在 Python REPL、notebook 或自己的程式裡 import 進來就能用 你說一句話的意圖,它就回給你「該呼叫哪個 cli、要帶什麼參數、信心分數多高」 拿到這份結果以後,你自己決定要不要執行、怎麼執行——沒有黑魔法,也不會偷打外部 API
看原始碼Agent 收到使用者的話以後,把它丟給 router Router 回的不是 JSON 給使用者看,而是一份「要做什麼、用哪個工具、帶什麼參數」的計畫,agent 拿到後自己處理 Agent 看候選、挑一個、執行工具,最後再用人話跟使用者說結果 不用把幾百個工具描述都塞進 prompt,token 也不會爆
寫一個 manifest# pip install clibrary-hub
# clibrary-build-index --manifest-dir ./manifests
from clibrary_hub import router
result = router.route("把 demo.mp4 轉成 10fps 的 gif")
print(result["cli"]) # 'video-to-gif'
print(result["params"]) # {'input': 'demo.mp4', ...}
print(result["confidence"]) # 0.94from clibrary_hub import validator
r = validator.validate_file("manifests/data/sql-runner.json")
if not r.ok:
for e in r.errors: print("ERROR:", e)
for w in r.warnings: print("WARN: ", w)
# 一次驗證整個資料夾下的 manifest:
results = validator.validate_dir("manifests/")from clibrary_hub import router
import subprocess
def handle_user(message: str):
plan = router.route(message)
if plan["action"] == "clarify":
# 讓你的 LLM 從 plan["choices"] 裡選一個
plan = llm_pick(plan["choices"], chat_history)
cmd = [plan["cli"]] + flatten(plan["params"])
return subprocess.run(cmd, check=True)為什麼要用 EMBEDDING ROUTING
當 agent 有 100+ 個工具,LLM 要把每個工具的描述通通讀一遍才能挑——token 成本、延遲、準確度全垮
效能
在 559 個 CLI 工具(CLIbrary + MCP)上跑 2,050 筆 query數字來自最新 router build(clibrary_top3 策略,multilingual-e5-base)
| EVAL SET | 樣本數 | TOP-1 | TOP-3 |
|---|---|---|---|
| in_domain | 500 | 86.8% | 88% |
| paraphrase | 1,500 | 81.8% | 83.4% |
| adversarial | 204 | 84.3% | 100% |
Adversarial set 經過 3 輪 intent-trigger 微調強化,沒有任何模型微調 完整效能評測 →
原理
Stage 1 用 FAISS 召回候選 CLI,Stage 2 比對最相似的範例模板約 80% 的 query 完全不需呼叫 LLM
每個 CLI 的 intent_triggers 都被 embed 並做平均池化,FAISS 找出 top-3 候選再用 trigger_index 做 MaxSim 重排
在勝出的 CLI 內找最相似的 example.query相似度 ≥ 0.85 直接套模板(A 路,免 LLM),否則交給小模型抽參數(B 路)
當 top-1 信心不夠且跟 top-2 差距太小時,回傳三個候選讓 agent 詢問使用者把「沉默誤導」降到趨近於零
已上線
每個工具都是純離線——不依賴 LLM、不需要雲端帳號 隨附 manifest、實作、README、固定版本的 requirements
上 GitHub 看完整 registry
——clone 後跑 clibrary-build-index --manifest-dir ./manifests,router 就會把它們收進來
EXTEND · 使用者自定義工具
其他 tool router 給你一份固定的工具清單clibrary-hub 給你的是一份格式 任何人花 10 分鐘寫一個 JSON,router 自動接進來
intent_triggers,使用者用什麼語言講就寫什麼語言clibrary_hub.validator 在本地驗 schema——不用送 PR{
"name": "video-to-gif",
"category": "media",
"description": "Convert a video file to an animated GIF",
"intent_triggers": [
"convert mp4 to gif",
"turn this video into a gif",
"export the first 5 seconds as a gif",
"把影片轉成 gif",
"幫我做一個動圖"
],
"input_schema": {
"input": { "type": "string", "required": true },
"fps": { "type": "integer", "default": 15 }
},
"examples": [...] // 3-5 範本
}
10 個分類 · 目前 504 個 manifest · MIT 授權