モデル概要
Ongrid は焼き込みモデルを 同梱しません。プラットフォームはマルチ プロバイダールーターです:1 つ以上の上流に API キーを提供し、manager が SPA のメッセージごとピッカーに設定済みカタログを表面化し、すべての チャット / RCA / translate 呼び出しがランタイムに正しい上流へ dispatch します。
7 つのプロバイダーが箱から出した状態でサポートされます:
| プロバイダー | デフォルトモデル | env キー |
|---|---|---|
| Anthropic | claude-sonnet-4-6 | ONGRID_ANTHROPIC_API_KEY |
| OpenAI | gpt-5.4 | ONGRID_OPENAI_API_KEY |
| Zhipu (GLM) | glm-4.7 | ONGRID_ZHIPU_API_KEY |
| DeepSeek | deepseek-v4-flash | ONGRID_DEEPSEEK_API_KEY |
| Gemini | gemini-2.5-pro | ONGRID_GEMINI_API_KEY |
| Kimi | kimi-k2.6 | ONGRID_KIMI_API_KEY |
| Custom (OpenAI 互換) | — | ONGRID_CUSTOM_API_KEY + ベース URL |
加えて:
- ルーティングレイヤー —— per-call プロバイダー選択、動的 デフォルト。
- バジェットゲート —— UTC 日ごとのグローバルトークン キャップ。
2 つの設定パス
両パスがルーターが消費する同じ []llm.ProviderConfig を生成します。違いは 誰が つまみを操作するかだけです。
env シード(起動時)
cmd/ongrid/main.go は cfg.LLM.* を読み、setting.Service.SetIfAbsent 経由で対応する行を system_settings.llm.* に seed します。新規インス トールが ONGRID_ANTHROPIC_API_KEY=... の初回起動を終えると Anthropic デフォルトの動くインストールになります —— SPA ログイン不要。
SetIfAbsent がキーです —— 再起動は SPA での operator 編集を決して 上書きしません。
Settings UI(ランタイム)
SPA の /settings/llm で admin は以下が可能です:
- プロバイダーごとの API キーの追加 / rotation(secret フラグ付きで
system_settings.llm.<provider>_api_keyに保存)。 - BaseURL の編集(リレー、リージョナルエンドポイント、China-based ミラー)。
- プロバイダーごとのモデルリストの保守(ピッカーが表示するクローズド セット)。
- プロバイダーごとのデフォルトモデルのピン留め。
- デフォルトプロバイダー の選択 —— メッセージごとピンが設定されて いないときホームページチャットがフォールバックするもの。
6 つのベンダーカードと 7 つ目の「Custom」カードは、ラベルを読まずに admin が認識できるよう実際のプロバイダーマークロゴ(simple-icons から 取得)で描画されます。
ホットスワップ
プロバイダー編集は manager 再起動なしで 60 秒以内に効きます。DB → ルーターキャッシュ TTL は resolver の 60 秒に加え、MultiClient 自体の 60 秒 —— なので最悪 120 秒。edge エージェントは影響を受けません。 manager だけが LLM クライアントです。
Resolver
LLMSettingsResolver は system_settings.llm.* から読み、 []llm.ProviderConfig を組み立てます。フィールドごとに env デフォルトに フォールバックするので、半分設定されたインストール(キーは env、BaseURL は空)でも動きます。
// internal/manager/biz/setting/llm.go:133
func (r *LLMSettingsResolver) ResolveProviders(ctx context.Context) (
providers []llm.ProviderConfig, defaultProvider string, err error,
)プロバイダー ID は安定文字列です:openai、anthropic、zhipu、 gemini、deepseek、kimi、custom。これらの id はあらゆる場所に 現れます —— チャットピッカー、監査ログ、ChatReq.Provider、WithProvider オプション。
カタログエンドポイント
GET /v1/aiops/models は SPA ピッカーが描画するカタログを返します:
{
"providers": [
{
"id": "anthropic",
"label": "Anthropic",
"default_model": "claude-sonnet-4-6",
"models": ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5"]
},
{
"id": "zhipu", "label": "Zhipu (GLM)",
"default_model": "glm-4.7",
"models": ["glm-5.1", "glm-5", "glm-4.7", "glm-4.7-flash"]
}
],
"default": "anthropic"
}API キーが設定されていないプロバイダーはサイレントに落とされます —— これがピッカーが実際に利用可能なものを知る仕組みです。API キー自体は このエンドポイントから決して返されません。
Per-call dispatch
ChatReq は Provider フィールドを持ち、設定されているとき MultiClient.Chat はマッチするサブクライアントに dispatch します。空の とき、ルーターは設定されたデフォルト(DB > env > 最初にソートされたもの) を使います。
// internal/pkg/llm/router.go
func (m *MultiClient) Chat(ctx context.Context, req ChatReq) (*ChatResp, error)グラフカーネル呼び出し(ReAct エージェント)では、相当物は eino モデル オプションとしての llm.WithProvider(id) です —— ルーティング を参照。
どこに何があるか
- Anthropic / OpenAI / Zhipu / DeepSeek / Gemini / Kimi / Custom —— プロバイダーごとに 1 ページで、env vars、デフォルト モデル、ベンダー固有のクセ。
- ルーティングとデフォルト ——
RoutingChatModel.pick、 DefaultResolver、コードでの非デフォルトプロバイダー配線方法。 - バジェットと制限 ——
ONGRID_LLM_DAILY_TOKEN_LIMIT、BudgetCallback、ErrBudgetExceededセマンティクス。