Skip to content

Commit 0cf2a33

Browse files
docs: refresh and synchronize documentation (#996)
Refresh the Chinese documentation against current functionality, synchronize all localized guides, document deployment and configuration behavior, and align the PPTX import feature flag implementation.
1 parent 61a7154 commit 0cf2a33

35 files changed

Lines changed: 2167 additions & 992 deletions

Dockerfile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,18 @@ FROM base AS builder
2323

2424
ARG NEXT_PUBLIC_PERSISTENCE
2525
ARG NEXT_PUBLIC_PERSISTENCE_TOKEN
26+
ARG NEXT_PUBLIC_MAIC_EDITOR_ENABLED
27+
ARG NEXT_PUBLIC_PI_CHAT_ENABLED
28+
ARG NEXT_PUBLIC_SHOW_VOCATIONAL_TEST_UI
29+
ARG NEXT_PUBLIC_ENABLE_VIDEO_EXPORT
30+
ARG NEXT_PUBLIC_ENABLE_PPTX_IMPORT
2631
ENV NEXT_PUBLIC_PERSISTENCE=$NEXT_PUBLIC_PERSISTENCE
2732
ENV NEXT_PUBLIC_PERSISTENCE_TOKEN=$NEXT_PUBLIC_PERSISTENCE_TOKEN
33+
ENV NEXT_PUBLIC_MAIC_EDITOR_ENABLED=$NEXT_PUBLIC_MAIC_EDITOR_ENABLED
34+
ENV NEXT_PUBLIC_PI_CHAT_ENABLED=$NEXT_PUBLIC_PI_CHAT_ENABLED
35+
ENV NEXT_PUBLIC_SHOW_VOCATIONAL_TEST_UI=$NEXT_PUBLIC_SHOW_VOCATIONAL_TEST_UI
36+
ENV NEXT_PUBLIC_ENABLE_VIDEO_EXPORT=$NEXT_PUBLIC_ENABLE_VIDEO_EXPORT
37+
ENV NEXT_PUBLIC_ENABLE_PPTX_IMPORT=$NEXT_PUBLIC_ENABLE_PPTX_IMPORT
2838

2939
COPY --from=deps /app/node_modules ./node_modules
3040
COPY --from=deps /app/packages ./packages

app/page.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip
6363
import { useDraftCache } from '@/lib/hooks/use-draft-cache';
6464
import { SpeechButton } from '@/components/audio/speech-button';
6565
import { useImportClassroom } from '@/lib/import/use-import-classroom';
66-
import { shouldShowVocationalTestUi } from '@/lib/config/feature-flags';
66+
import { isPptxImportEnabled, shouldShowVocationalTestUi } from '@/lib/config/feature-flags';
6767
import { useImportPptx } from '@/lib/import/use-import-pptx';
6868
import { InteractiveModeButton } from '@/components/generation/interactive-mode-button';
6969

@@ -76,8 +76,7 @@ const INTERACTIVE_MODE_STORAGE_KEY = 'interactiveModeEnabled';
7676
// PPTX import is still scaffolding: `useImportPptx` has no `onImported` consumer
7777
// yet, so the flow only logs the parsed slides. Hide the entry point behind a
7878
// flag until it's wired end-to-end, so the UI doesn't expose a no-op button.
79-
// Enable with NEXT_PUBLIC_ENABLE_PPTX_IMPORT=true.
80-
const PPTX_IMPORT_ENABLED = process.env.NEXT_PUBLIC_ENABLE_PPTX_IMPORT === 'true';
79+
const PPTX_IMPORT_ENABLED = isPptxImportEnabled();
8180

8281
interface FormState {
8382
courseMaterials: SelectedCourseMaterial[];

docker-compose.yml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@ services:
33
build:
44
context: .
55
args:
6-
# NEXT_PUBLIC_* values are compiled into the browser bundle. Leave both
7-
# empty for today's browser-only persistence; the persistence quickstart
8-
# in README supplies them on the compose command line.
6+
# NEXT_PUBLIC_* values are compiled into the browser bundle. Leave them
7+
# empty unless the corresponding client feature is explicitly enabled;
8+
# persistence and other build-time flags can be supplied on the command line.
99
- NEXT_PUBLIC_PERSISTENCE=${NEXT_PUBLIC_PERSISTENCE:-}
1010
- NEXT_PUBLIC_PERSISTENCE_TOKEN=${NEXT_PUBLIC_PERSISTENCE_TOKEN:-}
11+
- NEXT_PUBLIC_MAIC_EDITOR_ENABLED=${NEXT_PUBLIC_MAIC_EDITOR_ENABLED:-}
12+
- NEXT_PUBLIC_PI_CHAT_ENABLED=${NEXT_PUBLIC_PI_CHAT_ENABLED:-}
13+
- NEXT_PUBLIC_SHOW_VOCATIONAL_TEST_UI=${NEXT_PUBLIC_SHOW_VOCATIONAL_TEST_UI:-}
14+
- NEXT_PUBLIC_ENABLE_VIDEO_EXPORT=${NEXT_PUBLIC_ENABLE_VIDEO_EXPORT:-}
15+
- NEXT_PUBLIC_ENABLE_PPTX_IMPORT=${NEXT_PUBLIC_ENABLE_PPTX_IMPORT:-}
1116
ports:
1217
- "3000:3000"
1318
env_file:

lib/config/feature-flags.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,8 @@ export function shouldShowVocationalTestUi(): boolean {
7777
export function isVideoExportEnabled(): boolean {
7878
return readBoolean(process.env.NEXT_PUBLIC_ENABLE_VIDEO_EXPORT);
7979
}
80+
81+
/** Experimental PPTX import entry point. Default OFF. */
82+
export function isPptxImportEnabled(): boolean {
83+
return readBoolean(process.env.NEXT_PUBLIC_ENABLE_PPTX_IMPORT);
84+
}

packages/docs/content/docs/configuration.ar.mdx

Lines changed: 178 additions & 61 deletions
Large diffs are not rendered by default.

packages/docs/content/docs/configuration.ja.mdx

Lines changed: 150 additions & 33 deletions
Large diffs are not rendered by default.

packages/docs/content/docs/configuration.mdx

Lines changed: 174 additions & 58 deletions
Large diffs are not rendered by default.

packages/docs/content/docs/configuration.ru.mdx

Lines changed: 189 additions & 72 deletions
Large diffs are not rendered by default.

packages/docs/content/docs/configuration.zh-cn.mdx

Lines changed: 149 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
---
22
title: 配置说明
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
1315
OPENAI_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
4659
OLLAMA_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=
6983
TTS_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= # 可选覆盖
84100
ASR_QWEN_API_KEY=
85101
ASR_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)
88108
ASR_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
96124
IMAGE_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
114165
TAVILY_API_KEY=
@@ -117,39 +168,95 @@ TAVILY_BASE_URL= # 可选覆盖
117168
BOCHA_API_KEY=
118169
BOCHA_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+
120177
WEB_SEARCH_MINIMAX_API_KEY=
121178
WEB_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"
146254
providers:
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:
164271
pdf:
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

168286
web-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

Comments
 (0)