From e1ec5f836d0af9175713ab772bad45fac1048702 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 23 Jul 2026 09:30:15 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20intlnews=5Fusage.html=20=E7=A7=BB?= =?UTF-8?q?=E8=87=B3=20docs/=20+=20=E4=B8=8A=E4=BC=A0=E5=88=B0=20doorcome?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude --- docs/intlnews_usage.html | 955 ++++++++++++++------------------------- intlnews_usage.html | 390 ---------------- 2 files changed, 342 insertions(+), 1003 deletions(-) delete mode 100644 intlnews_usage.html diff --git a/docs/intlnews_usage.html b/docs/intlnews_usage.html index 1b831be..5720f14 100644 --- a/docs/intlnews_usage.html +++ b/docs/intlnews_usage.html @@ -3,659 +3,388 @@ -国际财经 Deep Research 平台 — 使用手册 v1.0 +IntlNews 操作手册 +
- +

📰 IntlNews — 国际财经新闻 Deep Research

+

最后更新:2026-07-23 | 运行服务器:pi@192.168.1.160

-
-
-

🌍 国际财经 Deep Research 平台

-

使用手册 v1.0 · 2026-06-21 · 私有化部署

-
-
- -
- - -
- 📑 目录 -
    -
  1. 项目概述
  2. -
  3. 部署拓扑
  4. -
  5. 环境配置
  6. -
  7. CLI 命令参考
  8. -
  9. M1 — 新闻抓取
  10. -
  11. M2 — 正文提取
  12. -
  13. M3 — 三层去重
  14. -
  15. M4 — 翻译 + 事件抽取
  16. -
  17. M5 — 向量生成
  18. -
  19. M6 — Qdrant 入库与检索
  20. -
  21. M7 — 全链路管道 + 日报
  22. -
  23. M8 — MCP 服务
  24. -
  25. 数据目录结构
  26. -
  27. 定时任务
  28. -
  29. 常见问题
  30. -
+
+项目定位:面向国际财经新闻的私有化 Deep Research 平台。抓取英文财经新闻 → 英译中 → 事件抽取 → 向量入库 → MCP Agent 深度研究。
- -

1. 项目概述

+ +

一、系统架构

+Arch -

本项目构建面向国际英文财经新闻的私有化 Deep Research 平台。

+
+┌──────────────────────────────────────────────────────┐
+│                   Pi 4 (8GB)                          │
+│  ┌──────────┐   ┌──────────┐   ┌──────────────────┐  │
+│  │ M1 抓取   │──▶│ M2 正文  │──▶│ M3 三层去重      │  │
+│  │ headful   │   │ trafilat.│   │ URL/Content/SimH │  │
+│  │ Playwright│   │          │   │                  │  │
+│  │ + HTTP 代 │   │          │   │                  │  │
+│  │ 理(海外)  │   │          │   │                  │  │
+│  └──────────┘   └──────────┘   └────────┬─────────┘  │
+│                                         ▼            │
+│  ┌──────────┐   ┌──────────┐   ┌──────────────────┐  │
+│  │ M6 Qdrant│◀──│ M5 向量  │◀──│ M4 翻译+事件抽取  │  │
+│  │ 入库     │   │ DashScope│   │ DeepSeek v4      │  │
+│  └────┬─────┘   └──────────┘   └──────────────────┘  │
+│       │                                               │
+│       ▼                                               │
+│  ┌──────────┐   ┌──────────┐                          │
+│  │ M7 日报  │──▶│ doorcome │                          │
+│  │ 生成     │   │ 上传     │                          │
+│  └──────────┘   └──────────┘                          │
+│       │                                               │
+│       ▼                                               │
+│  ┌────────────────────────────────────────────────┐   │
+│  │ M8 MCP 服务(Cherry Studio / Claude Code)      │   │
+│  └────────────────────────────────────────────────┘   │
+└──────────────────────────────────────────────────────┘
+
-
-
- ✅ 核心能力 -
    -
  • 英文财经新闻抓取(Crawl4AI,12 源)
  • -
  • 正文提取(trafilatura)
  • -
  • 全文英译中(DeepSeek LLM)
  • -
  • 投资事件抽取 + 美股代码识别
  • -
  • 双语向量知识库(Qdrant 1024维)
  • -
  • 中文语义检索
  • -
  • MCP 服务(Agent 深度研究)
  • -
  • 每日 AI 摘要日报(HTML)
  • -
-
-
- ❌ 本项目不是 -
    -
  • 自动交易系统
  • -
  • 股票预测系统
  • -
  • 投资顾问系统
  • -
-
+
+关键变更:海外服务器已于 2026-07-14 停用。全链路在 Pi 独立运行,通过 Privoxy → SOCKS5 (ss-local) 代理访问海外新闻网站。
+反爬策略:2026-07-23 更新 — 启用 Crawl4AI magic 全自动反检测 + Playwright stealth 模式。investing.com 改用 Google News RSS 代理。
-
- 💡 对标项目:A 股 Deep Research(news/),架构模式可复用。 + +

