CONFIG

配置模型与 Provider

从一个环境变量起步,到用 config.toml 管理多个模型、provider 和专用 role。

最简单:环境变量

只用一个模型时不需要配置文件,设一个环境变量即可,命中顺序见命令行指南

terminal
$ export DEEPSEEK_API_KEY=sk-xxx
$ go run ./cmd/modu_code

辅助变量:OPENAI_BASE_URL 覆盖 OpenAI Responses 的 base URL;THINKING_LEVEL 设推理档位(off|low|medium|high,默认 off)。

配置文件:多模型

需要多个模型、模型切换或专用 role 时,写 ~/.modu/config.toml。它的优先级高于环境变量。

~/.modu/config.toml
version = 2
active = "local-qwen"
scopedModels = ["local-qwen", "deepseek"]

[roles]
summary = "local-qwen"
dispatcher = "deepseek"

[reasoning]
level = "off"

[providers.lmstudio]
type = "openai-compatible"
baseUrl = "http://127.0.0.1:1234/v1"
apiKey = "lm-studio"

[providers.deepseek]
type = "openai-compatible"
baseUrl = "https://api.deepseek.com/v1"
apiKeyEnv = "DEEPSEEK_API_KEY"

[[models]]
name = "local-qwen"
description = "local coding model"
provider = "lmstudio"
model = "qwen/qwen3.6-35b-a3b"
capabilities = ["tools"]
contextWindow = 262144

[[models]]
name = "deepseek"
description = "remote fallback model"
provider = "deepseek"
model = "deepseek-chat"
capabilities = ["tools"]
contextWindow = 1000000

各字段的职责

  • providers — 只描述怎么连:base URL、API key。apiKeyEnv 让 key 留在环境变量里,不落到配置文件。
  • models — 只描述有哪些模型可选,每个绑定一个 provider。
  • active — 默认使用的模型。
  • scopedModels — 模型循环切换的范围。
  • roles — 给 summary、dispatcher 这类专用场景指定模型。
  • capabilities — 模型支持的能力,例如 toolsimage。带 image 才允许发图片。
  • contextWindow — 显式覆盖上下文窗口;不写时内置厂商会按其最大窗口补默认值。

OpenAI Responses

OpenAI Responses 用的是独立的 provider 类型:

~/.modu/config.toml
[providers.openai]
type = "openai-responses"
baseUrl = "https://api.openai.com/v1"
apiKeyEnv = "OPENAI_API_KEY"

[[models]]
name = "gpt-5"
provider = "openai"
model = "gpt-5"
capabilities = ["text", "image", "tools"]

运行中切换模型

在 TUI 里用 /model 切换,或用 /config 现场增删 provider 与模型,无需重启。切换范围由 scopedModels 决定。

已复制到剪贴板