Files

276 lines
8.1 KiB
YAML
Raw Permalink Normal View History

server:
port: 8080
mode: release
2026-05-05 23:01:25 +08:00
trusted_proxies:
- 127.0.0.1
- ::1
- 10.42.0.0/16
- 10.43.0.0/16
- 172.16.0.0/12
database:
2026-05-03 15:04:08 +08:00
host: pgbouncer
port: 5432
user: geo
2026-05-03 15:04:08 +08:00
password: ${POSTGRES_PASSWORD:geo_dev}
dbname: geo
sslmode: disable
2026-05-03 15:04:08 +08:00
max_open_conns: 12
max_idle_conns: 3
monitoring_database:
2026-05-03 15:04:08 +08:00
host: monitoring-pgbouncer
port: 5432
user: geo
2026-05-03 15:04:08 +08:00
password: ${POSTGRES_PASSWORD:geo_dev}
dbname: geo_monitoring
sslmode: disable
2026-05-03 15:04:08 +08:00
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:
2026-06-27 16:53:20 +08:00
desktop_tasks_rollout_percentage: 100
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: minio
endpoint: minio:9000
bucket: geo-private
use_ssl: false
public_base_url: ""
region: ""
force_path_style: false
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: 30
rerank_top_n: 8
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