二、部署指南

+ +

2.1 环境要求

+
    +
  • Python 3.11 + uv
  • +
  • Xvfb(headful Playwright 虚拟显示器)
  • +
  • Shadowsocks-libev + v2ray-plugin(SOCKS5 代理)
  • +
  • Privoxy(HTTP → SOCKS5 转换)
  • +
+ +

2.2 初始化安装

+
+# 1. 克隆仓库
+git clone ssh://gitea:2222/simon/intl_news /home/pi/intlnews
+cd /home/pi/intlnews
+
+# 2. Python 环境
+uv sync
+
+# 3. 环境变量
+cp .env.example .env
+# 填入: DEEPSEEK_API_KEY, DASHSCOPE_API_KEY, QDRANT_URL
+
+# 4. Xvfb 虚拟显示器
+sudo apt install xvfb
+Xvfb :99 -screen 0 1280x1024x24 -ac +extension RANDR &
+
+# 5. Shadowsocks + Privoxy(海外代理)
+sudo apt install shadowsocks-libev privoxy
+# 配置 /etc/shadowsocks-libev/config.json
+# 配置 /etc/privoxy/config: forward-socks5t / 127.0.0.1:1088 .
+sudo systemctl enable --now shadowsocks-libev-local
+sudo systemctl enable --now privoxy
+
+ +

2.3 定时调度(crontab)

+
+# crontab -e 添加:
+0 6  * * * cd /home/pi/intlnews && bash scripts/domestic_full.sh >> logs/full.log 2>&1
+0 12 * * * cd /home/pi/intlnews && bash scripts/domestic_full.sh >> logs/full.log 2>&1
+0 18 * * * cd /home/pi/intlnews && bash scripts/domestic_full.sh >> logs/full.log 2>&1
+0 22 * * * cd /home/pi/intlnews && bash scripts/domestic_full.sh >> logs/full.log 2>&1
+@reboot Xvfb :99 -screen 0 1280x1024x24 -ac +extension RANDR &
+
+ + +

三、操作命令

+ +

3.1 全流程运行

+
+# 一键全流程(M1→M6→日报)
+bash scripts/domestic_full.sh
+
+ +

3.2 M1 抓取

+
+# 抓取全部 13 个源
+bash scripts/domestic_crawl_8g.sh
+
+# 单源调试
+bash scripts/domestic_crawl_8g.sh investing
+bash scripts/domestic_crawl_8g.sh investinglive
+bash scripts/domestic_crawl_8g.sh reuters
+
+ +

3.3 M2→M6 管道

+
+# 完整管道(需要先有 raw 数据)
+bash scripts/pipeline.sh
+
+# 或逐步执行:
+PYTHONPATH=. .venv/bin/python3 -c "from scheduler.pipeline import run_pipeline; run_pipeline('$(date +%Y%m%d)')"
+
+ +

3.4 日报

+
+# 生成当日日报
+PYTHONPATH=. .venv/bin/python3 -c "from scheduler.reporter import generate_report; print(generate_report())"
+
+# 查看日报列表
+ls -lt data/reports/
+
+ +

3.5 日志查看

+
+# 全量日志
+tail -100 logs/full.log
+
+# 筛选指定源
+grep 'investing\|investinglive' logs/full.log | tail -20
+
+ + +

四、新闻源状态

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID策略日产量状态
ReutersreutersGoogle News RSS~30 篇摘要 DataDome
CNBCcnbcCNBC RSS~25 篇正常
MarketWatchmarketwatchRSS + stealth~25 篇正常
Financial TimesftFT RSS~20 篇摘要 付费墙
Yahoo Financeyahoo_financeYahoo RSS~30 篇正常
Investing.cominvestingGoogle News RSS + stealth25 篇已修复 RSS 代理
Seeking AlphaseekingalphaRSS + stealth~20 篇正常
Barron'sbarronsDow Jones RSS + stealth~20 篇正常
WSJwsjDow Jones RSS + stealth~20 篇正常
EconomisteconomistRSS + stealth~15 篇正常
InvestingLiveinvestingliveRSS(全文)25 篇2026-07-23 新增
ZeroHedgezerohedgeFeedBurner RSS~15 篇正常
ForexLiveforexlive已移除 301→investinglive
+ +
+⚠️ 注意:RSS 摘要源的全文依赖 headful Playwright 回退抓取,成功率取决于代理线路质量。investing.com 因 Cloudflare 反爬,全文抓取间歇性失败。
- -

2. 部署拓扑

+ +

五、数据存储

