Domino IQ 入門:把 LLM 跑進 Domino server 是什麼概念
Domino IQ 是什麼
Domino 14.5 引入 Domino IQ — 直接在 Domino server backend 跑一個 AI 推論引擎。原文:「The Domino server, when configured for Domino IQ, starts an 推論引擎 from the Dbserver process」、「handles AI queries locally within the Domino server」。
對開發者而言,這意味著從 LotusScript 兩個新 class(NotesLLMRequest / NotesLLMResponse)就能直接送 prompt 給 LLM1 拿回應 — 不需要對接外部 OpenAI / Anthropic API,也不需要把 Notes 資料 ETL 出去。
為什麼把 LLM 跑在 Domino server 上
外接 LLM SaaS 看起來最快:呼叫 API、收回應、結束。但 Domino 用戶的常見場景會撞牆:
- 資料治理:Notes/Domino 應用很多場景下資料根本不允許離開 Domino server(金融、法務、醫療、政府部門)。把 prompt 送到 OpenAI 即代表內容離開了 受治理邊界。
- ACL / Readers field:Domino 的權限模型是 server-side 強制執行的。外接 LLM 時,「這個使用者該不該看到這份資料當 context」要在 應用層 重做一次過濾邏輯。
- 計費 / 流量:依 token 計費的 SaaS 模型對長期高頻場景不划算。
Domino IQ 把 推論引擎 跟 Domino server 收進同一個 行程邊界,這幾件事一次處理掉。代價是你要在自己的 server 跑得起 GGUF2 模型。
架構與硬體需求
執行環境很硬:只支援 Windows / Linux 64-bit + NVIDIA GPU,沒有 macOS、沒有 ARM、沒有純 CPU 模式。
最低 / 推薦規格:
| 項目 | 最低 | 生產建議 |
|---|---|---|
| CPU | 4 cores | — |
| RAM | 8 GB | — |
| GPU | NVIDIA、8 GB memory、compute capability 5.2+ | compute capability 8.0+ |
| CUDA | 12.x(內建) | — |
Windows 環境下 GPU 可以同時用 GPU memory 跟「一半的系統 RAM」當 Shared RAM — 對小規模試跑友善。
啟動後 DominoIQ task 從 Dbserver process spawn 出 推論引擎 子進程,listen 在你設定的 port 上,跟其他 Domino server task 並排運作。
安裝流程
安裝是獨立的 zip 包,從 My HCLSoftware Portal 下載 llama.zip:
- 把
llama.zip傳到 Domino server 的暫存區 - 停掉 Domino server(這步必要)
- Windows:以 admin 權限刪掉舊版
llama-server.exe、llama.dll、ggml/*.dll與三個 CUDA library 檔;Linux:以 root 刪llama-server、libllama.so、libggml*.so與對應 CUDA libraries - 把
llama.zip解壓到 Domino program directory(不是 data dir) - Linux 補 permissions:
chown root:root+chmod ugo+rx對解出來的 binary - 啟動 Domino,看
DominoIQtask 是否成功 load model;沒有的話進設定流程
Domino IQ 是 14.5 才加的功能,舊環境第一次裝不會踩到 binary 替換的步驟,但升級 14.5 → 14.5.x 時要記得清舊 binary。
dominoiq.nsf 設定兩階段
裝完之後,所有設定都在 dominoiq.nsf(Domino IQ Administration server 上的這個 DB),分成兩塊:
1. Configuration document — 引擎本體
定義 推論引擎 怎麼跑:
- 哪個 GGUF model 載入(每個 Domino IQ server 只能跑一個 LLM)
- 監聽哪個 port
- GPU offloading 參數
- 並行請求數
- 進階:Special parameters(如
-c <ctx-size>等 llama.cpp flag) - 可選:guard model3 設定(過濾不適當 input/output)
2. Command document — 應用層 contract
Configuration 把引擎跑起來後,Command document 定義具體一個「AI 命令」是什麼。應用程式呼叫的就是這個 Command 名稱。
關鍵欄位:
| 欄位 | 用途 |
|---|---|
Configuration(s) | 此命令適用哪些 server,可填 server 名或 wildcard * |
Model | 遠端 AI endpoint 才需要的 optional 欄位 |
Command | 對應的 System Prompt 名稱 |
System prompt | 同 Command 欄位填同名 |
Description | 說明 |
Maximum tokens | 對應 OpenAI Chat Completion spec |
Temperature | 同上,控制隨機性 |
快取行為:Command document 變動後系統最多會快取 5 分鐘 — 急著測新 prompt 時要等一下,或重啟 DominoIQ task。
System Prompt document:把行為抽出來成獨立物件
System Prompt document 是「告訴 LLM 該怎麼回應」的指令本身,獨立於 Command document 存在 —— Command 只是把它「掛上來」用。
這個分離讓你可以:
- 同一個 system prompt 給多個 Command 共用
- 改 system prompt 不必動 Command 結構
內建一個範例:StdSummarizeEmailThread — 拿來摘要郵件討論串。
從應用程式呼叫:NotesLLMRequest / NotesLLMResponse
設定好後,從 LotusScript(或 Java)發 prompt 的 API 是這兩個 class:
NotesLLMRequest— 組請求(指定 Command 名稱、prompt 內容、token 限制等)NotesLLMResponse— 收回應
實作面詳細 method 簽名要看 Designer help 的 NotesLLMRequest / NotesLLMResponse 條目(Admin doc 沒列出),新建議在小資料集先跑通。
對 caller 來說,這就是個普通同步 API call — 走 process 內 IPC 到本地 推論引擎,沒有跨網路 latency。
跟 RAG 的關係
14.5 引入 Domino IQ;14.5.1 在 Domino IQ 之上加了 RAG 支援 — 把 NSF 直接掛上來當 vector source,並在處理 prompt 時把語意相關的文件當 context 注入。
如果你的場景是「給 LLM 一段提示詞、回個自由格式回應」(摘要、分類、抽取、翻譯),Domino IQ 一個 Command 就能跑;如果你要「LLM 回答時參考特定 NSF 內的文件」,那才需要再多開 RAG 模式。
關於 RAG 怎麼設、ACL 怎麼自動繼承到語意搜尋、updall -w 怎麼向量化,本系列另一篇深入:Domino IQ RAG:把 NSF 直接掛上本地 LLM 的內建管線。
為什麼這個 trade-off 對 Domino 客戶划算
蓋一條外接 LLM 的 RAG pipeline 技術上可行,但對 Domino 既有客戶不一定值得:
- 既有 dev / admin 團隊熟 Domino,多一個 vendor 就多一條維運線
- Notes ACL / Readers field 的權限模型重做極容易出包
- 既有 server 房 + 既有 GPU 通常就夠跑 GGUF 模型,沒有額外 cloud 成本
- 治理層面「資料不出 server」對某些產業是強制要求
唯一硬限制是 NVIDIA GPU 與 64-bit 環境 — 但對 14.5 升級來說這通常不是阻礙。
註
-
LLM(Large Language Model,大型語言模型)是以海量文字訓練的神經網路模型 — 例如 GPT、Claude、Llama 等 — 能依輸入提示生成自然語言回應。 ↩
-
GGUF(GPT-Generated Unified Format)是 llama.cpp 生態系常見的單檔二進位模型格式,把模型權重、tokenizer、metadata 打包成一個檔,可直接 mmap 載入記憶體 — 是 on-device 推論常用的分發格式。 ↩
-
Guard model 是另一個小型 LLM,跑在主 LLM 之前 / 之後當「過濾層」,攔截可能不適當的輸入(例如越獄提示、敏感問題)或輸出(例如有害內容、敏感原文外流)。 ↩