Skip to content

모델 개요

Ongrid 는 베이크된 모델과 함께 출하 하지 않습니다. 플랫폼은 다중 provider 라우터입니다: 하나 이상의 업스트림에 대해 API 키를 제공하면 매니저가 SPA 의 메시지별 picker 에 구성된 카탈로그를 표면화하고 모든 채팅 / RCA / 번역 호출이 런타임에 올바른 업스트림으로 디스패치됩니다.

박스 그대로 7 provider 가 지원됩니다:

Provider기본 모델Env key
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-compatible)ONGRID_CUSTOM_API_KEY + base URL

추가:

두 구성 경로

두 경로 모두 라우터가 소비하는 같은 []llm.ProviderConfig 를 생성; 누가 노브를 조작하는지만 다릅니다.

환경 변수 시드 (부팅)

cmd/ongrid/main.gocfg.LLM.* 를 읽고 setting.Service.SetIfAbsent 를 통해 system_settings.llm.* 에 일치 행을 시드. ONGRID_ANTHROPIC_API_KEY=... 가 있는 신규 설치의 첫 부팅은 동작하는 Anthropic 기본 설치로 끝남 — SPA 로그인 불필요.

SetIfAbsent 가 핵심 — 재부팅이 SPA 의 운영자 편집을 절대 덮어쓰지 않습니다.

Settings UI (런타임)

SPA 의 /settings/llm 은 관리자가:

  • Provider 별 API 키 추가 / 회전 (secret 플래그가 설정된 system_settings.llm.<provider>_api_key 에 저장).
  • BaseURL 편집 (relay, 지역 엔드포인트, 중국 기반 미러).
  • Provider 별 모델 리스트 유지 (picker 가 보여 주는 폐쇄 셋).
  • Provider 별 기본 모델 고정.
  • 기본 provider 선택 — 홈 페이지 채팅이 메시지별 고정이 없을 때 폴백하는 곳.

6 벤더 카드와 7 번째 "Custom" 카드는 실제 provider mark 로고 (simple-icons 에서 소싱) 와 함께 렌더링되어 관리자가 레이블을 읽지 않고도 인식할 수 있게.

핫 스왑

Provider 편집은 매니저 재시작 없이 60 초 내에 효과 발생. DB → 라우터 캐시 TTL 은 resolver 의 60 초 + MultiClient 의 자체 60 초 — 최악 경우 120 초. Edge 에이전트는 영향 없음; 매니저가 유일한 LLM 클라이언트.

Resolver

LLMSettingsResolversystem_settings.llm.* 에서 읽어 []llm.ProviderConfig 조립. 필드별 환경 기본으로 폴백하여 반쪽 구성 설치 (환경으로 키 설정, BaseURL 비움) 도 동작.

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

Provider ID 는 안정 문자열: openai, anthropic, zhipu, gemini, deepseek, kimi, custom. 이 id 는 어디에나 나타남 — 채팅 picker, 감사 로그, ChatReq.Provider, WithProvider 옵션.

카탈로그 엔드포인트

GET /v1/aiops/models 가 SPA picker 가 렌더링하는 카탈로그 반환:

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 키가 구성되지 않은 provider 는 조용히 제거됨 — picker 가 실제로 가용한 것을 아는 방법. API 키 자체는 이 엔드포인트로 절대 반환되지 않음.

호출별 디스패치

ChatReqProvider 필드 운반; 설정 시 MultiClient.Chat 이 매칭 서브 클라이언트로 디스패치. 비어 있을 때 라우터는 구성된 기본 사용 (DB > env > 첫 정렬).

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

그래프 커널 호출 (ReAct 에이전트) 의 경우 등가물은 eino 모델 옵션으로 llm.WithProvider(id)라우팅 참고.

어디에 무엇이

같이 보기

  • 아키텍처 — L3 인텔리전스 레이어에서 LLM 레이어의 위치.
  • 환경 변수 — 전체 ONGRID_*_API_KEY + ONGRID_*_MODEL + ONGRID_*_BASE_URL 매트릭스.