-
┌──────────────────────────────────────────────────┐
-│           Overseas Server (海外)                   │
-│  M1 Crawl4AI 抓取 → data/raw/                     │
-│  每天 4 次打包 → rsync 推送                        │
-│  SSH: <海外服务器>                               │
-│  路径: /opt/intlgrab                               │
-└────────────────────┬─────────────────────────────┘
-                     │ rsync
-                     ▼
-┌──────────────────────────────────────────────────┐
-│           Domestic Server (国内)                   │
-│  M2 正文提取 → M3 去重 → M4 翻译+事件              │
-│  → M5 向量生成 → M6 Qdrant 入库                    │
-│  → M7 调度 + 日报 → M8 MCP 服务                    │
-│  SSH: <国内服务器>                                │
-│  路径: /home/pi/intlnews                           │
-└──────────────────────────────────────────────────┘
+
+/home/pi/intlnews/
+├── data/
+│   ├── raw/{source_id}/{yyyymmdd}/     M1 原始抓取(.html + .md + index.jsonl)
+│   ├── processed/{source_id}/           M2 正文提取结果
+│   ├── dedup/                            M3 去重指纹库(SQLite)
+│   ├── translations/{yyyymmdd}/         M4 翻译+事件抽取(JSONL)
+│   ├── embeddings/{yyyymmdd}/           M5 向量文件(JSONL)
+│   ├── reports/                          M7 日报(HTML)
+│   └── vectorstore/                      M6 Qdrant 本地数据
+├── configs/
+│   ├── sources.yaml                     新闻源定义(13 个源)
+│   ├── system.yaml                      系统参数
+│   └── profiles/8g_headful.yaml         Pi 抓取配置
+├── logs/full.log                        运行日志
+└── prompts/                             LLM Prompt 模板
+
- -

3. 环境配置

+ +

六、MCP 服务

-

3.1 依赖安装

-
cd /home/pi/intlnews
-uv sync
+

M8 模块提供 MCP(Model Context Protocol)服务,供 Cherry Studio / Claude Code / Cursor 等客户端接入。

-

3.2 配置文件

+

6.1 启动

+
+cd /home/pi/intlnews
+PYTHONPATH=. .venv/bin/python3 -m mcp_server.server
+
+

6.2 可用工具

- - - - + + + + + +
文件用途注意
.envAPI Key / URL不入 Git,从 .env.example 复制
configs/system.yaml功能参数模型名、阈值、超时、调度
configs/sources.yaml新闻源定义12 个英文财经源
Tool参数功能
en_news_searchquery, top_k语义搜索知识库
en_news_filtersource_id, date, sentiment按条件筛选事件
en_news_trendingdays获取近期热点
en_news_report获取最新日报
en_news_daily_brief一键生成简报
-

3.3 必需环境变量

- -
# DeepSeek(M4 翻译+事件抽取)
-DEEPSEEK_API_KEY=sk-your-key
-DEEPSEEK_BASE_URL=https://api.deepseek.com
-
-# Qwen(备选 LLM)
-QWEN_API_KEY=sk-your-key
-QWEN_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
-
-# DashScope(M5 向量生成)
-DASHSCOPE_API_KEY=sk-your-key
-
-# Qdrant(留空使用本地文件模式)
-QDRANT_URL=http://localhost:6333
-QDRANT_API_KEY=
- -

3.4 关键配置项

- -
# configs/system.yaml(关键项)
-crawler.max_memory_mb: 1800       # 内存上限
-dedup.hamming_distance_threshold: 3
-dedup.simhash_window_days: 30
-llm.provider: "deepseek"
-llm.deepseek_model: "deepseek-v4-flash"
-llm.concurrency: 3
-embedding.dashscope_model: "text-embedding-v3"
-embedding.dimension: 1024
-qdrant.collection: "en_finance_news"
-schedule.day_cutoff_hour: 6       # 新闻日切分点
- - -

4. CLI 命令参考

- -

所有命令通过 uv run en-news 执行:

+ +

七、配置参考

+

7.1 环境变量(.env)

- - - - - - - - - - - + + + +
命令Milestone功能
crawlM1抓取英文财经新闻
extractM2正文提取
dedupM3三层去重
translateM4翻译 + 事件抽取
embedM5向量生成
indexM6Qdrant 入库
search <query>M6语义检索
pipelineM7一键全链路 M2→M6
reportM7日报生成
mcp-serverM8启动 MCP 服务
变量用途
DEEPSEEK_API_KEYDeepSeek LLM(翻译+事件抽取)
DASHSCOPE_API_KEYDashScope Embedding(向量生成)
QDRANT_URLQdrant 服务地址
-
# 常用选项
-uv run en-news crawl --source forexlive          # 指定源
-uv run en-news search "美联储" --top-k 5          # 指定返回数
-uv run en-news index --recreate                   # 重建 Qdrant
-uv run en-news pipeline --skip-report             # 跳过日报
+

7.2 新闻源配置(sources.yaml)

+

每个源包含:id, name, homepage, rss_url, article_url_pattern, anti_bot_mode 等。

+

新增源时参考现有格式,启用/禁用通过 enabled: true/false

