Skip to content

财经内容自动化:Python + AI Agent 构建公众号维护系统

🕒 Published at:

前言

最近构建了一套 skills 财经相关文档生成技能,结合 Python 脚本与 AI Agent(Gemini CLI/ Cursor / Open Claw),实现了财经公众号内容的自动化维护。本文记录系统的设计思路与实现细节。


1. Skill 拆解

为了实现模块化和可维护性,我将公众号的内容生产拆解为四个独立的 Skill:

Skill功能产出
analyze_public_company个股研报A 股上市公司价值分析、财务数据及消息汇总
daily_market_pulse每日龙虎榜龙虎榜数据图解、游资席位追踪及资金流向
weekly_financial_report财经周报市场回顾、宏观大事及热点板块展望
upload_images图片上传将生成的本地图片上传至图床并替换 Markdown 路径

这种拆分使得每个 Skill 的数据源和处理逻辑独立,便于迭代和排查问题。

依赖关系:

内容 Skill 产出 Markdown 和本地图片,最后统一调用工具 Skill 替换为在线 URL,生成的 Markdown 可直接发布。


2. API 获取数据

系统设计的核心原则是:能用 API 获取的结构化数据,绝不让 AI 去搜索。

让 AI 直接搜索数据存在明显缺陷:

  1. Token 消耗大:AI 反复搜索、阅读网页会消耗大量 Token。
  2. 数据不可控:AI 可能获取到旧数据或错误来源的数据,且难以回溯验证。

因此,财务和行情等结构化数据由 Python 脚本通过 API 获取;AI 仅负责处理非结构化信息(如新闻摘要、公告解读)和最终的分析写作。


3. 数据获取方案

所有数据获取脚本均基于 argparse,输出统一的 JSON 格式供 AI 读取。

3.1 基础数据源

  • 新浪财经:获取实时行情(价格、成交量)。
  • 腾讯财经:获取估值数据(PE、PB、市值)。
  • 东方财富:获取历史 K 线及个股所属板块/概念。

数据格式示例(AI 读取的 JSON):

json
{
  "symbol": "000001",
  "realtime": {
    "name": "平安银行",
    "price": 11.05,
    "change_pct": -0.36
  },
  "valuation": {
    "pe_ttm": 4.97,
    "market_cap": 2144.35
  },
  "sector": "银行",
  "concepts": ["破净股", "机构重仓", "HS300_"]
}

3.2 龙虎榜数据

脚本一次性拉取当日市场概况、资金流向及龙虎榜明细。 亮点功能:内置游资别名映射表,将“XX证券营业部”自动翻译为“作手新一”等知名游资代号,提升报告的可读性。


4. 图片生成

为了解决 AI 配图不可控的问题,所有图表均由 Python 代码生成。

4.1 封面图 (Pillow)

使用 Pillow 库纯代码绘制,不依赖外部素材。统一设计语言:深色渐变背景 + 装饰光晕 + 动态文字,保证所有文章封面风格一致且专业。

4.2 数据图表 (Matplotlib + Seaborn)

基于 Matplotlib 绘制各类专业图表,包括:

  • 股价走势图:K线趋势与均线。
  • 财务分析图:营收/净利润双轴图、利润率趋势图。
  • 业务构成:环形饼图。

核心绘图逻辑(Python):

python
def create_dual_axis_chart(data, title, filename):
    """生成营收(柱状)与净利润(折线)双轴图"""
    fig, ax1 = plt.subplots(figsize=(12, 6))
    
    # 左轴:营收柱状图
    sns.barplot(x=years, y=revenue, ax=ax1, color='#D32F2F', alpha=0.8)
    ax1.set_ylabel('营收 (亿元)')
    
    # 右轴:净利润折线图
    ax2 = ax1.twinx()
    ax2.plot(years, profit, color='#1976D2', marker='o', linewidth=2)
    ax2.set_ylabel('净利润 (亿元)')
    
    # 智能处理中文字体
    font_path = get_chinese_font() # 自动适配 macOS/Linux/Win
    plt.title(title, fontproperties=font_path)
    plt.savefig(filename, dpi=300)

4.3 特色图表:龙虎榜蝴蝶图

针对龙虎榜数据,设计了中轴对称的蝴蝶图:左侧红色显示买入席位,右侧绿色显示卖出席位。一张图即可直观展示多空博弈格局及机构、游资动向。

龙虎榜蝴蝶图示例


5. 工作流

每个内容 Skill 均遵循标准的四阶段流程:

  1. Phase 1(脚本) :调用 API 获取数据,输出 JSON。
  2. Phase 2 (脚本) :根据数据生成封面和图表 (PNG)。
  3. Phase 3 (AI) :AI 读取 JSON,参考 Markdown 模板撰写分析报告。
  4. Phase 4 (脚本) :扫描 Markdown,将本地图片上传图床并替换路径。

优势:Phase 1-2 纯脚本执行,无需 AI 介入,高效且零 Token 消耗;AI 仅需专注于它擅长的分析与写作。


6. AI 操作手册

每个 Skill 目录下包含一个 SKILL.md,作为 AI 的执行指南,明确定义:

  • 环境依赖:所需 Python 库。
  • 执行步骤:每个阶段调用的脚本命令及参数。
  • 输出规范:文件保存路径及命名规则。
  • 写作要求:禁止 AI 腔,强调数据驱动和客观分析。

7. 执行流程示例

生成一篇个股研报的典型流程:


8. 踩坑记录

  1. 接口编码:不同源(新浪/腾讯/东财)编码格式不一(GBK/UTF-8),需统一转码处理。
  2. SSL 验证:macOS 环境下部分 HTTPS 请求需处理 SSL 证书验证问题。
  3. 中文字体:Matplotlib 需适配不同操作系统(macOS/Linux/Windows)的中文字体路径,防止乱码。
  4. 图床限流:批量上传时需增加延时,避免触发频率限制。
  5. 负值处理:绘制净利润柱状图时,需特殊处理负值标签的位置和颜色。

9. 总结

核心理念是:各司其职

让脚本做执行(拉数据、画图、上传),让 AI 做思考(理解、分析、写作)。

通过将繁琐的数据收集和可视化工作代码化,AI 能够专注于高价值的信息整合与观点输出,从而实现高效、低成本且高质量的内容自动化生产。