feat: AI 模型按场景独立配置(llm_scenes)+ 去重多来源合并

- system.yaml 新增 llm_scenes(translation / daily_report,含用途/方法/模型要求说明)
- load_llm_config(scene=...) 场景覆盖;日报摘要 temperature 0.3 硬编码 → 配置
- M3 去重:唯一篇记录 source_ids(跨源重复合并,首个来源为 source_id)
- source_ids 经翻译透传至 events,日报事件 source 多来源拼接展示(≤3 个)
- 已部署 pi5:merge 实证 10 源合并;日报 report_id=224 正常入库
This commit is contained in:
2026-08-12 09:56:55 +08:00
parent 9aa44e610d
commit c72a5ed13a
13 changed files with 331 additions and 20 deletions
+41 -3
View File
@@ -40,18 +40,56 @@ dedup:
simhash_window_days: 30
min_content_length: 100
# ── LLM 翻译+事件抽取 ────────────────────────────────
# ── LLM 默认配置(所有 LLM 场景的兜底)────────────────
# 按场景独立配置见下方 llm_scenes 段;场景未声明的字段回退到本段。
llm:
provider: "deepseek"
deepseek_model: "deepseek-v4-flash"
qwen_model: "qwen-plus"
timeout_sec: 60
max_attempts: 3 # 单篇总尝试次数(含首次),失败后指数退避重试;日报 AI 摘要同用此值
max_attempts: 3 # 单篇总尝试次数(含首次),失败后指数退避重试
max_tokens: 8192
temperature: 0.1
concurrency: 3
# ── Embedding 向量化 ────────────────────────────────
# ── LLM 场景配置(按场景独立指定大模型类型与参数)──────
# 每个场景可覆盖 provider / model / temperature / max_tokens / max_attempts / timeout_sec;
# 场景内统一用 "model" 键指定模型(优先于 llm 段的 deepseek_model / qwen_model)。
llm_scenes:
translation:
# M4:全文英译中 + 投资事件抽取(单次 LLM 调用合并输出)
provider: "deepseek"
model: "deepseek-v4-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"