- -

5. M1 — 新闻抓取

+

7.3 Profile 配置

+

Pi 服务器使用 8g_headful profile(环境变量 EN_NEWS_PROFILE),通过 Privoxy HTTP 代理访问海外网站。

+
    +
  • proxy.enabled: true — 启用 HTTP 代理
  • +
  • crawler.headful: true — 有头浏览器 + Xvfb
  • +
  • crawler.magic: true — Crawl4AI 全自动反检测
  • +
  • crawler.enable_stealth: true — Playwright stealth
  • +
-

5.1 手动抓取

-
uv run en-news crawl               # 全部源
-uv run en-news crawl -s forexlive  # 指定源
- -

5.2 12 个英文财经源

+ +

八、常见排障

- - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +
源 ID名称类型
reutersReuters综合财经
cnbcCNBC市场新闻
marketwatchMarketWatch市场数据
ftFinancial Times财经深度
yahoo_financeYahoo Finance综合
investingInvesting.com全球市场
seekingalphaSeeking Alpha投资分析
barronsBarrons市场评论
wsjWSJ综合财经
economistThe Economist经济分析
forexliveForexLive外汇新闻
zerohedgeZeroHedge另类财经
现象排查步骤
抓取 0 篇 + 1. 检查 logs/full.log 看 RSS/Web 错误
+ 2. bash scripts/domestic_crawl_8g.sh <source_id> 单源测试
+ 3. 检查代理是否正常:curl -I --proxy 127.0.0.1:3128 https://example.com +
RSS 超时 + 1. 确认 Shadowsocks 和 Privoxy 在运行
+ 2. systemctl status shadowsocks-libev-local privoxy
+ 3. 环境变量 HTTP_PROXY 是否设置 +
Cloudflare 拦截 + 1. 已启用 magic + stealth 自动反检测
+ 2. 仍失败则需更换代理 IP(数据中心 IP 被标记)
+ 3. 改用 Google News RSS 代理(已为 investing/reuters 启用) +
日报无数据 + 1. 检查 data/translations/{date}/ 是否有 JSONL
+ 2. 检查 data/embeddings/{date}/ 是否有向量 +
MCP 连接失败 + 1. 确认 MCP 服务进程在运行
+ 2. 检查端口监听:ss -tlnp | grep 8080 +
-

5.3 增量抓取机制

- -

抓取采用两层增量确保不重复下载和存储:

+ +

九、变更记录

- - - + + + + + + + + +
层级位置机制
抓取层_extract_article_urls读取当日 index.jsonl 中已抓取的 url_hash,跳过已存在的 URL,不重复下载
存储层write_index_jsonl追加写入前再次检查 url_hash,已存在则跳过
日期变更
2026-07-23 + 反爬策略增强:
+ - crawler.py: magic/stealth/--disable-webrtc/remove_consent_popups
+ - rss_crawler.py: httpx 代理支持
+ - investing.com: Google News RSS 代理(绕过 Cloudflare)
+ - forexlive → investinglive 迁移(域名已 301 重定向) +
2026-07-14 + - 海外服务器停用,Pi 全链路独立运行
+ - 8g_headful profile 新增(headful + HTTP 代理)
+ - Shadowsocks + Privoxy 部署 +
-

同一天内多次执行 crawl,只有新文章才会被下载和存储。

- -

5.4 产物

-
data/raw/{source_id}/{YYYYMMDD}/
-├── {url_hash}.html     # 原始 HTML
-├── {url_hash}.md       # Crawl4AI Markdown
-└── index.jsonl         # 文章索引
- -

5.5 反爬策略

- -

部分新闻源有反爬保护(如 DataDome)。系统支持三种策略,按优先级自动选择:

- - - - - - -
优先级策略配置说明
1RSS 抓取rss_url通过 Feed 获取文章,完全绕过反爬 ✅ MarketWatch
2Stealthanti_bot_mode: "stealth"隐藏 webdriver 特征
3Headfulanti_bot_mode: "headful"非 headless 浏览器,最像真人
- -

已验证:MarketWatch RSS 10/10 ✅ · WSJ RSS 20/20 ✅ · ForexLive 17/17 ✅ · ZeroHedge 15/15 ✅ · Barron's RSS 10/10 ✅ · Reuters ⚠️ · SeekingAlpha ⚠️

- - -

6. M2 — 正文提取

- -
uv run en-news extract              # 全部源
-uv run en-news extract -s forexlive # 指定源
- -

技术方案:优先 Crawl4AI Markdown → 回退 trafilatura(英文优化)。最小正文 50 词。

- -
data/processed/{source_id}/{YYYYMMDD}/
-└── {url_hash}.json     # ProcessedArticle
- - -

7. M3 — 三层去重

