- 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 增加上述三个文档索引
84 lines
4.5 KiB
Markdown
84 lines
4.5 KiB
Markdown
# 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/) |