Files
intl_news/docs/llm-models.md
T
simon c1ab751d95 feat: 日报改为每日一次 + 新增 LLM 使用/成本/缓存文档
- domestic_full.sh / pipeline.sh 新增 --no-report 参数:跳过日报生成,
  保持 M1 抓取 + M2→M6 管道不变,用于 12:00/18:00 只抓不生成日报
- crontab: 07:00 全量含日报,12:00/18:00 --no-report(日报每日一次,降低 LLM 费用)
- docs/llm-models.md: 各 LLM 调用点分别用的 provider/model 事实清单
- docs/llm-cost-analysis.md: 真实 token 消耗与费用构成、降本建议
- docs/llm-cache-optimization.md: DeepSeek 上下文缓存机制与命中率提升设计
- docs/README.md 增加上述三个文档索引
2026-09-04 10:38:33 +08:00

84 lines
4.5 KiB
Markdown
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.
# LLM 使用点与模型对照清单
> 本文档是「各使用大模型(LLM)的地方分别用哪个 provider / 哪个模型」的**唯一事实源**。
> 数据来源:当前 `configs/system.yaml` + 已生成 `data/events/*/` 的实际调用记录(provider/model 字段)。
## 一、结论速览(当前生效)
| 场景 | 使用位置 | Provider | 模型 | 计费账户 |
|------|----------|----------|------|----------|
| M4 翻译 + 事件抽取 | `llm/pipeline.py` → `llm/extractor.py` | **DeepSeek** | `deepseek-v4-flash` | DeepSeek |
| M7 日报 AI 摘要 | `scheduler/reporter.py::_call_llm_simple` | **DeepSeek** | `deepseek-v4-flash` | DeepSeek |
| M5 向量生成 | `embedding/pipeline.py` | **DashScope** | `text-embedding-v3` | 阿里云百炼 |
| M6 入库向量/MCP 检索查询向量化 | `vectorstore/pipeline.py`、`mcp_server/server.py` | **DashScope** | `text-embedding-v3` | 阿里云百炼 |
> ⚠️ **常见误区**:M4 翻译**用的就是 DeepSeek**(不是 Qwen/DashScope)。有人会误记成「翻译用的是别的模型」,很可能是因为 **M5/M6 的向量化走的是 DashScope(阿里云百炼)**,而翻译走的是 DeepSeek——两者账户 / 账单是分开的。已在 2026-08-21 / 08-22 / 08-30 生成的 `data/events/*/xxx.json` 中核实 87 条记录的 `provider=deepseek`、`model=deepseek-v4-flash`。
## 二、各调用点详情
### 1. M4 翻译 + 事件抽取(DeepSeek)
- **入口**:`llm/pipeline.py::translate_all_deduped` → `llm/extractor.py::translate_and_extract`
- **配置来源**:`configs/system.yaml` → `llm_scenes.translation`
```yaml
llm_scenes:
translation:
provider: "deepseek"
model: "deepseek-v4-flash"
temperature: 0.1
max_tokens: 8192
```
- **API 密钥**:`DEEPSEEK_API_KEY`、`DEEPSEEK_BASE_URL=https://api.deepseek.com`(`.env`)
- **说明**:单篇独立调用,全文英译中 + 投资事件抽取合并一次输出(JSON)。是全项目 token 消耗与费用的绝对主力。
### 2. M7 日报 AI 摘要(DeepSeek)
- **入口**:`scheduler/reporter.py::_call_llm_simple`(`_generate_ai_summary`)
- **配置来源**:`configs/system.yaml` → `llm_scenes.daily_report`
```yaml
llm_scenes:
daily_report:
provider: "deepseek"
model: "deepseek-v4-flash"
temperature: 0.3
max_tokens: 1500
```
- **说明**:高重要度事件分批(≤10 条/批)生成各批摘要后合并;截断时以更高 max_tokens 重试;全部失败走规则兜底。
### 3. M5 向量生成(DashScope)
- **入口**:`embedding/pipeline.py::embed_all_events`
- **配置来源**:`configs/system.yaml` → `embedding` 段
```yaml
embedding:
provider: "dashscope"
dashscope_model: "text-embedding-v3"
dimension: 1024
batch_size: 10
max_attempts: 3
timeout_sec: 30
```
- **API 密钥**:`QWEN_API_KEY` / `DASHSCOPE_API_KEY`、`QWEN_BASE_URL`(`.env`)
- **说明**:批量向量化,输出 dim=1024。费用极低,不计入 DeepSeek 账单。
### 4. M6 入库 / MCP 检索查询向量化(DashScope)
- **入口**:`vectorstore/pipeline.py::search_news`(入库 payload 由 M5 结果构建)、`mcp_server/server.py::search_news`
- **配置来源**:同上 `embedding` 段(入库向量与查询向量必须同模型,故共用一份配置)。
## 三、不使用大模型的环节
- M1 抓取(Playwright/Crawl4AI)、M2 正文提取(trafilatura)、M3 去重(SimHash/指纹库)、M6 Qdrant upsert、M9 MySQL 写入 —— **均不调用 LLM / embedding**。
## 四、切换 provider / 模型时须知
1. **翻译 / 摘要可选 DeepSeek 或 Qwen**:`llm_scenes.<场景>.provider` 设为 `deepseek` 或 `qwen`,同时确认对应 `.env` 里有对应 `*_API_KEY`/`*_BASE_URL`。`llm/client.py::load_llm_config` 支持 provider 覆盖。
2. **Embedding 不能随便切**:Qdrant `en_finance_news` 入库向量与检索向量必须同模型。切换模型必须 `recreate` collection 并全量回灌(`ingest_all_embeddings(recreate=True)`),否则跨模型向量无法比较。
3. **改配置后建议**:改 `provider/model` 后重跑一次管道确认 `data/events/*/` 的 `provider/model` 字段一致,避免两套模型混用。
## 五、参考
- `configs/system.yaml`(`llm` / `llm_scenes` / `embedding`)
- [docs/llm-cost-analysis.md](llm-cost-analysis.md)(成本构成与降本建议)
- [docs/configuration.md](configuration.md) 第 3.5/3.6 节(配置说明)
- [DeepSeek 官方模型与价格](https://api-docs.deepseek.com/zh-cn/quick_start/pricing/)