- -
uv run en-news dedup
- - - - - - -
层级方法说明
L1URL Hash完全相同 URL
L2内容 HashSHA1[:16] 去标点空白后匹配
L3SimHash字符 3-gram,汉明距离 ≤ 3,30 天窗口
- -
data/dedup/fingerprints.sqlite3   # SQLite 指纹库
-data/deduped/{YYYYMMDD}/uniques/  # 唯一文章
- - -

8. M4 — 翻译 + 事件抽取

- -
uv run en-news translate
- -
- ⚙️ 技术规格 -
    -
  • Provider: DeepSeek v4-flash(默认)/ Qwen 备选
  • -
  • 单次调用完成翻译+抽取,节省 token
  • -
  • 并发 3 线程,3 次指数退避重试
  • -
  • 正文截断 8000 字符
  • -
+ -

14 种事件类型

-

- 财报披露 - 并购收购 - 产品发布 - 监管政策 - 宏观经济 - 央行决议 - 行业动态 - 技术突破 - 高管变动 - 诉讼法律 - 市场异动 - 地缘政治 - 大宗商品 - 外汇波动 -

- -

情绪标签

-

- 🟢 positive 利好 - ⚪ neutral 中性 - 🔴 negative 利空 -

- - -

9. M5 — 向量生成

- -
uv run en-news embed
- -

技术方案:DashScope text-embedding-v3,1024 维。嵌入文本 = 中文标题 + 事件标签 + 中文正文(4000 字符截断)。

- -
data/embeddings/{YYYYMMDD}/
-└── {url_hash}.json     # EmbeddingResult (1024 floats)
- - -

10. M6 — Qdrant 入库与检索

- -

入库

-
uv run en-news index              # 增量入库
-uv run en-news index --recreate   # 重建 collection
- -

语义搜索

-
uv run en-news search "美联储利率决议"
-uv run en-news search "伊朗霍尔木兹海峡" --top-k 5
- -
- 📦 Qdrant 规格 -
    -
  • 模式: 本地文件(data/qdrant_storage/),无需 Docker
  • -
  • Collection: en_finance_news
  • -
  • 距离: Cosine · 维度: 1024
  • -
  • Payload: title / title_zh / url / events / content_zh_preview
  • -
- - -

11. M7 — 全链路管道 + 日报

- -

手动全链路运行(完整流程)

- -

当需要手工执行完整的数据处理流程时,按顺序执行:

- -
# 步骤 1(海外): 抓取英文财经新闻
-ssh <海外服务器> "cd /opt/intlgrab && uv run en-news crawl"
-
-# 步骤 2(海外): 打包 raw 数据
-ssh <海外服务器> "cd /opt/intlgrab && bash scripts/overseas_pack.sh"
-
-# 步骤 3(国内): 拉取海外数据
-cd /home/pi/intlnews && bash scripts/domestic_sync.sh
-
-# 步骤 4: 一键全链路 M2→M6 + 日报
-cd /home/pi/intlnews && uv run en-news pipeline
- -

也可以分步执行(适合调试):

- -
uv run en-news extract              # M2: 正文提取
-uv run en-news dedup                # M3: 三层去重
-uv run en-news translate            # M4: 翻译 + 事件抽取
-uv run en-news embed                # M5: 向量生成
-uv run en-news index                # M6: Qdrant 入库
-uv run en-news report               # 日报生成
- -

一键管道(自动)

-
uv run en-news pipeline               # 全链路 M2→M6 + 日报
-uv run en-news pipeline --skip-report  # 跳过日报
-uv run en-news report                  # 仅日报
- -

管道流程

-
- M2 extract - - M3 dedup - - M4 translate - - M5 embed - - M6 index - - 📰 日报 -
- -
- ⚠️ 降级策略:每步失败记录日志但不阻断后续步骤。 -
- -

HTML 日报五板块

-
    -
  1. 🤖 AI 摘要 — LLM 根据 important≥4 事件生成要点总结
  2. -
  3. 🔥 重要事件 — 事件表格(情绪/重要度/摘要/链接)
  4. -
  5. 📊 数据总览 — M1→M6 管道统计数字
  6. -
  7. 📈 情绪分布 — 利好/利空/中性比例条
  8. -
  9. 📋 事件类型 TOP 10
  10. -
- -

本地: data/reports/intl_news_daily_{YYYYMMDD}.html

-

线上: 自动上传到 https://echart.doorcome.cn/research/{YYYYMMDD}/

-

上传配置在 configs/system.yamlreport.upload_host / report.upload_path

- - -

12. M8 — MCP 服务

- -

启动

-
uv run en-news mcp-server
- -

5 个 MCP Tool

- - - - - - - - -
Tool功能示例调用
search_news语义检索新闻search_news("美联储利率决议")
search_by_stock美股代码检索search_by_stock("AAPL")
search_by_sentiment情绪过滤检索search_by_sentiment("加息", sentiment="negative")
get_today_events当日重要事件get_today_events(importance_min=4)
get_stats系统统计get_stats()
- -

Claude Code MCP 配置

-
{
-  "mcpServers": {
-    "intl-news": {
-      "command": "uv",
-      "args": ["run", "en-news", "mcp-server"],
-      "cwd": "/home/pi/intlnews"
-    }
-  }
-}
- - -

13. 数据目录结构

- -
data/
-├── raw/                         # M1: 原始抓取
-│   └── {source_id}/{YYYYMMDD}/
-├── processed/                   # M2: 正文提取
-│   └── {source_id}/{YYYYMMDD}/
-├── dedup/                       # M3: 指纹库 + 去重结果
-│   ├── fingerprints.sqlite3
-│   └── {YYYYMMDD}/uniques/
-├── events/                      # M4: 翻译+事件
-│   └── {YYYYMMDD}/
-├── embeddings/                  # M5: 向量
-│   └── {YYYYMMDD}/
-├── qdrant_storage/              # M6: Qdrant 本地存储
-└── reports/                     # M7: 日报
-    └── intl_news_daily_{YYYYMMDD}.html
- - -

14. 定时任务

- -

时间线

- - - - - - - - - - - -
时间服务器动作
05:55海外打包 data/raw/
06:30国内拉取 → M2→M6 管道 → 📰 日报
11:55海外打包
12:00国内拉取 → 管道
17:55海外打包
18:00国内拉取 → 管道
21:55海外打包
22:00国内拉取 → 管道 → 📰 日报
- -

新闻日定义

-

切分点 day_cutoff_hour: 6。当天 06:00 至次日 05:59 属于同一个新闻日。

- - -

15. 常见问题

- -

Q: 如何新增新闻源?

-

编辑 configs/sources.yaml

-
- id: "new_source"
-  name: "New Source Name"
-  enabled: true
-  homepage: "https://example.com/finance/"
-  article_url_pattern: "/news/[^/]+/"
-  js_render: false
-  max_articles_per_run: 30
- -

Q: 翻译质量不好怎么办?

-
    -
  1. 调整 configs/system.yamlllm.temperature(降低更保守)
  2. -
  3. 编辑 prompts/translation_and_extraction.md 优化 Prompt
  4. -
  5. 切换 Provider:llm.provider: "qwen"
  6. -
- -

Q: Qdrant 检索太慢?

-

本地文件模式 17 条 < 0.01s,足够快。数据量 > 10 万条时切换到 Docker 模式。

- -

Q: 如何查看日志?

-
tail -f logs/sync.log
-tail -f logs/crawler.log   # 海外
- -

Q: 数据如何备份?

-
tar czf intlnews_backup_$(date +%Y%m%d).tar.gz data/
- - -

附录:技术栈

- - - - - - - - - - - - - - - -
组件技术
语言Python 3.11
包管理uv + pyproject.toml
抓取Crawl4AI + Playwright
正文提取trafilatura
去重SimHash + SQLite
LLMDeepSeek v4-flash(OpenAI SDK)
EmbeddingDashScope text-embedding-v3
向量库Qdrant(本地文件模式)
MCPFastMCP
CLITyper
配置YAML + .env
数据模型Pydantic v2
- -
- -
-
-

国际财经 Deep Research 私有投研平台 · 使用手册 v1.0 · 2026-06-21

-
-
- diff --git a/intlnews_usage.html b/intlnews_usage.html deleted file mode 100644 index 5720f14..0000000 --- a/intlnews_usage.html +++ /dev/null @@ -1,390 +0,0 @@ - - - - - -IntlNews 操作手册 - - - -
- -

📰 IntlNews — 国际财经新闻 Deep Research

-

最后更新:2026-07-23 | 运行服务器:pi@192.168.1.160

- -
-项目定位:面向国际财经新闻的私有化 Deep Research 平台。抓取英文财经新闻 → 英译中 → 事件抽取 → 向量入库 → MCP Agent 深度研究。 -
- - -

一、系统架构

-Arch - -
-┌──────────────────────────────────────────────────────┐
-│                   Pi 4 (8GB)                          │
-│  ┌──────────┐   ┌──────────┐   ┌──────────────────┐  │
-│  │ M1 抓取   │──▶│ M2 正文  │──▶│ M3 三层去重      │  │
-│  │ headful   │   │ trafilat.│   │ URL/Content/SimH │  │
-│  │ Playwright│   │          │   │                  │  │
-│  │ + HTTP 代 │   │          │   │                  │  │
-│  │ 理(海外)  │   │          │   │                  │  │
-│  └──────────┘   └──────────┘   └────────┬─────────┘  │
-│                                         ▼            │
-│  ┌──────────┐   ┌──────────┐   ┌──────────────────┐  │
-│  │ M6 Qdrant│◀──│ M5 向量  │◀──│ M4 翻译+事件抽取  │  │
-│  │ 入库     │   │ DashScope│   │ DeepSeek v4      │  │
-│  └────┬─────┘   └──────────┘   └──────────────────┘  │
-│       │                                               │
-│       ▼                                               │
-│  ┌──────────┐   ┌──────────┐                          │
-│  │ M7 日报  │──▶│ doorcome │                          │
-│  │ 生成     │   │ 上传     │                          │
-│  └──────────┘   └──────────┘                          │
-│       │                                               │
-│       ▼                                               │
-│  ┌────────────────────────────────────────────────┐   │
-│  │ M8 MCP 服务(Cherry Studio / Claude Code)      │   │
-│  └────────────────────────────────────────────────┘   │
-└──────────────────────────────────────────────────────┘
-
- -
-关键变更:海外服务器已于 2026-07-14 停用。全链路在 Pi 独立运行,通过 Privoxy → SOCKS5 (ss-local) 代理访问海外新闻网站。
-反爬策略:2026-07-23 更新 — 启用 Crawl4AI magic 全自动反检测 + Playwright stealth 模式。investing.com 改用 Google News RSS 代理。 -
- - -

