Skip to content

CelestialCoder03/ReportSummarizer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PDF 研报结构化数据提取工具

基于 LangGraph 的智能工作流,用于从 PDF 投资研究报告中提取结构化数据。该系统采用多智能体协作架构,能够自动分析研报内容并提取关键投资信息。

📋 系统架构

工作流程图

flowchart TD
    A[开始] --> B[质量评估]
    B --> C{质量检查}
    C -->|通过| D[线索分析]
    C -->|通过| E[表格提取]
    C -->|失败| F[结束]
    D --> G[逻辑提取]
    G --> H[观点总结]
    E --> F[结束]
    H --> F[结束]
    
    style A fill:#e1f5fe
    style B fill:#f3e5f5
    style C fill:#e8f5e8
    style D fill:#fff3e0
    style E fill:#fce4ec
    style F fill:#f1f8e9
    style G fill:#ffebee
    style H fill:#e1f5fe
Loading

备注:表格提取会并行启动多个worker,每个worker处理一页

核心组件

  • ResearchAgent (src/agents/research_agent.py): 主控制器,协调整个分析流程
  • QualityAssessor (src/agents/quality_assessor.py): 评估研报质量和完整性
  • ClueAnalyzer (src/agents/clue_analyzer.py): 提取投资线索和关键信息
  • TableExtractor (src/agents/table_extractor.py): 识别和提取财务表格数据
  • LogicExtractor (src/agents/logic_extractor.py): 分析投资逻辑和推理链
  • Summarizer (src/agents/summarizer.py): 生成观点总结
  • Prompts (src/prompts): 提示词

🛠️ 安装配置

环境要求

  • OpenAI API 密钥

安装依赖

pip install -r requirements.txt

环境配置

  1. 复制环境配置文件:
cp .env.example .env
  1. 编辑 .env 文件,配置必要的环境变量:
# LLM 配置
OPENAI_API_KEY=your_openai_api_key
OPENAI_BASE_URL=https://api.openai.com/v1

# 其他配置...

📖 使用方法

命令行使用

分析单个研报

python main.py single -i path/to/report.pdf

批量分析研报

python main.py batch -i data/ -o output/

命令行参数

  • single: 分析单个研报
  • batch: 批量分析研报
  • -i: 指定单个PDF文件或目录路径
  • -o: 指定输出目录

编程接口使用

import asyncio
from pathlib import Path
from src.agents.research_agent import ResearchAgent

async def analyze_report():
    # 初始化智能体
    agent = ResearchAgent()
    
    # 分析研报
    pdf_path = Path("path/to/report.pdf")
    result = await agent.analyze_report(pdf_path)
    
    if result:
        print(f"分析完成: {result.report_info.title}")
        print(f"投资评级: {result.investment_clues.rating}")
        print(f"目标价格: {result.investment_clues.target_price}")
    
# 运行分析
asyncio.run(analyze_report())

📊 输出格式

系统输出结构化的 JSON 数据,包含以下主要字段:

{
  "report_info": {
    "title": "研报标题",
    "date": "2024-01-01T00:00:00",
    "institution": "券商名称",
    "stock_name": "股票名称",
    "stock_code": "股票代码",
    "file_name": "文件名"
  },
  "quality_assessment": {
    "score": 0.85,
    "completeness": "",
    "reliability": "",
    "decision": "pass"
  },
  "investment_clues": {
    "analyst": ["分析师姓名"],
    "rating": "买入",
    "current_price": 20,
    "target_price": 25.5,
    "profit_summary": [{...}],
    "market_share": {...}
  },
  "investment_logic": {
    "main_logic": "主要投资逻辑",
    "supporting_factors": ["支撑因素1", "支撑因素2"],
    "risk_factors": ["风险因素1", "风险因素2"],
    "confidence_score": 0.8
  },
  "tables": [
    {
      "table_name": "财务数据表",
      "headers": ["年份", "营收", "净利润"],
      "data": [["2023", "100亿", "10亿"]]
    }
  ],
  "viewpoints": {
    "summary": "观点总结",
    "key_points": ["要点1", "要点2"]
  }
}

📁 项目结构

ReportSummarizer/
├── src/
│   ├── agents/          # 智能体模块
│   │   ├── research_agent.py    # 主控制器
│   │   ├── quality_assessor.py  # 质量评估
│   │   ├── clue_analyzer.py     # 线索分析
│   │   ├── table_extractor.py   # 表格提取
│   │   ├── logic_extractor.py   # 逻辑提取
│   │   └── summarizer.py        # 总结生成
│   ├── config/          # 配置模块
│   │   ├── models.py           # 数据模型
│   │   └── settings.py         # 系统设置
│   ├── llms/           # LLM 接口
│   ├── processors/     # 文档处理
│   ├── prompts/        # 提示词模板
│   └── utils/          # 工具函数
├── data/               # 输入数据目录
├── output/             # 输出结果目录
├── main.py            # 主程序入口
├── requirements.txt   # 依赖列表
└── README.md         # 项目文档

🔧 自定义配置

修改提示词

提示词模板位于 src/prompts/ 目录下,可以根据需要修改:

  • quality_assessment.py: 质量评估提示词
  • clue_analysis.py: 线索分析提示词
  • table_extraction.py: 表格提取提示词
  • logic_extraction.py: 逻辑提取提示词
  • summarization.py: 总结生成提示词

调整数据模型

数据结构定义在 src/config/models.py 中,可以根据业务需求调整输出字段。

配置 LLM 模型

LLM 配置在 src/config/settings.py.env 文件中,支持OpenAI Compatible的模型提供商。

📝 文件命名规范

为了正确解析研报信息,建议 PDF 文件按以下格式命名:

YYYYMMDD-券商名称-股票名称-股票代码-报告标题.pdf

示例:

20240115-中信证券-贵州茅台-600519-2024年投资策略报告.pdf

🚨 注意事项

  1. API 配额: 大批量处理时注意 LLM API 的调用限制
  2. 文件格式: 目前仅支持 PDF 格式的研报文件
  3. 内容质量: 系统会自动过滤低质量内容,但建议输入高质量的研报文件
  4. 处理时间: 单个文件处理时间取决于文件大小和 LLM 响应速度
  5. 表格提取: 目前默认使用gpt-4.1提取表格,为了进一步提升准确率可以换用专门的OCR模型如nanonets/Nanonets-OCR-s

🔗 相关链接

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages