feat(config): wire MinerU and material RAG settings

Add MINERU_* / MATERIAL_* to config loader, .env.example, and
compose env passthrough. Secrets stay in local .env only.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
weichen
2026-09-21 08:29:10 +00:00
co-authored by Cursor
parent 79c4c7c496
commit 983b785cd6
5 changed files with 97 additions and 0 deletions
+67
View File
@@ -52,6 +52,17 @@ type Config struct {
RerankerModel string `json:"reranker_model"`
RerankerAPIKey string `json:"reranker_api_key"`
// MinerU 文档解析(精准 API);未配置 API Key 时整条链路降级为本地提取
MineruEndpointURL string `json:"mineru_endpoint_url"`
MineruAPIKey string `json:"mineru_api_key"`
MineruModelVersion string `json:"mineru_model_version"`
MineruLanguage string `json:"mineru_language"`
MineruTimeout time.Duration `json:"mineru_timeout"`
// 材料注入策略:小文档全文,大文档 RAG
MaterialFulltextMaxBytes int `json:"material_fulltext_max_bytes"`
MaterialRAGTopK int `json:"material_rag_top_k"`
// 系统管理员与准入认证配置
AdminUsername string `json:"admin_username"`
AdminPassword string `json:"admin_password"`
@@ -112,6 +123,15 @@ func Load(path string) (*Config, error) {
RerankerModel: "bge-reranker-v2-m3-free",
RerankerAPIKey: "",
MineruEndpointURL: "https://mineru.net",
MineruAPIKey: "",
MineruModelVersion: "vlm",
MineruLanguage: "ch",
MineruTimeout: 90 * time.Second,
MaterialFulltextMaxBytes: 60 * 1024,
MaterialRAGTopK: 8,
AdminUsername: "admin",
AdminPassword: "admin-secret-password-123",
AuthRegistrationEnabled: true,
@@ -235,6 +255,33 @@ func Load(path string) (*Config, error) {
if v := os.Getenv("RERANKER_MODEL"); v != "" {
cfg.RerankerModel = v
}
if v := os.Getenv("MINERU_ENDPOINT_URL"); v != "" {
cfg.MineruEndpointURL = v
}
if v := os.Getenv("MINERU_API_KEY"); v != "" {
cfg.MineruAPIKey = v
}
if v := os.Getenv("MINERU_MODEL_VERSION"); v != "" {
cfg.MineruModelVersion = v
}
if v := os.Getenv("MINERU_LANGUAGE"); v != "" {
cfg.MineruLanguage = v
}
if v := os.Getenv("MINERU_TIMEOUT"); v != "" {
if d, err := time.ParseDuration(v); err == nil {
cfg.MineruTimeout = d
}
}
if v := os.Getenv("MATERIAL_FULLTEXT_MAX_BYTES"); v != "" {
if n, err := strconv.Atoi(v); err == nil && n > 0 {
cfg.MaterialFulltextMaxBytes = n
}
}
if v := os.Getenv("MATERIAL_RAG_TOP_K"); v != "" {
if n, err := strconv.Atoi(v); err == nil && n > 0 {
cfg.MaterialRAGTopK = n
}
}
if v := os.Getenv("ADMIN_USERNAME"); v != "" {
cfg.AdminUsername = v
}
@@ -403,6 +450,26 @@ func applyEnvFile(cfg *Config, path string) error {
cfg.RerankerModel = val
case "RERANKER_API_KEY":
cfg.RerankerAPIKey = val
case "MINERU_ENDPOINT_URL":
cfg.MineruEndpointURL = val
case "MINERU_API_KEY":
cfg.MineruAPIKey = val
case "MINERU_MODEL_VERSION":
cfg.MineruModelVersion = val
case "MINERU_LANGUAGE":
cfg.MineruLanguage = val
case "MINERU_TIMEOUT":
if d, err := time.ParseDuration(val); err == nil {
cfg.MineruTimeout = d
}
case "MATERIAL_FULLTEXT_MAX_BYTES":
if n, err := strconv.Atoi(val); err == nil && n > 0 {
cfg.MaterialFulltextMaxBytes = n
}
case "MATERIAL_RAG_TOP_K":
if n, err := strconv.Atoi(val); err == nil && n > 0 {
cfg.MaterialRAGTopK = n
}
case "ADMIN_USERNAME":
cfg.AdminUsername = val
case "ADMIN_PASSWORD":