二、部署指南

- -

2.1 环境要求

-
    -
  • Python 3.11 + uv
  • -
  • Xvfb(headful Playwright 虚拟显示器)
  • -
  • Shadowsocks-libev + v2ray-plugin(SOCKS5 代理)
  • -
  • Privoxy(HTTP → SOCKS5 转换)
  • -
- -

2.2 初始化安装

-
-# 1. 克隆仓库
-git clone ssh://gitea:2222/simon/intl_news /home/pi/intlnews
-cd /home/pi/intlnews
-
-# 2. Python 环境
-uv sync
-
-# 3. 环境变量
-cp .env.example .env
-# 填入: DEEPSEEK_API_KEY, DASHSCOPE_API_KEY, QDRANT_URL
-
-# 4. Xvfb 虚拟显示器
-sudo apt install xvfb
-Xvfb :99 -screen 0 1280x1024x24 -ac +extension RANDR &
-
-# 5. Shadowsocks + Privoxy(海外代理)
-sudo apt install shadowsocks-libev privoxy
-# 配置 /etc/shadowsocks-libev/config.json
-# 配置 /etc/privoxy/config: forward-socks5t / 127.0.0.1:1088 .
-sudo systemctl enable --now shadowsocks-libev-local
-sudo systemctl enable --now privoxy
-
- -

2.3 定时调度(crontab)

-
-# crontab -e 添加:
-0 6  * * * cd /home/pi/intlnews && bash scripts/domestic_full.sh >> logs/full.log 2>&1
-0 12 * * * cd /home/pi/intlnews && bash scripts/domestic_full.sh >> logs/full.log 2>&1
-0 18 * * * cd /home/pi/intlnews && bash scripts/domestic_full.sh >> logs/full.log 2>&1
-0 22 * * * cd /home/pi/intlnews && bash scripts/domestic_full.sh >> logs/full.log 2>&1
-@reboot Xvfb :99 -screen 0 1280x1024x24 -ac +extension RANDR &
-
- - -

三、操作命令

- -

3.1 全流程运行

-
-# 一键全流程(M1→M6→日报)
-bash scripts/domestic_full.sh
-
- -

3.2 M1 抓取

-
-# 抓取全部 13 个源
-bash scripts/domestic_crawl_8g.sh
-
-# 单源调试
-bash scripts/domestic_crawl_8g.sh investing
-bash scripts/domestic_crawl_8g.sh investinglive
-bash scripts/domestic_crawl_8g.sh reuters
-
- -

3.3 M2→M6 管道

-
-# 完整管道(需要先有 raw 数据)
-bash scripts/pipeline.sh
-
-# 或逐步执行:
-PYTHONPATH=. .venv/bin/python3 -c "from scheduler.pipeline import run_pipeline; run_pipeline('$(date +%Y%m%d)')"
-
- -

3.4 日报

-
-# 生成当日日报
-PYTHONPATH=. .venv/bin/python3 -c "from scheduler.reporter import generate_report; print(generate_report())"
-
-# 查看日报列表
-ls -lt data/reports/
-
- -

3.5 日志查看

-
-# 全量日志
-tail -100 logs/full.log
-
-# 筛选指定源
-grep 'investing\|investinglive' logs/full.log | tail -20
-
- - -

四、新闻源状态

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ID策略日产量状态
ReutersreutersGoogle News RSS~30 篇摘要 DataDome
CNBCcnbcCNBC RSS~25 篇正常
MarketWatchmarketwatchRSS + stealth~25 篇正常
Financial TimesftFT RSS~20 篇摘要 付费墙
Yahoo Financeyahoo_financeYahoo RSS~30 篇正常
Investing.cominvestingGoogle News RSS + stealth25 篇已修复 RSS 代理
Seeking AlphaseekingalphaRSS + stealth~20 篇正常
Barron'sbarronsDow Jones RSS + stealth~20 篇正常
WSJwsjDow Jones RSS + stealth~20 篇正常
EconomisteconomistRSS + stealth~15 篇正常
InvestingLiveinvestingliveRSS(全文)25 篇2026-07-23 新增
ZeroHedgezerohedgeFeedBurner RSS~15 篇正常
ForexLiveforexlive已移除 301→investinglive
- -
-⚠️ 注意:RSS 摘要源的全文依赖 headful Playwright 回退抓取,成功率取决于代理线路质量。investing.com 因 Cloudflare 反爬,全文抓取间歇性失败。 -
- - -

