Skip to content

モデル概要

Ongrid は焼き込みモデルを 同梱しません。プラットフォームはマルチ プロバイダールーターです:1 つ以上の上流に API キーを提供し、manager が SPA のメッセージごとピッカーに設定済みカタログを表面化し、すべての チャット / RCA / translate 呼び出しがランタイムに正しい上流へ dispatch します。

7 つのプロバイダーが箱から出した状態でサポートされます:

プロバイダーデフォルトモデルenv キー
Anthropicclaude-sonnet-4-6ONGRID_ANTHROPIC_API_KEY
OpenAIgpt-5.4ONGRID_OPENAI_API_KEY
Zhipu (GLM)glm-4.7ONGRID_ZHIPU_API_KEY
DeepSeekdeepseek-v4-flashONGRID_DEEPSEEK_API_KEY
Geminigemini-2.5-proONGRID_GEMINI_API_KEY
Kimikimi-k2.6ONGRID_KIMI_API_KEY
Custom (OpenAI 互換)ONGRID_CUSTOM_API_KEY + ベース URL

加えて:

2 つの設定パス

両パスがルーターが消費する同じ []llm.ProviderConfig を生成します。違いは 誰が つまみを操作するかだけです。

env シード(起動時)

cmd/ongrid/main.gocfg.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

LLMSettingsResolversystem_settings.llm.* から読み、 []llm.ProviderConfig を組み立てます。フィールドごとに env デフォルトに フォールバックするので、半分設定されたインストール(キーは env、BaseURL は空)でも動きます。

go
// internal/manager/biz/setting/llm.go:133
func (r *LLMSettingsResolver) ResolveProviders(ctx context.Context) (
    providers []llm.ProviderConfig, defaultProvider string, err error,
)

プロバイダー ID は安定文字列です:openaianthropiczhipugeminideepseekkimicustom。これらの id はあらゆる場所に 現れます —— チャットピッカー、監査ログ、ChatReq.ProviderWithProvider オプション。

カタログエンドポイント

GET /v1/aiops/models は SPA ピッカーが描画するカタログを返します:

json
{
  "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

ChatReqProvider フィールドを持ち、設定されているとき MultiClient.Chat はマッチするサブクライアントに dispatch します。空の とき、ルーターは設定されたデフォルト(DB > env > 最初にソートされたもの) を使います。

go
// internal/pkg/llm/router.go
func (m *MultiClient) Chat(ctx context.Context, req ChatReq) (*ChatResp, error)

グラフカーネル呼び出し(ReAct エージェント)では、相当物は eino モデル オプションとしての llm.WithProvider(id) です —— ルーティング を参照。

どこに何があるか

関連

  • アーキテクチャ —— LLM レイヤーが L3 知能レイヤーのどこに座るか。
  • 環境変数 —— 完全な ONGRID_*_API_KEY + ONGRID_*_MODEL + ONGRID_*_BASE_URL マトリクス。