CONFIG
配置模型与 Provider
从一个环境变量起步,到用 config.toml 管理多个模型、provider 和专用 role。
最简单:环境变量
只用一个模型时不需要配置文件,设一个环境变量即可,命中顺序见命令行指南。
$ 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。它的优先级高于环境变量。
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— 模型支持的能力,例如tools、image。带image才允许发图片。contextWindow— 显式覆盖上下文窗口;不写时内置厂商会按其最大窗口补默认值。
OpenAI Responses
OpenAI Responses 用的是独立的 provider 类型:
[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 决定。