五、数据存储

- -
-/home/pi/intlnews/
-├── data/
-│   ├── raw/{source_id}/{yyyymmdd}/     M1 原始抓取(.html + .md + index.jsonl)
-│   ├── processed/{source_id}/           M2 正文提取结果
-│   ├── dedup/                            M3 去重指纹库(SQLite)
-│   ├── translations/{yyyymmdd}/         M4 翻译+事件抽取(JSONL)
-│   ├── embeddings/{yyyymmdd}/           M5 向量文件(JSONL)
-│   ├── reports/                          M7 日报(HTML)
-│   └── vectorstore/                      M6 Qdrant 本地数据
-├── configs/
-│   ├── sources.yaml                     新闻源定义(13 个源)
-│   ├── system.yaml                      系统参数
-│   └── profiles/8g_headful.yaml         Pi 抓取配置
-├── logs/full.log                        运行日志
-└── prompts/                             LLM Prompt 模板
-
- - -

六、MCP 服务

- -

M8 模块提供 MCP(Model Context Protocol)服务,供 Cherry Studio / Claude Code / Cursor 等客户端接入。

- -

6.1 启动

-
-cd /home/pi/intlnews
-PYTHONPATH=. .venv/bin/python3 -m mcp_server.server
-
- -

6.2 可用工具

- - - - - - - -
Tool参数功能
en_news_searchquery, top_k语义搜索知识库
en_news_filtersource_id, date, sentiment按条件筛选事件
en_news_trendingdays获取近期热点
en_news_report获取最新日报
en_news_daily_brief一键生成简报
- - -

七、配置参考

- -

7.1 环境变量(.env)

- - - - - -
变量用途
DEEPSEEK_API_KEYDeepSeek LLM(翻译+事件抽取)
DASHSCOPE_API_KEYDashScope Embedding(向量生成)
QDRANT_URLQdrant 服务地址
- -

7.2 新闻源配置(sources.yaml)

-

每个源包含:id, name, homepage, rss_url, article_url_pattern, anti_bot_mode 等。

-

新增源时参考现有格式,启用/禁用通过 enabled: true/false

- -

7.3 Profile 配置

-

Pi 服务器使用 8g_headful profile(环境变量 EN_NEWS_PROFILE),通过 Privoxy HTTP 代理访问海外网站。

-
    -
  • proxy.enabled: true — 启用 HTTP 代理
  • -
  • crawler.headful: true — 有头浏览器 + Xvfb
  • -
  • crawler.magic: true — Crawl4AI 全自动反检测
  • -
  • crawler.enable_stealth: true — Playwright stealth
  • -
- - -

八、常见排障

- - - - - - - - - - - - - - - - - - - - - - - -
现象排查步骤
抓取 0 篇 - 1. 检查 logs/full.log 看 RSS/Web 错误
- 2. bash scripts/domestic_crawl_8g.sh <source_id> 单源测试
- 3. 检查代理是否正常:curl -I --proxy 127.0.0.1:3128 https://example.com -
RSS 超时 - 1. 确认 Shadowsocks 和 Privoxy 在运行
- 2. systemctl status shadowsocks-libev-local privoxy
- 3. 环境变量 HTTP_PROXY 是否设置 -
Cloudflare 拦截 - 1. 已启用 magic + stealth 自动反检测
- 2. 仍失败则需更换代理 IP(数据中心 IP 被标记)
- 3. 改用 Google News RSS 代理(已为 investing/reuters 启用) -
日报无数据 - 1. 检查 data/translations/{date}/ 是否有 JSONL
- 2. 检查 data/embeddings/{date}/ 是否有向量 -
MCP 连接失败 - 1. 确认 MCP 服务进程在运行
- 2. 检查端口监听:ss -tlnp | grep 8080 -
- - -

九、变更记录

- - - - - - - - - - - -
日期变更
2026-07-23 - 反爬策略增强:
- - crawler.py: magic/stealth/--disable-webrtc/remove_consent_popups
- - rss_crawler.py: httpx 代理支持
- - investing.com: Google News RSS 代理(绕过 Cloudflare)
- - forexlive → investinglive 迁移(域名已 301 重定向) -
2026-07-14 - - 海外服务器停用,Pi 全链路独立运行
- - 8g_headful profile 新增(headful + HTTP 代理)
- - Shadowsocks + Privoxy 部署 -
- - - -
- -