Skip to content

模型概览

Ongrid 带烤好的模型。平台是一个多 provider 路由器:你给一个或多个上 游的 API key,manager 把配好的目录露给 SPA 的按消息 picker,每次 chat / RCA / translate 在运行时派发到对的上游。

开箱支持七个 provider:

Provider默认 modelEnv 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 兼容)ONGRID_CUSTOM_API_KEY + base URL

加上:

  • 路由层 —— 按调选 provider,动态默认。
  • 预算门 —— 跨 provider 全局按 UTC 日的 token 上限。

两条配置路径

两条都产出同一个 []llm.ProviderConfig 给路由器消费;区别只在转旋钮。

env 播种(启动)

cmd/ongrid/main.gocfg.LLM.*,通过 setting.Service.SetIfAbsent 把匹配的行种到 system_settings.llm.*。新装 首次启动带 ONGRID_ANTHROPIC_API_KEY=... 就以一个能用的 Anthropic-默认装机 结束 —— 不用登 SPA。

SetIfAbsent 是关键 —— 重启从不覆盖 SPA 里的运维编辑。

Settings UI(运行时)

SPA 里的 /settings/llm 让 admin:

  • 加 / 轮转按 provider 的 API key(带 secret flag 存到 system_settings.llm.<provider>_api_key)。
  • 改 BaseURL(中继、区域端点、中国镜像)。
  • 维护按 provider 的模型列表(picker 显示的闭合集)。
  • 钉每个 provider 的默认模型。
  • 默认 provider —— 没按消息钉时主页 chat 用的回退。

6 个 provider 卡片加第 7 个 "Custom" 卡片渲染时带真实 provider mark logo (来自 simple-icons),让 admin 不看 label 也能认出来。

热切

provider 编辑 60s 内生效,不用重启 manager。DB → 路由器缓存 TTL 是 resolver 的 60s,加 MultiClient 自己的 60s —— 最坏 120s。edge agent 不受影响;manager 是唯一的 LLM client。

resolver

LLMSettingsResolversystem_settings.llm.* 读,装出 []llm.ProviderConfig。每字段按 env 默认回退,所以半配的装机(env 设了 key,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 是稳定字符串:openaianthropiczhipugeminideepseekkimicustom。这些 id 到处出现 —— chat picker、审计日志、 ChatReq.ProviderWithProvider 选项。

目录 endpoint

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 key 的 provider 静默丢掉 —— picker 就这么知道实际有什么可选。API key 本身永远不会从这个 endpoint 返回。

按调派发

ChatReqProvider 字段;设了的话 MultiClient.Chat 派给匹配的子 client。 空的话路由器用配置的默认(DB > env > 字典序第一)。

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

graph-kernel 调用(ReAct agent)等价是 llm.WithProvider(id) 作为 eino model 选项 —— 见 路由

哪里看什么

另见

  • 架构 —— LLM 层在 L3 智能层里的位置。
  • 环境变量 —— 完整的 ONGRID_*_API_KEY + ONGRID_*_MODEL + ONGRID_*_BASE_URL 矩阵。