# 配置说明 ## 1. 配置文件总览 | 文件 | 用途 | |------|------| | `configs/system.yaml` | 系统功能配置:代理、抓取、提取、去重、LLM、Embedding、Qdrant、日报、调度、日志 | | `configs/sources.yaml` | 新闻源列表与抓取规则 | | `configs/profiles/8g_headful.yaml` | Pi 8G 有头浏览器 + HTTP 代理配置 | | `configs/profiles/2g_headless.yaml` | 2G 轻量 headless stealth 配置 | | `.env` | 敏感配置:API Key、数据库密码、远程 Qdrant 地址 | | `.env.example` | 环境变量模板 | | `prompts/translation_and_extraction.md` | M4 翻译+事件抽取 Prompt 模板 | ## 2. `.env` 环境变量 ```env # DeepSeek(M4 / M7 默认 LLM) DEEPSEEK_API_KEY=sk-your-deepseek-key DEEPSEEK_BASE_URL=https://api.deepseek.com # Qwen(可选,切换 LLM provider 时使用) QWEN_API_KEY=sk-your-qwen-key QWEN_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 # DashScope(M5 Embedding) # 使用 OpenAI 兼容端点,默认复用 QWEN_BASE_URL;如需独立端点可设置 DASHSCOPE_EMBEDDING_BASE_URL DASHSCOPE_API_KEY=sk-your-dashscope-key # DASHSCOPE_EMBEDDING_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 # Qdrant(可选;默认本地文件模式) QDRANT_URL=http://localhost:6333 QDRANT_API_KEY= # MySQL(M9 日报入库) NEWS_DB_HOST=192.168.1.10 NEWS_DB_PORT=13306 NEWS_DB_USER=myquant NEWS_DB_PASSWORD= NEWS_DB_NAME=myquant ``` ## 3. `configs/system.yaml` ### 3.1 servers ```yaml 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" ``` 海外服务器已停用,字段保留为兼容参考。 ### 3.2 proxy ```yaml proxy: enabled: false url: "http://127.0.0.1:3128" bypass_domains: [] ``` - 默认关闭。 - `8g_headful` Profile 会开启并通过 `http://127.0.0.1:3128`(Privoxy → SOCKS5)访问海外。 ### 3.3 crawler | 字段 | 默认 | 说明 | |------|------|------| | `max_memory_mb` | 1800 | 内存上限,超限触发 GC/保护逻辑 | | `source_timeout_sec` | 7200 | 单源超时 | | `article_delay_sec` | 3.0 | 文章间冷却 | | `page_timeout_sec` | 45 | 单页加载超时 | | `viewport_width/height` | 1024/768 | 浏览器视口 | | `headful` | false | true=有头浏览器 | | `xvfb_display` | ":99" | Xvfb 虚拟显示器 | ### 3.4 extractor / dedup ```yaml extractor: min_content_words: 50 trafilatura_fallback: true dedup: hamming_distance_threshold: 3 simhash_window_days: 30 min_content_length: 100 ``` ### 3.5 llm 与 llm_scenes ```yaml llm: provider: "deepseek" deepseek_model: "deepseek-v4-flash" qwen_model: "qwen-plus" timeout_sec: 60 max_attempts: 3 max_tokens: 8192 temperature: 0.1 concurrency: 3 llm_scenes: translation: provider: "deepseek" model: "deepseek-v4-flash" temperature: 0.1 max_tokens: 8192 daily_report: provider: "deepseek" model: "deepseek-v4-flash" temperature: 0.3 max_tokens: 1500 ``` - `translation`:M4 使用。 - `daily_report`:M7 日报摘要使用。 - 场景未声明的字段会回退 `llm`。 ### 3.6 embedding ```yaml embedding: provider: "dashscope" dashscope_model: "text-embedding-v3" dimension: 1024 batch_size: 10 max_attempts: 3 timeout_sec: 30 ``` 注意:Embedding 不支持按场景拆分配置,因为入库向量与查询向量必须同模型。 ### 3.7 qdrant / report / schedule / logging ```yaml 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" schedule: day_cutoff_hour: 6 times: ["06:00", "12:00", "18:00", "22:00"] logging: level: "INFO" dir: "logs" ``` `report.upload_host/upload_path` 是 M9 之前 HTML 日报上传的旧配置,当前仅作保留。 ## 4. `configs/sources.yaml` ### 4.1 顶层 settings ```yaml settings: concurrency: 5 request_delay_sec: 2 user_agent: "..." ``` ### 4.2 单源字段 | 字段 | 说明 | |------|------| | `id` | 唯一标识,如 `reuters` | | `name` | 展示名,如 `Reuters` | | `enabled` | 是否启用 | | `homepage` | 主页,用于回退/域名校验 | | `article_url_pattern` | URL 正则,过滤非文章链接 | | `js_render` | 是否需要 JS 渲染 | | `max_articles_per_run` | 单次最多抓取篇数 | | `rss_url` | RSS/Atom/Google News RSS 地址 | | `anti_bot_mode` | `stealth` / `headful` 等 Web 回退模式 | ### 4.3 当前源列表 | ID | 名称 | 抓取方式 | 状态 | |----|------|----------|------| | `reuters` | Reuters | Google News RSS(可能只有摘要) | ⚠️ DataDome | | `cnbc` | CNBC | CNBC RSS | ✅ | | `marketwatch` | MarketWatch | RSS + stealth 回退 | ✅ | | `ft` | Financial Times | FT RSS(摘要) | ⚠️ 付费墙 | | `yahoo_finance` | Yahoo Finance | Yahoo RSS | ✅ | | `investing` | Investing.com | Google News RSS + stealth | ✅(摘要) | | `seekingalpha` | Seeking Alpha | RSS + stealth | ✅ | | `barrons` | Barron's | Dow Jones RSS + stealth | ✅ | | `wsj` | WSJ | Dow Jones RSS + stealth | ✅ | | `economist` | The Economist | RSS + stealth | ✅ | | `investinglive` | InvestingLive | RSS(全文) | ✅ | | `zerohedge` | ZeroHedge | FeedBurner RSS(全文) | ✅ | > 历史 `forexlive` 已迁移为 `investinglive`。 ## 5. Profiles ### 5.1 `8g_headful.yaml` 适合国内 Pi(内存充裕): - 开启 HTTP 代理 - `headful: true` - 更大视口/超时 - 通过 Xvfb `:99` 运行 ### 5.2 `2g_headless.yaml` 适合低配/海外轻量: - headless stealth - 内存上限 1800MB - 默认不开启代理 通过环境变量切换: ```bash EN_NEWS_PROFILE=8g_headful uv run en-news crawl # 或直接使用对应脚本 bash scripts/domestic_crawl_8g.sh ``` ## 6. Prompt 模板 `prompts/translation_and_extraction.md` 包含: - `## System Prompt`:LLM System 指令 - `## User Input`:带 `{title}`、`{source_name}`、`{publish_time}`、`{content}` 占位符 如需调整事件类型、输出格式或翻译风格,应修改此文件并同步测试。