v0.2.0 — 已上 PyPI

給 AI agent 的
tool router

兩階段 embedding router,能在數百個 CLI 工具中挑出對的那一個—— 僅 ~36 ms 延遲、~150 tokens開源、多語言、不需微調模型

~36msP50 延遲
100%ADVERSARIAL TOP-3
~150每次 TOKENS
$ pip install clibrary-hub

原始碼在 GitHub · MIT 授權 · Python 3.10+

一般使用者 · 過程視角

怎麼呼叫 router

在 Python REPL、notebook 或自己的程式裡 import 進來就能用 你說一句話的意圖,它就回給你「該呼叫哪個 cli、要帶什麼參數、信心分數多高」 拿到這份結果以後,你自己決定要不要執行、怎麼執行——沒有黑魔法,也不會偷打外部 API

看原始碼
輸入 · 你打的字
終端機 · 回傳的東西
LLM AGENT · 用戶視角

agent 跟 router
怎麼配合調用工具

Agent 收到使用者的話以後,把它丟給 router Router 回的不是 JSON 給使用者看,而是一份「要做什麼、用哪個工具、帶什麼參數」的計畫,agent 拿到後自己處理 Agent 看候選、挑一個、執行工具,最後再用人話跟使用者說結果 不用把幾百個工具描述都塞進 prompt,token 也不會爆

寫一個 manifest
agent

今天就開始建

開發者快速入門

裝套件、建 index、route 第一個意圖三步驟,大約 5 分鐘

⏱ 約 5 分鐘
PyPI 頁面
# 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.94
from 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

把工具全塞進 prompt,
規模一大就崩

當 agent 有 100+ 個工具,LLM 要把每個工具的描述通通讀一遍才能挑——token 成本、延遲、準確度全垮

把所有工具塞進 PROMPT

每次呼叫 token3,000–50,000
延遲2–5 秒
500 工具下準確率~60–70%
成本隨工具數線性增加

CLIBRARY-HUB ROUTING

每次呼叫 token~150(固定)
延遲~36 毫秒
500 工具下準確率82–92% top-1
成本隨不增加

效能

用實測數字說話

在 559 個 CLI 工具(CLIbrary + MCP)上跑 2,050 筆 query數字來自最新 router build(clibrary_top3 策略,multilingual-e5-base)

EVAL SET樣本數TOP-1TOP-3
in_domain50086.8%88%
paraphrase1,50081.8%83.4%
adversarial20484.3%100%

Adversarial set 經過 3 輪 intent-trigger 微調強化,沒有任何模型微調 完整效能評測 →


原理

兩階段,
三個索引

Stage 1 用 FAISS 召回候選 CLI,Stage 2 比對最相似的範例模板約 80% 的 query 完全不需呼叫 LLM

STAGE 1 · CLI INDEX

平均池化候選召回

每個 CLI 的 intent_triggers 都被 embed 並做平均池化,FAISS 找出 top-3 候選再用 trigger_index 做 MaxSim 重排

STAGE 2 · EXAMPLE INDEX

模板比對 + A/B 分流

在勝出的 CLI 內找最相似的 example.query相似度 ≥ 0.85 直接套模板(A 路,免 LLM),否則交給小模型抽參數(B 路)

CLARIFY GATE

不確定就問,不亂猜

當 top-1 信心不夠且跟 top-2 差距太小時,回傳三個候選讓 agent 詢問使用者把「沉默誤導」降到趨近於零


39 個分類 · 507 個 CLI · 離線優先

507 個工具 · 39 個分類 · MIT 授權

每個工具都是純離線——不依賴 LLM、不需要雲端帳號 隨附 manifest、實作、README、固定版本的 requirements

OFFICE · 20 個

時間 · 行事曆 · 任務

countdown tz-convert time-track cal-merge slot-find cal-conflict recur-helper todo-merge quick-idea deadline-board morning-boot omni-search +8
DATA · 12 個

CSV · JSON · Schema

csv-stat csv-sql csv-infer pivot-quick data-transcode data-join json-path schema-brief schema-diff term-plot corr-matrix data-profile
DEVOPS · 12 個

程式品質 · Git · 部署

lint-guard test-gap sec-scan dead-code code-dedupe commit-fmt changelog-bot api-compat deploy-rollback flag-cli ssl-renew-check pipeline-tpl
MEDIA · 20 個

影音 · 圖片 · 音訊

video-to-gif video-compress video-trim auto-subtitle img-shrink bg-remove img-ocr audio-stt text-tts exif-clean gif-opt +9
WEB · 12 個

抓取 · 爬蟲 · 解析

web-fetch headless-fetch rss-fold uptime-ping link-check sitemap-gen ld-extract page-archive page-diff polite-crawler api-sniff dataset-find
SMART-HOME · 20 個

燈光 · 感測器 · IoT

scene-flip light-schedule lock-log solar-track pet-feed blind-schedule nas-health home-traffic home-backup cam-privacy rule-conflict +9
即將上線 security finance science

GitHub 看完整 registry ——clone 後跑 clibrary-build-index --manifest-dir ./manifests,router 就會把它們收進來


Router 有多聰明
取決於工具有多齊

其他 tool router 給你一份固定的工具清單clibrary-hub 給你的是一份格式 任何人花 10 分鐘寫一個 JSON,router 自動接進來

  • 一個工具一個 JSON 檔——不用 Python 註冊、不用繼承類別
  • 5 條以上 intent_triggers,使用者用什麼語言講就寫什麼語言
  • clibrary_hub.validator 在本地驗 schema——不用送 PR
  • 3–5 個 examples 自動變成 Path A 模板,常見問法零 LLM 成本
manifests/media/video-to-gif.json
{
  "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 授權