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:
@@ -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":
|
||||
|
||||
Reference in New Issue
Block a user