server: port: 8080 mode: release trusted_proxies: - 127.0.0.1 - ::1 - 10.42.0.0/16 - 10.43.0.0/16 - 172.16.0.0/12 database: host: pgbouncer port: 5432 user: geo password: ${POSTGRES_PASSWORD:geo_dev} dbname: geo sslmode: disable max_open_conns: 12 max_idle_conns: 3 monitoring_database: host: monitoring-pgbouncer port: 5432 user: geo password: ${POSTGRES_PASSWORD:geo_dev} dbname: geo_monitoring sslmode: disable max_open_conns: 8 max_idle_conns: 2 rabbitmq: url: amqp://geo:geo_dev@rabbitmq:5672/geo monitor_result_exchange: monitor.result monitor_result_routing_key: monitor.result.ingest monitor_result_queue: monitor.result.ingest monitor_result_dlx: monitor.result.dlx monitor_result_dlq: monitor.result.ingest.dlq monitor_result_dlq_routing_key: monitor.result.ingest.dlq monitor_projection_exchange: monitor.projection monitor_projection_routing_key: monitor.projection.rebuild monitor_projection_queue: monitor.projection.rebuild monitor_projection_dlx: monitor.projection.dlx monitor_projection_dlq: monitor.projection.rebuild.dlq monitor_projection_dlq_routing_key: monitor.projection.rebuild.dlq generation_exchange: generation.task generation_routing_key: generation.task.run generation_queue: generation.task.run generation_dlx: generation.task.dlx generation_dlq: generation.task.run.dlq generation_dlq_routing_key: generation.task.run.dlq generation_event_exchange: generation.event desktop_task_event_exchange: desktop.task.event desktop_dispatch_exchange: desktop.task.dispatch desktop_dispatch_publish_prefix: publish desktop_dispatch_monitor_prefix: monitor desktop_account_health_exchange: desktop.account.health desktop_account_health_routing_key: desktop.account.health.report desktop_account_health_queue: desktop.account.health.report desktop_account_health_dlx: desktop.account.health.dlx desktop_account_health_dlq: desktop.account.health.report.dlq desktop_account_health_dlq_routing_key: desktop.account.health.report.dlq template_assist_exchange: template.assist template_assist_routing_key: template.assist.run template_assist_queue: template.assist.run template_assist_dlx: template.assist.dlx template_assist_dlq: template.assist.run.dlq template_assist_dlq_routing_key: template.assist.run.dlq kol_assist_exchange: kol.assist kol_assist_routing_key: kol.assist.run kol_assist_queue: kol.assist.run kol_assist_dlx: kol.assist.dlx kol_assist_dlq: kol.assist.run.dlq kol_assist_dlq_routing_key: kol.assist.run.dlq compliance_review_exchange: compliance.review compliance_review_routing_key: compliance.review.run compliance_review_queue: compliance.review.run compliance_review_dlx: compliance.review.dlx compliance_review_dlq: compliance.review.run.dlq compliance_review_dlq_routing_key: compliance.review.run.dlq consumer_prefetch: 10 publish_channel_pool_size: 32 scheduler: http_host: 127.0.0.1 http_port: 8081 internal_metrics_token: dev_scheduler_metrics_token dispatch_interval: 15s dispatch_timeout: 30s dispatch_batch_size: 100 dispatch_concurrency: 4 generation_queue_backpressure_limit: 1000 monitoring_workers: result_ingest_concurrency: 4 projection_rebuild_concurrency: 2 monitoring_dispatch: desktop_tasks_rollout_percentage: 5 membership: default_plan_code: free plans: - code: free name: Free article_generation: 3 article_quota_cycle: lifetime ai_points_monthly: 0 ai_point_base_chars: 1000 image_storage_bytes: 10485760 company_limit: 1 subscription_duration: 72h contact_admin_on_expiry: true - code: plus name: Plus article_generation: 200 article_quota_cycle: monthly ai_points_monthly: 1000 ai_point_base_chars: 1000 image_storage_bytes: 26214000 company_limit: 1 subscription_duration: 720h - code: pro name: Pro article_generation: 400 article_quota_cycle: monthly ai_points_monthly: 1500 ai_point_base_chars: 1000 image_storage_bytes: 524288000 company_limit: 2 subscription_duration: 720h brand_library: free_brand_limit: 1 paid_brand_limit: 2 question_limits_by_plan: default: 25 free: 5 plus: 25 pro: 50 max_keywords: 5 max_questions_per_keyword: 5 redis: addr: redis:6379 db: 0 qdrant: url: qdrant:6334 api_key: "" collection: geo_knowledge_chunks timeout: 15s object_storage: provider: aliyun endpoint: https://oss-cn-shanghai.aliyuncs.com access_key: LTAI5tAEj8euR8B1gXzMoG84 secret_key: lJPrKo9ViyHJE8UWIMmMCY0B6Je8v2 bucket: shengxintui use_ssl: true public_base_url: "" region: cn-shanghai cache: driver: redis jwt: # Override via JWT_SECRET env var in .env secret: "change-me-in-production" access_ttl: 15m refresh_ttl: 720h auth: password_cipher: # 生产多实例请在 config.local.yaml 中配置同一把 private_key_pem。 enabled: true key_id: login-password-rsa-oaep-v1 private_key_pem: "-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCpXOkG9M0Lumc9 48gk2Besn1h+86XQ6+Dvzn7njspGPsmxnn4bQ6L3ZYJODcr8rAq6tkRJgIbT+7T6 YDGvH7RPmHleOTwm9pCGWy9VcffASt/BcXZ6Kghc6sqEdtn+nIGXj9CEs9AcOPQL tFXy1iAMoTx+g7sOUDDvXqQtYpTpLK3BEPVW83nGDwkaGJ59yE/sNBYCfprmW0+7 AgCWPddWYAHgyjcUBdfCLNenxlmxOpdrW1eg8i30WJH/YeSIGa4QfO3kxtxYbuVv xQr8tEEQfKzidE0HS4sYH5n7auLgSfhcPHJTvyIL0U/1DIeVsQsCfjYsS5dJW9Rd IwnsBZL5AgMBAAECggEABH4g9lzHFbEPrQ4eUI/k7ODbPZ7j/qtLL8FYD3dzuTJQ MmSEbt+38n0gXEa0ZEiCDlroa9S7fuMV9XBY0Q7zvwrJ6Wx2QohW5CGGG2unCVRT JDQI0wvLZf+aeLIYbU8khus7OlH0ytLd8nOJtiPk/MDINIj1DNemvKrTixqq3ZaV PKpgjytzlCDtF3bwylyNP78bepsBvqJruUpqf2c993Um6HkdPj6ho9ssmEtbdK5A w9yC55jUGJ51nQe6zwAZBNz6rLaBpHqY8EhDOuCrW63q6wxQq8Wd+SY4fDbQeK6n mKrPz7mKWYtV0J3lEDmbGBftQa8hBg69ze7v+UmPAwKBgQDjEkA69vVRApyKR1eG ujy4YH/AW2+Mo0baP3m8K6QGSPpHmDk7fH2OSq5xebjW0QA4a25cZmaHYGkPwjU+ 8728Q9ppnVHW+Ra6t+wibw4MNCrH/i7FwTbDTbdtN8q6MZDexDgy3cV+xYRTJ9Op tLR+ax7nR3iq1BZ8bJo2HYGxnwKBgQC+8IwTKW8Q5Ykj1jXA6dq5cZaOYy1WncN9 jOM6NXsPT6TYc7VSkNnPBwT+9bxDn/6q9zJyHq4nNiCCiPWZB3OTamrGlqcbwdJT YLegmXG/49zjDloJuji/bn4FrZEvdOhTyP3rTNby2kNc9xW4Yp5CkS9AhTMfhwyr 2SjCGmtkZwKBgQCq+8I75FwjLSk9Aq2IuNIiMB/ic7eSmhwvGV8Mb3wqc2dq49gs z/gnXlru/a5Oq8BTu6m1kDIiPFnAUQgRKC62Bg4AO0M18gjIftgjsaZNUDbqs576 sBwRgoLdjgZsoAgrhmue+dnONOMITtQWVQkYrIbvtqTJVby84nZYy20ulwKBgFRg dnYNTFB6LqVQhwaOESL76B1aBHIPW5FCzjMt6Qi2GFGyqEEpU6ciIfoNW7nCnUat 4HP/zNP1Hl6w6V9LpK5TS4Ygkw44E5rW1a65wEOdDUKlV/KOgX9O84/MyKjhD73e xx7RIPfGrhgJ9GY75lXiVLA9bH8VLetPFqzYAfcnAoGAUZuAlANpJ8/Y/LzwU5lo 6+ROeRtHvyGrheVRo8k2dyR0X/ghmxfBxCJLKxYKKS7BrrJfpJEuZsczhTec8hYM WcBt+4TgngS9auYaRfQDuR8UjS9w+OivWohg44LF7qoChVuhU1Je2r68MTlNEALC VhDbVsNlp4yUY8uLDAK+rug= -----END PRIVATE KEY-----" log: level: info,warn,error format: json llm: provider: ark base_url: https://ark.cn-beijing.volces.com/api/v3 api_key: "7fb6c66b-129c-4935-9617-709236c4205a" model: doubao-seed-2-0-pro-260215 # doubao-seed-2-0-lite-260215 # knowledge_url_model: doubao-seed-2-0-mini-260215 #doubao-seed-2-0-mini-260215 timeout: 2m max_output_tokens: 16000 temperature: 0.7 reasoning_effort: minimal web_search_limit: 3 compliance: enabled: true llm_judge_enabled: false snapshot_reload_interval: 30s publish_gate_timeout: 800ms review_worker_concurrency: 1 review_worker_timeout: 45s review_max_attempts: 3 retrieval: provider: siliconflow base_url: https://api.siliconflow.cn/v1 api_key: "sk-dikvcafrdcbajjpfgjjephqcggpdxwxdkighllieijlehwsf" embedding_model: BAAI/bge-m3 reranker_model: BAAI/bge-reranker-v2-m3 timeout: 30s chunk_size: 900 chunk_overlap: 120 embedding_batch_size: 16 recall_limit: 12 rerank_top_n: 6 max_chunks_per_doc: 6 overlap_tokens: 60 generation: queue_size: 128 worker_concurrency: 8 stream_enabled: false article_timeout: 8m task_lease_ttl: 10m task_recovery_interval: 1m task_recovery_timeout: 30s task_recovery_batch_size: 100 task_queued_stale_after: 2m task_max_attempts: 3 browser_fetch: enabled: true provider: lightpanda service_url: http://browser-fetch:8082 queue_size: 64 worker_concurrency: 2 request_timeout: 45s cache_ttl: 6h allowed_domains: - zhuanlan.zhihu.com - zhihu.com - baidu.com trigger_status: - 403 - 429 - 500 - 502 - 503 - 504