Laya 本機 System One 模型:安裝、用法與 Jev 比較
如果 Jev 的「固定答案空間、回傳機率、不生成文字」很適合你的流程,但資料不能送到外部 API,Laya 提供了一條本機路徑。它是 Convai Innovations 在 2026 年 9 月 18 日公開的開源 System One 決策模型,程式碼與模型權重採 Apache 2.0 授權。
Laya 適合先以自己的資料測試,再決定是否針對特定領域微調。它有可下載的權重、PyPI 套件與重現 Notebook,不代表 README 裡的所有數字都已經過廣泛的外部驗證。
Laya 提供哪三個模型
以下列出三個 checkpoint 的預設 context;預設截斷長度與可設定上限不同,長文件設定見後文:
| checkpoint | Backbone | 參數量 | 預設 context | 適用情境 |
|---|---|---|---|---|
laya | ModernBERT-large | 421M | 512 | 英文分類與判斷 |
laya-multilingual | mmBERT-base | 322M | 1,024 | 多語內容與非拉丁文字 |
laya-typed-decisions | ModernBERT-large | 421M | 1,024 | 專門微調過的 typed-decision workflow |
權重大小約 647 到 843 MB,實際執行還要加上 PyTorch、模型結構、中間張量與批次資料的記憶體。它不是一個幾十 MB 的分類器;若正式服務需要高併發,仍要估算 GPU、常駐記憶體與冷啟動。
Laya 的輸出介面模仿 System One 常見的三種 primitive:choice、score 與 noul。它也是非自回歸模型,一次 forward pass 可以處理同一 state 上的多個問題。
安裝與第一個本機判斷
先建立獨立 Python 環境,再安裝 PyPI 套件:
python3 -m venv .venvsource .venv/bin/activatepip install layaREADME 建議從 Router 開始。它會依文字語言與 script 選擇英文或多語 checkpoint:
from laya import Router
router = Router(preload=True)
state = { "subject": "帳單重複扣款", "body": "信用卡被扣了兩次,請協助退款。",}
questions = { "department": { "type": "choice", "instructions": "哪個部門應處理這則訊息?", "criteria": { "billing": "帳單、付款與退款", "technical": "系統錯誤與串接問題", "sales": "價格與新合約", "other": "其他", }, }, "refund_requested": { "type": "noul", "instructions": "使用者是否明確要求退款?", },}
result = router.predict(state, questions)
print(result["routing"])print(result["answers"]["department"])print(result["answers"]["refund_requested"])preload=True 會預先載入 checkpoint,以換取之後較低的呼叫延遲,但也會增加啟動時間與記憶體使用量。第一次執行還需要從 Hugging Face 下載權重;正式部署應先完成下載並固定模型 revision,避免啟動時受到外部網路或權重更新影響。
如果已確定只處理單一語言,也能直接載入指定模型:
import laya
agent = laya.load( "convaiinnovations/laya", subfolder="multilingual", device="cuda",)
result = agent.predict(state, questions)基本介面最初依 Laya 0.3.4 repository 與模型卡整理;2026-10-15 維護時另核對官方 README 的長文件與已知限制。本文沒有下載完整權重跑 GPU 推論,安裝與推論程式屬文件檢閱範例,延遲以專案公布的特定環境資料為準。
33 ms 很快,但條件要寫完整
Laya 公布的 Tesla T4 測量中,多語模型單一問題約 32.8 ms;一次處理 10 個問題為 72.3 ms,平均每題 7.2 ms。這是 GPU forward pass 的測量,不包含首次下載、模型載入、應用程式排隊、網路 API 包裝或 CPU 環境差異。
更重要的是準確率。專案自己的 benchmark 明確揭露:
- 目前 BENCHMARKS 所列的基礎
laya與laya-multilingualtyped-decisions zero-shot 分數為 0.362 與約 0.352(模型卡舊表仍列 0.342,這裡依 repository 的結果檔說明),接近 0.318 的隨機基準,也低於 0.461 的多數類別基準。 - 專門微調的
laya-typed-decisions公布 0.766;官方 BENCHMARKS 註明這是該 benchmark 自身訓練 split 的結果,且該列尚無已提交的原始結果檔,不應解讀成獨立 holdout 準確率。 - 高分能力主要來自針對該 workflow 的微調,不能當成任意領域的 zero-shot 表現。
- 模型原始輸出過度自信,專案建議以自己的資料重新做 temperature fitting。
score是目前較弱的 primitive,大量選項也會受到 Token 分配影響。
這些限制反而說明比較合理的定位:Laya 是可自行微調的快速判斷底座,不是下載後就能理解所有公司分類規則的萬用模型。
Laya 長文件:先確認有沒有被截斷,再談準確率
截至 2026-10-15,官方 README說明 laya-multilingual 可用 max_len=8192,但預設仍是 1,024 Token。只把長信件交給預設 Router,可能沒讓模型讀到末段條件;英文佔多數時,也可能路由到英文 checkpoint。
延續前面的 router 與 questions,文件提供的明確指定方式如下。long_document 應換成實際待判斷文字;這段未在本機載入模型執行:
long_document = "將完整待分類信件放在這裡"result = router.predict( long_document, questions, model="multilingual", max_len=8192,)驗收時,準備一封有人工答案的長信件,把決定分類的同一句資訊分別放在開頭、中段、末段,其餘內容保持一致;逐一記錄套件版本、checkpoint revision、實際 Token 長度、回傳的 routing 與分類結果。若只有末段版本錯誤,先排查截斷,再檢查語意能力。把上限設成 8,192 不會保證所有長度都同樣準確,也不能把字元數直接當成 Token 數。
這是建議的控制變因驗收設計,本文未執行長文件推論;它能幫助定位問題,不能單憑三筆結果證明正式資料準確率。
Noul 高信心答錯:把正反案例和標籤一起驗收
官方已知限制指出,英文 checkpoint 的 noul 可能受 false:/true: 選項文字主導,甚至對明確正例仍給出高信心否定。原文的退款問題使用未指定 criteria 的簡短寫法;接入真實服務前,應補上明確判準並做成對測試。
以下是同一 refund_requested 問題的替代規格,屬待驗收範例;保留 true/false 作為 criteria key,labels 則改變模型看到的標記:
refund_question = { "type": "noul", "instructions": "使用者是否明確要求退款?", "criteria": { "true": "使用者明確要求退回款項", "false": "使用者沒有提出退款要求", }, "labels": {"true": "A", "false": "B"},}用「請退回這筆重複扣款」與「只想確認帳單,不需要退款」做正反例,再換成實際流量中的否定句、引用文字和模糊請求。比較預設與替代標記、英文與 multilingual checkpoint;替代標記本身也可能改變結果,不能當成已修好的證明。若要改用中性 key 的雙選項 choice,回傳契約也會改變,應同步檢查呼叫端解析。
校正與最終驗收要使用不同資料
官方 README 提醒,微調 Notebook 的 calibration samples 取自訓練項目。若用同一批資料擬合 temperature,又用它宣稱信心可靠,無法回答新資料是否有效。可以把資料用途分成模型訓練、校正/門檻選擇與最終測試;同一客服對話的改寫或多封回信應按群組隔開,避免相似內容跨集合。
固定最終測試集後,同時記錄分類正確率、接受自動處理的比例,以及「被接受案例中的錯誤率」。先用校正集選門檻,再只在未參與調整的測試集驗收;不能看到測試錯誤就反覆調門檻,還把該結果稱為 holdout。這是部署驗收建議,並非本文已完成的模型評測。
Laya 和 Jev 怎麼選
| 決策條件 | Jev | Laya |
|---|---|---|
| 希望快速開始 | 申請金鑰後呼叫 API | 要準備 Python 與推論環境 |
| 資料必須留在內部 | 需評估 TypeSafe 資料政策;企業方案有 ZDR | 可在自有環境執行 |
| 長上下文 | 目前預設每 request 64K/每 question 32K,另有長上下文設定 | 預設 512/1,024;multilingual 可設定 8,192,需驗收截斷與準確率 |
| 中文 | 官方稱可處理但英文最佳 | 有 multilingual checkpoint,仍需實測 |
| 客製化 | 透過 state、instructions、criteria | 可自行微調權重與校正 |
| 成本 | 每百萬輸入 Token 0.042 美元 | 支付 GPU、記憶體與維運成本 |
| 成熟度 | 有正式託管 API、SDK 與限制文件 | 2026-09-18 才公開,仍屬早期 |
少量或不固定的請求,Jev API 通常比較容易估算;資料敏感、請求量大、能維護模型服務,或需要針對內部標籤微調時,Laya 才比較有評估價值。
不要只拿單次推論價格比較。自架模型還有 GPU 閒置、容器映像、權重更新、監控、校正與事故處理成本;雲端 API 則要考慮資料傳輸、供應商限制與服務可用性。
上線前要做的四個檢查
第一,先建立自己的 holdout dataset,不要使用微調資料衡量正式準確率。第二,分語言看準確率與 ECE,尤其繁體中文不要和英文平均。第三,測試選項順序、other 案例及對抗性文字。第四,將高影響操作放在程式規則與人工審核後面。
「沒有文字生成」不等於「沒有 hallucination」。Laya 不會寫出 schema 外的答案,但仍會自信地分錯類;它的 README 也直接記錄英文 checkpoint 對非拉丁文字可能高信心答錯。格式安全與語意正確必須分開驗證。
想先理解這類模型的共同介面,可讀 Jev 是什麼?;若決定採用託管 API,可接著看 Jev TypeScript API 教學。如果需求來自 Codex 額度問題,則先確認 Skill、MCP 與 Router 的差異,不要把安裝套件當成成本優化完成。
常見問題
Q: Laya 可以完全離線使用嗎?
A: 模型權重與 Python 相依套件下載完成後,可以在本機執行推論。正式離線環境還需要預先保存權重、固定 revision、準備套件來源並禁止啟動時自動連到 Hugging Face;不能只看 pip install 就假設所有執行階段都離線。
Q: Laya 需要 GPU 嗎?
A: 專案提供 CPU 與 GPU 路徑,但 README 的 32.8~39.5 ms 數字是在 Tesla T4 上測得。CPU 或 Apple Silicon 的延遲、記憶體與相容性需在自己的硬體量測,不能直接套用 T4 數字。
Q: Laya 比 Jev 準確嗎?
A: 目前不能做通用結論。typed-decisions 的 0.766 來自該 benchmark 自身訓練 split,官方也註明沒有已提交的原始結果檔;它不能當成獨立泛化能力,或與 Jev 的公平同場比較。應固定自己的未見資料、版本與判準再評估。
參考資料: