财经新闻摘要智能体 (News Digest Agent)
从多个中文财经来源自动采集快讯,通过 LLM 进行结构化提取与情感分析,生成每日新闻日报(Markdown + 独立 HTML)。
能力边界
支持的能力
- 从 4 个中文财经源抓取快讯:财联社(cls.cn)、东方财富(eastmoney.com)、新浪财经、36氪
- 每个源独立解析器:优先 API 接口,失败自动降级到 HTML 解析,再不行用通用回退解析器
- LLM 驱动的结构化摘要:提取实体(entity)、关键数字、事件类型、影响方向、中文摘要(50-100字)、关键词、重要性评分(1-5)
- 情感分析:每篇文章输出情感标签(positive/negative/neutral)、置信度、数值评分
- 生成 Markdown 日报:按"重要头条/市场动态/政策动态/公司动态"分版块,含情绪概览和热门关键词
- 生成独立 HTML 日报:内嵌 CSS,含情绪饼图(conic-gradient)、情绪评分、关键词云、实体排行
- 输出 JSON 结构化数据,供下游消费
- 30 分钟缓存(TTL),避免重复请求
- CLI 命令:
today(今日日报)、date YYYY-MM-DD(指定日期)、fetch(仅抓取)、summarize(对已缓存新闻做摘要)
不支持的能力
- 不支持实时流式推送,需要手动运行或自行配置 cron
- 不支持自定义新闻源(需修改 sources.yaml 和添加解析器代码)
- 不支持英文新闻源,所有解析器和 LLM prompt 均为中文财经场景设计
- 不生成可视化图表文件(PNG/SVG),仅在 HTML 中用 CSS 绘制饼图和关键词云
- 情感分析依赖 LLM 语义判断,非基于金融时间序列模型,波动率/技术指标不在此范围内
- 不支持 GPT 以外的模型直接切换非 OpenAI 兼容 API(但任何兼容
/v1/chat/completions的端点均可使用) - 无 Web UI,纯 CLI
触发条件
当用户提出以下意图时调用此 Skill:
- "帮我生成今天的财经新闻摘要"
- "抓取财联社/东方财富的最新快讯"
- "分析当前市场情绪"
- "每日财经日报"
- "金融新闻聚合" / "财经新闻监控"
- "汇总一下最近的财经热点"
使用示例
# 生成今日日报(完整流程:抓取→摘要→情感→生成)
python run.py today
# 生成指定日期的日报
python run.py date 2026-07-05
# 仅抓取新闻(不生成日报)
python run.py fetch
# 对缓存新闻进行摘要和生成日报
python run.py summarize
默认 LLM:Ollama qwen2.5:7b (localhost:11434)。可通过 config/sources.yaml 切换到 OpenAI 兼容 API。
配置要点 (config/sources.yaml)
llm:
provider: "ollama" # 或 "openai"
model: "qwen2.5:7b"
base_url: "http://localhost:11434/v1"
cache:
ttl_minutes: 30
digest:
max_articles: 100
formats: [markdown, html]
输出示例(HTML 日报结构)
┌─────────────────────────────────────┐
│ 每日财经新闻摘要 │
│ 2026-07-06 | 187篇文章 │
├─────────────────────────────────────┤
│ 情绪评分: 0.23 (偏乐观) [饼图] │
│ 利好:82 利空:45 中性:60 │
├─────────────────────────────────────┤
│ 热门关键词: AI芯片, 降准, 新能源... │
│ 热门实体: 华为(15), 宁德时代(12)... │
├─────────────────────────────────────┤
│ [重要头条] x10 篇 │
│ [+/-/*] 标题 | 摘要 | 来源 │
├─────────────────────────────────────┤
│ [市场动态] x15 篇 / [政策动态] │
│ [公司动态] x15 篇 │
└─────────────────────────────────────┘
FAQ
Q1: 如何更换 LLM 模型?
修改 config/sources.yaml 中 llm 节的 model、base_url、api_key。只要 API 兼容 OpenAI /v1/chat/completions 格式即可。
Q2: 为什么某来源抓不到数据?
该源可能触发反爬机制。每个解析器都有 API→HTML→回退三级降级路径,查看日志可定位失败层级。可尝试增加 update_interval_min 降低请求频率。
Q3: 摘要质量不好怎么办?
调整 config/sources.yaml 中 llm.temperature(当前 0.1,偏保守),或更换更强的基础模型。系统 prompt 在 news_digest/summarizer.py 的 SUMMARIZATION_SYSTEM_PROMPT 中,可按需修改。
Q4: 如何添加新数据源?
在 config/sources.yaml 添加源配置,然后在 news_digest/fetcher.py 实现对应的 xxx_parser 方法。会自动通过 getattr 路由到新解析器。
Q5: 日报输出在哪里?
默认 output/ 目录:digest_YYYY-MM-DD.md、digest_YYYY-MM-DD.html、digest_YYYY-MM-DD.json。
Q6: 缓存过期时间能调整吗?
修改 config/sources.yaml 中 cache.ttl_minutes,或在 fetcher.py 中改 CACHE_TTL 常量(当前 30 分钟)。
Q7: 能只做情感分析不生成日报吗?
run.py fetch 仅抓取,run.py summarize 仅摘要+生成。如需仅情感分析,需直接调用 sentiment 模块(代码中有情感分析逻辑集成在 pipeline 中)。
技术栈
| 组件 | 技术 |
|------|------|
| 抓取 | Python requests + BeautifulSoup4 (lxml) |
| 配置 | YAML |
| LLM 调用 | openai SDK(Ollama/OpenAI 兼容端点) |
| 缓存 | 本地 JSON 文件 (MD5 键) |
| 日报生成 | 纯 Python 字符串模板,Markdown + 自包含 HTML |
| CLI | argparse + rich (进度条) |
| 中文处理 | 简体中文全文 pipeline |
微信扫一扫