Files
intl_news/configs/system.yaml
T
simon e9f8ef13ef fix: Xvfb 管道挂死根因修复 + 日报窗口 mtime 兜底 + 翻译切换 dashscope
- domestic_crawl_8g.sh: Xvfb 启动脱离管道 fd(</dev/null + 重定向日志 + disown)。
  修复 2026-09-06 事故:Xvfb 常驻进程继承 'bash crawl | tee' 管道写端,
  tee 永远收不到 EOF → domestic_full.sh 卡死 M1 → 日报永不生成
- scheduler/reporter.py: _load_events_window 对 'publish_time 过期' 的文件
  增加 mtime 兜底(本次窗口内新翻译的事件不被低质量 publish_time 误伤)。
  修复空日报:date-only/美式日期错位的 publish_time 使窗口 articles=0
- configs/system.yaml: M4 翻译 provider 切换 deepseek → dashscope(qwen3.7-flash),
  降低翻译成本(输出单价约降 ~9 倍);daily_report 保持 deepseek 不变
2026-09-06 11:52:31 +08:00

134 lines
6.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ════════════════════════════════════════════════════
# 系统功能配置(非敏感)
# 密钥、API 地址 请在 .env 中配置
# ════════════════════════════════════════════════════
# ── 部署拓扑 ────────────────────────────────────────
# 海外服务器已弃用(M1-M6 全链路在 domestic 执行)
servers:
overseas_host: "ecs-user@8.217.19.253"
overseas_path: "/opt/intlgrab"
domestic_host: "pi@192.168.1.160"
domestic_path: "/home/pi/intlnews"
# ── HTTP 代理(Privoxy → ss-local → Shadowsocks 海外访问)──
proxy:
enabled: false # 通过 Profile 8g_headful 启用
url: "http://127.0.0.1:3128" # HTTP 代理地址
bypass_domains: [] # 不走代理的域名(如国内 CDN)
# ── 抓取 ────────────────────────────────────────────
crawler:
max_memory_mb: 1800 # 内存上限 MB(超限触发 GC)
source_timeout_sec: 7200 # 单源超时秒数(2h)
article_delay_sec: 3.0 # 文章间冷却间隔
page_timeout_sec: 45 # 单页加载超时
http_timeout_sec: 30 # 轻量 HTTP 抓全文单页超时(秒)
http_min_html_len: 2000 # 判定 HTTP 拿到正文的最小 HTML 长度
viewport_width: 1024
viewport_height: 768
user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
headful: false # true=有头浏览器(需 X Server 或 xvfb),false=headless
xvfb_display: ":99" # headful 模式下的虚拟显示器(xvfb-run 自动设置)
# ── 正文提取 ──────────────────────────────────────────
extractor:
min_content_words: 50
trafilatura_fallback: true
# ── 去重 ────────────────────────────────────────────
dedup:
hamming_distance_threshold: 3
simhash_window_days: 30
min_content_length: 100
# ── LLM 默认配置(所有 LLM 场景的兜底)────────────────
# 按场景独立配置见下方 llm_scenes 段;场景未声明的字段回退到本段。
llm:
provider: "deepseek"
deepseek_model: "deepseek-v4-flash"
qwen_model: "qwen3.7-flash"
timeout_sec: 60
max_attempts: 3 # 单篇总尝试次数(含首次),失败后指数退避重试
max_tokens: 8192
temperature: 0.1
concurrency: 3
# ── LLM 场景配置(按场景独立指定大模型类型与参数)──────
# 每个场景可覆盖 provider / model / temperature / max_tokens / max_attempts / timeout_sec;
# 场景内统一用 "model" 键指定模型(优先于 llm 段的 deepseek_model / qwen_model)。
llm_scenes:
translation:
# M4:全文英译中 + 投资事件抽取(单次 LLM 调用合并输出)
#provider: "deepseek"
provider: "dashscope"
model: "qwen3.7-flash"
temperature: 0.1
max_tokens: 8192
description: |
用途: M4 对去重后的英文正文做全文英译中,并抽取投资事件
(事件类型/美股代码/情绪/重要度/摘要,单次调用合并输出)
使用方法: llm/pipeline.py 调用 load_llm_config(scene="translation"),
配合 concurrency=3 逐篇并发;单篇失败重试 max_attempts 次后跳过,
未翻译篇由增量机制下次补齐
模型要求: 中英财经翻译准确、术语一致;严格按 Prompt 输出 JSON 结构;
单篇平均 ≤3 秒;max_tokens 需容纳长文(建议 ≥8192)
daily_report:
# M7:每日 AI 摘要日报(五段式,高重要度事件分批生成)
provider: "deepseek"
model: "deepseek-v4-flash"
temperature: 0.3
max_tokens: 1500
description: |
用途: M7 日报 AI 摘要(五段式),高重要度事件分批(≤10 条/批)生成
各批摘要后合并为完整日报摘要
使用方法: scheduler/reporter.py::_call_llm_simple 使用
load_llm_config(scene="daily_report");分批/合并失败均有回退,
全部失败走规则兜底(直接列 Top 事件),日报仍正常入库
模型要求: 中文财经总结能力强;单批 600-1500 字摘要质量稳定;
支持高频短调用(crontab 07/12/18 每天 3 次 × 每份 3 批)
# ── Embedding 向量化(单一场景,不按场景拆分)─────────
# 说明: Qdrant collection en_finance_news 的入库向量与检索查询向量必须由
# 同一模型生成(跨模型向量无法比较),因此 embedding 不支持按场景独立配置。
# 调用点: embedding/pipeline.py(入库)、vectorstore/pipeline.py(检索)、
# mcp_server/server.py(MCP 搜索查询向量化)——三处共用本配置。
embedding:
provider: "dashscope"
dashscope_model: "text-embedding-v3"
dimension: 1024
batch_size: 10
max_attempts: 3 # 单批总尝试次数(含首次),失败后指数退避重试
timeout_sec: 30
# ── Qdrant ──────────────────────────────────────────
qdrant:
collection: "en_finance_news"
# ── 日报 ────────────────────────────────────────────
report:
max_events: 20
summary_max_chars: 500
importance_threshold: 4
upload_host: "simon@doorcome.cn"
upload_path: "/var/www/html/echart/research"
# ── 同步 (rsync) ─────────────────────────────────────
# 海外服务器已弃用,以下保留作为参考
sync:
port: 22
sentinel: "/tmp/en_news_sync_done"
pack_dir: "/tmp"
# ── 定时调度 ────────────────────────────────────────
# 全流程:M1 抓取 → M2→M6 管道 → 日报
# 每天 06:00 / 12:00 / 18:00 / 22:00 各执行一次
schedule:
day_cutoff_hour: 6
times: ["06:00", "12:00", "18:00", "22:00"]
# ── 日志 ────────────────────────────────────────────
logging:
level: "INFO"
dir: "logs"