11---
22title : 配置说明
3- description : LLM 提供方、TTS、ASR、访问控制和功能开关。
3+ description : LLM 提供方、媒体生成、文档解析、 TTS、ASR、访问控制和功能开关。
44---
55
6- OpenMAIC 在服务器启动时读取环境变量。所有项都是可选的——按需启用。完整清单见仓库里的 [ ` .env.example ` ] ( https://github.com/THU-MAIC/OpenMAIC/blob/main/.env.example ) 。内置模型 ID 请见[ 支持模型] ( ./supported-models.mdx ) 。
6+ OpenMAIC 在服务器启动时读取环境变量。所有项都是可选的——按需启用。环境变量示例见仓库里的 [ ` .env.example ` ] ( https://github.com/THU-MAIC/OpenMAIC/blob/main/.env.example ) 。内置模型 ID 请见[ 支持模型] ( ./supported-models.mdx ) 。
7+
8+ 除环境变量外,也可以使用项目根目录下的 ` server-providers.yml ` 配置代码中已注册的服务端 provider。环境变量会逐字段覆盖 YAML 中的同名配置;自定义 OpenAI 兼容 provider 只能在设置中添加,不能通过任意环境变量前缀或未知 YAML provider ID 注册。
79
810## LLM 提供方
911
10- 每个 provider 都用三个环境变量:只有 API key 必填 ,base URL 和 model 列表是可选的 。
12+ 云端提供方通常使用以下三个环境变量:API key、base URL 和 model 列表。其中 API key 通常是必填的 ,base URL 和 model 列表可选;Azure OpenAI 需要配置资源 endpoint,Ollama 和 Lemonade 不需要 API key 。
1113
1214``` bash
1315OPENAI_API_KEY=sk-...
@@ -20,6 +22,7 @@ OPENAI_MODELS= # 可选的模型白名单(逗号分隔)
2022| 前缀 | 提供方 |
2123| ------------------ | ------------------------------------ |
2224| ` OPENAI_ ` | OpenAI |
25+ | ` AZURE_OPENAI_ ` | Azure OpenAI |
2326| ` ANTHROPIC_ ` | Anthropic |
2427| ` GOOGLE_ ` | Google Gemini |
2528| ` DEEPSEEK_ ` | DeepSeek |
@@ -32,21 +35,32 @@ OPENAI_MODELS= # 可选的模型白名单(逗号分隔)
3235| ` OPENROUTER_ ` | OpenRouter |
3336| ` GROK_ ` | xAI Grok |
3437| ` TENCENT_ ` | 腾讯混元 |
35- | ` TENCENT_HUNYUAN_ ` | 腾讯混元 |
38+ | ` TENCENT_HUNYUAN_ ` | 腾讯混元(别名) |
3639| ` XIAOMI_ ` | 小米 MiMo |
37- | ` MIMO_ ` | 小米 MiMo |
40+ | ` MIMO_ ` | 小米 MiMo(别名) |
3841| ` OLLAMA_ ` | Ollama(本地) |
3942| ` LEMONADE_ ` | Lemonade(本地) |
4043
41- ## 本地模型(Ollama)
44+ Azure OpenAI 使用 deployment name 作为模型 ID:
45+
46+ ``` bash
47+ AZURE_OPENAI_API_KEY=...
48+ AZURE_OPENAI_BASE_URL=https://YOUR-RESOURCE.openai.azure.com/openai
49+ AZURE_OPENAI_MODELS=your-deployment-name
50+ ```
51+
52+ 如需连接其他 OpenAI 兼容的 LLM 服务,请在 ** 设置 → 模型提供方** 中添加自定义 provider,并选择对应的协议类型。
4253
43- 不需要 API key。把 base URL 写在服务端,绕过 SSRF 检查:
54+ ## 本地模型(Ollama 和 Lemonade)
55+
56+ Ollama 和 Lemonade 不需要 API key;本地服务的 base URL 应写在服务端配置中,以通过 SSRF 校验:
4457
4558``` bash
4659OLLAMA_BASE_URL=http://localhost:11434/v1
60+ # LEMONADE_BASE_URL=http://localhost:13305/v1
4761```
4862
49- 生产环境会拦截客户端传过来的 localhost URL,所以必须在服务端配置 。
63+ 如需限制可用模型,可使用 ` OLLAMA_MODELS ` 或 ` LEMONADE_MODELS ` 指定模型白名单 。
5064
5165## TTS 提供方
5266
@@ -69,9 +83,11 @@ TTS_OPENAI_BASE_URL=
6983TTS_VOXCPM_BASE_URL=http://localhost:8000
7084```
7185
72- 支持的 TTS 前缀包括 ` TTS_MINIMAX_ ` 、` TTS_DOUBAO_ ` 、` TTS_OPENAI_ ` 、` TTS_AZURE_ ` 、` TTS_GLM_ ` 、` TTS_QWEN_ ` 、` TTS_VOXCPM_ ` 、` TTS_ELEVENLABS_ ` 。本地 Lemonade TTS 使用 ` TTS_LEMONADE_BASE_URL ` ,不需要 API key。
86+ 支持的 TTS 前缀包括 ` TTS_OPENAI_ ` 、` TTS_AZURE_ ` 、` TTS_GLM_ ` 、` TTS_QWEN_ ` 、` TTS_MINIMAX_ ` 、` TTS_DOUBAO_ ` 、` TTS_ELEVENLABS_ ` 、` TTS_VOXCPM_ ` 和 ` TTS_LEMONADE_ ` 。本地 Lemonade TTS 和 VoxCPM2 不需要 API key。浏览器原生 TTS 不需要服务端配置。
87+
88+ 管理员可以使用 ` TTS_<PROVIDER>_ENABLED=false ` 在服务端强制关闭某个 TTS 提供方。VoxCPM2(自托管 TTS + 声音克隆)请见单独的 [ VoxCPM2] ( ./voxcpm.mdx ) 章节。
7389
74- VoxCPM2(自托管 TTS + 声音克隆)请见单独的 [ VoxCPM2 ] ( ./voxcpm.mdx ) 章节 。
90+ 也可以在设置中添加自定义 OpenAI 兼容 TTS provider,填写 Base URL、模型和音色。这类自定义 provider 保存在客户端设置中,不通过任意 ` TTS_* ` 环境变量或 YAML provider ID 注册 。
7591
7692## ASR(语音转文字)
7793
@@ -84,31 +100,66 @@ ASR_OPENAI_BASE_URL= # 可选覆盖
84100ASR_QWEN_API_KEY=
85101ASR_QWEN_BASE_URL= # 可选覆盖
86102
103+ # Azure ASR
104+ ASR_AZURE_API_KEY=
105+ ASR_AZURE_BASE_URL=https://{region}.api.cognitive.microsoft.com
106+
87107# Lemonade ASR(本地,不需要 key)
88108ASR_LEMONADE_BASE_URL=http://localhost:13305/v1
89109```
90110
111+ 浏览器原生 ASR 不需要服务端配置。
112+
113+ 也可以在设置中添加自定义 OpenAI 兼容 ASR provider,填写 Base URL、模型和支持语言;该配置保存在客户端设置中。
114+
91115## 图像生成提供方
92116
93- 图像生成提供方使用 ` IMAGE_<PROVIDER>_API_KEY ` ,可选 ` IMAGE_<PROVIDER>_BASE_URL ` 。Lemonade 是本地服务,不需要 key:
117+ 图像生成提供方使用 ` IMAGE_<PROVIDER>_API_KEY ` ,可选 ` IMAGE_<PROVIDER>_BASE_URL ` 。支持的前缀包括:
118+
119+ ` IMAGE_OPENAI_ ` 、` IMAGE_SEEDREAM_ ` 、` IMAGE_QWEN_IMAGE_ ` 、` IMAGE_NANO_BANANA_ ` 、` IMAGE_MINIMAX_ ` 、` IMAGE_GROK_ ` 和 ` IMAGE_LEMONADE_ ` 。
120+
121+ Lemonade 是本地服务,不需要 key:
94122
95123``` bash
96124IMAGE_LEMONADE_BASE_URL=http://localhost:13305/v1
97125```
98126
99- ## ACCESS_CODE —— 站点级访问密码
127+ ComfyUI Image 不需要 API key,默认连接 ` http://localhost:8188 ` 。在设置中填写 ComfyUI Base URL,并把以 API 格式导出的 workflow JSON 放入 OpenMAIC 的 ` public/ ` 目录;文件名使用 ` comfyui-*.json ` 或包含 ` workflow ` ,设置页会自动发现这些文件并将其作为可选 workflow。Docker 部署时还需要在构建镜像前加入 workflow,或把单个 workflow 文件挂载到容器的 ` /app/public/ ` 目录。由于 ` comfyui-image ` 不是服务端托管 provider,生产环境连接宿主机 ComfyUI 时还需要设置 ` ALLOW_LOCAL_NETWORKS=true ` 。
100128
101- 对共享部署(内部 demo、课堂),可以设置访问码,访客先输密码才能看到应用:
129+ ## 视频生成提供方
130+
131+ 视频生成提供方使用 ` VIDEO_<PROVIDER>_API_KEY ` ,可选 ` VIDEO_<PROVIDER>_BASE_URL ` 。支持的前缀包括:
132+
133+ ` VIDEO_SEEDANCE_ ` 、` VIDEO_KLING_ ` 、` VIDEO_VEO_ ` 、` VIDEO_SORA_ ` 、` VIDEO_MINIMAX_ ` 、` VIDEO_GROK_ ` 和 ` VIDEO_HAPPYHORSE_ ` 。
134+
135+ ## 文档和媒体解析
136+
137+ 课程材料的具体格式取决于所选解析器。当前支持文本、PDF、Office 文档、图片以及部分音视频格式;不同 provider 支持的格式和能力不同。
102138
103139``` bash
104- ACCESS_CODE=your-secret-code
140+ # MinerU 自托管
141+ PDF_MINERU_BASE_URL=http://localhost:8888
142+
143+ # MinerU 自托管的可选后端
144+ PDF_MINERU_BACKEND=pipeline
145+
146+ # MinerU Cloud
147+ PDF_MINERU_CLOUD_API_KEY=
148+ PDF_MINERU_CLOUD_BASE_URL=https://mineru.net/api/v4
149+
150+ # AliDocMind(使用阿里云 AccessKey,而不是单独的 API key)
151+ ALIDOCMIND_ACCESS_KEY_ID=
152+ ALIDOCMIND_ACCESS_KEY_SECRET=
153+ ALIDOCMIND_BASE_URL= # 可选覆盖
105154```
106155
107- 访客只会被提示一次,密码存在 HTTP-only cookie 里。留空则关闭。
156+ ` unpdf ` 内置于 OpenMAIC,可用于基础 PDF 解析。Office 文档、图片和需要 OCR、表格、公式或版面分析的材料,应选择兼容的 MinerU 或 AliDocMind provider。
157+
158+ AliDocMind 的文档解析支持 PDF、DOCX、PPTX、XLSX,以及 PNG、JPG/JPEG、BMP、GIF。当前音视频材料仅支持通过 AliDocMind 解析:视频格式为 MP4、MOV、AVI、MKV、WMV,音频格式为 MP3、WAV、AAC;不支持 M4A。
108159
109160## 联网搜索
110161
111- 配置 Tavily、Bocha 或 MiniMax:
162+ 配置 Tavily、Bocha、Brave、Baidu、SearXNG 或 MiniMax:
112163
113164``` bash
114165TAVILY_API_KEY=
@@ -117,39 +168,95 @@ TAVILY_BASE_URL= # 可选覆盖
117168BOCHA_API_KEY=
118169BOCHA_BASE_URL= # 可选覆盖
119170
171+ BAIDU_API_KEY=
172+ BAIDU_BASE_URL=https://qianfan.baidubce.com # 可选覆盖
173+
174+ # 自托管 SearXNG,不需要 API key
175+ SEARXNG_BASE_URL=
176+
120177WEB_SEARCH_MINIMAX_API_KEY=
121178WEB_SEARCH_MINIMAX_BASE_URL=https://api.minimaxi.com # 可选覆盖
122179```
123180
124- 前端会暴露一个 toggle,每次生成时可以选是否开启搜索 。
181+ Brave 和 SearXNG 不需要 API key;前端可以在每次生成时选择是否启用搜索。Grok 的联网搜索通过 Grok LLM 的搜索工具提供,不是独立的联网搜索 provider 。
125182
126- ## PDF 解析提供方
183+ ## ACCESS_CODE —— 站点级访问密码
127184
128- 对于布局复杂、含公式/表格的 PDF,可以配置服务端解析器 :
185+ 对共享部署(内部 demo、课堂),可以设置访问码,访客先输密码才能看到应用 :
129186
130187``` bash
131- # MinerU 自托管
132- PDF_MINERU_BASE_URL=http://localhost:8888
188+ ACCESS_CODE=your-secret-code
189+ ```
133190
134- # MinerU Cloud
135- PDF_MINERU_CLOUD_API_KEY=
136- PDF_MINERU_CLOUD_BASE_URL=https://mineru.net/api/v4
191+ 访客只会被提示一次,密码存在 HTTP-only cookie 里。留空则关闭。
192+
193+ ## 默认模型和模型路由
194+
195+ 服务端 API 没有收到客户端模型时,需要通过 ` DEFAULT_MODEL ` 指定默认模型。模型写法是 ` provider:model-id ` ,例如:
196+
197+ ``` bash
198+ DEFAULT_MODEL=openai:gpt-5.5
137199```
138200
139- 没配置服务端解析器时,OpenMAIC 会回退到 ` unpdf ` 。
201+ 可以使用 ` MODEL_ROUTES ` 为不同生成阶段指定模型;未配置的阶段继续按客户端模型和 ` DEFAULT_MODEL ` 解析。它是一个 JSON 对象,键为生成阶段,值可以是模型字符串,也可以是包含 ` model ` 和 ` thinking ` 的对象。完整的阶段列表和示例见仓库里的 [ ` .env.example ` ] ( https://github.com/THU-MAIC/OpenMAIC/blob/main/.env.example ) 。
202+
203+ ## 功能开关
204+
205+ 功能开关的值为 ` true ` 或 ` 1 ` ,其他值视为关闭。` NEXT_PUBLIC_* ` 开关会在构建时注入客户端,修改后需要重新构建:
206+
207+ ``` bash
208+ # MAIC Editor(Pro 模式)
209+ NEXT_PUBLIC_MAIC_EDITOR_ENABLED=true
210+
211+ # Pi 对话运行时
212+ NEXT_PUBLIC_PI_CHAT_ENABLED=true
213+
214+ # 职业教育任务引擎(服务端开关)
215+ OPENMAIC_ENABLE_VOCATIONAL=true
216+
217+ # 显示职业教育实验开关
218+ NEXT_PUBLIC_SHOW_VOCATIONAL_TEST_UI=true
219+
220+ # 显示视频导出入口
221+ NEXT_PUBLIC_ENABLE_VIDEO_EXPORT=true
222+
223+ # 显示实验性 PPTX 导入入口
224+ NEXT_PUBLIC_ENABLE_PPTX_IMPORT=true
225+ ```
226+
227+ PPTX 导入目前仍是实验性入口,解析结果尚未完整接入课堂数据流。以上 ` NEXT_PUBLIC_* ` 变量都是构建时开关;Docker 部署还需要通过 build args 传入,不能只写在容器运行时环境变量中。
228+
229+ ## 其他服务端选项
230+
231+ 以下服务端选项也可以通过环境变量配置:
232+
233+ ``` bash
234+ # 场景内容并行生成;0 或未设置表示串行
235+ PARALLEL_SCENE_CONCURRENCY=3
236+
237+ # 允许访问 localhost、内网等本地网络地址;仅用于自托管/内网部署
238+ ALLOW_LOCAL_NETWORKS=true
239+
240+ # 可选的 MP4 渲染服务
241+ RENDER_SERVICE_URL=http://render-service:9000
242+
243+ # 日志和推理
244+ LOG_LEVEL=info
245+ LOG_FORMAT=pretty
246+ LLM_THINKING_DISABLED=false
247+ ```
140248
141249## 用 YAML 配置文件
142250
143- 除了环境变量,你也可以把配置放在项目根目录下的 ` server-providers.yml ` 文件里。服务端启动时加载,结构与环境变量分类对应:
251+ 除了环境变量,你也可以把代码中已注册 provider 的配置放在项目根目录下的 ` server-providers.yml ` 文件里。服务端启动时加载,结构与环境变量分类对应:
144252
145253``` yaml title="server-providers.yml"
146254providers :
147255 openai :
148256 apiKey : sk-...
149257 baseUrl : https://api.openai.com/v1
150258 models :
151- - gpt-4o
152- - gpt-4o-mini
259+ - gpt-5.5
153260 anthropic :
154261 apiKey : sk-ant-...
155262
@@ -164,13 +271,23 @@ asr:
164271pdf :
165272 mineru :
166273 baseUrl : http://localhost:8888
274+ alidocmind :
275+ accessKeyId : your-access-key-id
276+ accessKeySecret : your-access-key-secret
277+
278+ image :
279+ seedream :
280+ apiKey : ...
281+
282+ video :
283+ seedance :
284+ apiKey : ...
167285
168286web-search :
169287 tavily :
170288 apiKey : tvly-...
171- minimax :
172- apiKey : sk-...
173- baseUrl : https://api.minimaxi.com
289+ searxng :
290+ baseUrl : http://localhost:8080
174291` ` `
175292
176- 环境变量会逐字段覆盖 YAML 中的同名 provider 配置。键名使用 provider ID,例如 ` openai`、`doubao-tts`、`openai-whisper`、`mineru`、`tavily` 或 `minimax` 。
293+ 环境变量会逐字段覆盖 YAML 中的同名 provider 配置。键名必须使用代码中已注册的 provider ID,例如 ` openai`、`doubao-tts`、`openai-whisper`、`mineru`、`alidocmind`、`seedream`、`seedance`、` tavily` 或 `searxng`;未知 ID 不能在这里注册为自定义 LLM provider 。
0 commit comments