当前位置: 首页 > news >正文

智能研报深度撰写Agent系统【附带源码】

日常工作和生活中经常会涉及写:行业调研报告、竞品分析报告、年度规划报告、个股深度分析等需要查找非常多的外部资源,然后整合资源,才能撰写出来的深度报告。“智能研报深度撰写Agent"可以帮我们完美地完成这项工作。接下来我们详细介绍一下这个智能体。

作者:百度智能云 谭文涛

 

一、系统总览

┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│  数据采集     │───▶│   分析Agent  │───▶│   撰写Agent  │
│  Agent       │    │  (大纲生成)   │    │  (逐章撰写)   │
└──────────────┘    └──────────────┘    └──────────────┘
      │                    │                    │
   百度搜索             LLM                 LLM
    + LLM              (1次调用)           (N次调用)
   (2次调用)

数据流

阶段输入输出
数据采集 用户研报主题 {"topic": "...", "sub_topics": [{"category": "...", "search_queries": [...], "collected_data": "..."}]}
大纲分析 主题 + 采集数据 {"title": "...", "outline": [{"section_id": "1", "section_title": "...", "key_points": [...]}
逐章撰写 大纲 + 采集数据 完整 Markdown 研报文本

二、各 Agent 实现逻辑详解

2.1 数据采集 Agent

职责:将用户的研报主题拆解为可搜索的子主题,执行百度搜索,汇总采集数据。

执行流程:

用户主题
  │
  ▼ Step1: LLM 主题拆解
  │  输入: 研报主题
  │  输出: ≤10个子主题,每个含2~4条搜索词
  │  LLM调用: 1次 (chat_json, response_format=json)
  │
  ▼ Step2: 批量搜索
  │  对每条搜索词调用百度 AI Search
  │  限流: 每次搜索间隔1秒
  │
  ▼ Step3: LLM 汇总归并
     输入: 该子主题的所有搜索结果原文
     输出: 去重、摘要后的结构化要点
     LLM调用: N次 (N=子主题数量)

关键设计决策:

  • 两段式 LLM 调用:第一次拆解主题,第二次逐子主题汇总。为什么不一步到位?因为搜索结果文本量大(每条搜索可能返回数千字),一次性汇总会超出 LLM 上下文窗口或导致信息丢失。逐子主题汇总可保证每个维度的数据质量。
  • 搜索间隔 1 秒:避免触发百度 API 限流。
  • 采集数据截断:当搜索结果超过 12000 字符时截断,防止 LLM 调用超时。

核心 Prompt 1:主题拆解

系统提示词:
你是一位专业的金融/科技研报数据采集专家。你的任务是将用户给定的研报主题
拆解为若干核心子主题,并为每个子主题生成具体的搜索关键词。拆解原则:
1. 子主题应覆盖研报主题的各个关键维度,彼此尽量独立、不重叠
2. 子主题数量不超过 10 个
3. 每个子主题生成 2~4 条搜索关键词,搜索词应具体、可检索
4. 搜索关键词应包含限定词(时间、地域、具体产品/公司名等),以提高搜索精度
5. 优先关注最新趋势、市场规模、竞争格局、技术路线等研报核心维度输出格式(严格 JSON):
{
  "sub_topics": [
    {
      "category": "子主题名称(简短,如:AI芯片)",
      "search_queries": ["搜索关键词1", "搜索关键词2"]
    }
  ]
}

设计要点:

  • 要求"彼此独立、不重叠"——防止重复搜索浪费 quota
  • "包含限定词"——让搜索结果更精准,减少噪声
  • JSON 输出格式——方便程序解析,避免正则提取的脆弱性
  • 限制 10 个子主题 × 4 条搜索词 = 最多 40 次搜索,可控

核心 Prompt 2:搜索结果汇总

系统提示词:
你是一位专业的研报数据整理专家。请对以下搜索结果进行归纳整理。要求:
1. 去除重复信息,保留关键数据点(市场规模、增长率、技术参数、公司名、产品型号等)
2. 按逻辑顺序组织要点,条理清晰
3. 对于有冲突的数据,保留多个来源并标注来源
4. 保留具体数字和百分比,不要模糊化
5. 如果搜索结果内容不足,明确标注"数据不足,建议补充检索"输出格式(纯文本,使用 Markdown 列表):
- 要点1
- 要点2

设计要点:

  • "保留具体数字"——数字是研报的灵魂,模糊化后撰写 Agent 无法引用
  • "冲突数据标注来源"——撰写阶段可由 LLM 自行判断引用哪个
  • "数据不足标注"——给用户明确信号,而非静默跳过
  • 输出纯文本而非 JSON——汇总结果将作为撰写 Agent 的参考数据,纯文本更灵活

2.2 分析 Agent

职责:根据主题 + 采集数据,生成结构化研报大纲。

执行流程:

主题 + 采集数据
  │
  ▼ LLM 大纲生成
     输入: 研报主题 + 各子主题的采集数据
     输出: 结构化大纲(含章节标题 + 核心要点 + 子章节)
     LLM调用: 1次 (chat_json)

关键设计决策:

  • 一次调用生成完整大纲:大纲是全局性结构,需要 LLM 一次看到所有数据才能保证逻辑连贯。如果逐章节生成,容易出现章节间逻辑脱节。
  • 大纲包含 key_points:不只是章节标题,还列出每个章节要写什么。这给撰写 Agent 提供了明确的"写作指令",防止跑题。
  • 强制包含投资建议和风险提示:通过 prompt 约束,保证研报完整性。

核心 Prompt:大纲生成

系统提示词:
你是一位资深金融/科技行业研报分析师,擅长构建逻辑严密、层次清晰的研报框架。你的任务是根据给定的研报主题和已采集的数据,设计一份专业研报的大纲。大纲设计原则:
1. 逻辑递进:从宏观到微观,从行业到公司,从现状到趋势
2. 数据驱动:每个章节的核心要点应与采集数据中的关键信息对应
3. 完整性:覆盖行业概览、细分领域分析、竞争格局、投资建议、风险提示等标准研报模块
4. 差异化:大纲结构应体现本次研报主题的独特视角,而非泛泛而谈
5. 一级章节不超过 8 个,每个一级章节下可有 2~4 个子章节
6. 每个章节/子章节列出 3~5 个核心要点,这些要点将指导后续撰写输出格式(严格 JSON):
{
  "title": "研报完整标题",
  "outline": [
    {
      "section_id": "1",
      "section_title": "一级章节标题",
      "key_points": ["核心要点1", "核心要点2", "核心要点3"],
      "sub_sections": [
        {
          "section_id": "1.1",
          "section_title": "子章节标题",
          "key_points": ["核心要点1", "核心要点2"]
        }
      ]
    }
  ]
}

设计要点:

  • "逻辑递进"——从宏观到微观是研报的经典结构,保证可读性
  • "数据驱动"——防止大纲空泛,确保每个章节有数据支撑
  • "差异化"——避免千篇一律的"行业概况→市场规模→竞争格局"模板
  • key_points 字段——这是大纲的灵魂,直接决定撰写质量
  • section_id——方便撰写时按 ID 追踪进度

2.3 撰写 Agent

职责:沿大纲逐章节撰写研报正文。

执行流程:

大纲 + 采集数据
  │
  ▼ 逐章节撰写
  │  对每个一级章节: LLM调用1次 (max_tokens=4096)
  │  对每个子章节:   LLM调用1次 (max_tokens=3000)
  │
  ▼ 生成摘要
  │  LLM调用1次 (基于已撰写的全部内容)
  │
  ▼ 生成风险提示
  │  LLM调用1次 (基于已撰写的内容)
  │
  ▼ 组装最终报告
     摘要 + 各章节正文 + 风险提示 + 免责声明

关键设计决策:

  • 逐章节独立撰写:每章独立调用 LLM,而非一次生成全文。原因:
    1. 全文可能超万字,单次 LLM 调用 max_tokens 不够
    2. 独立撰写可针对每章调整温度和 token 限制
    3. 单章失败可重试,不影响其他章节
  • 子章节降级处理:子章节 min_words 和 max_tokens 均减半,避免过度冗余
  • 摘要后置生成:先写完所有章节,再基于全文生成摘要,保证摘要的准确性
  • 风险提示独立生成:使用专门的 system prompt,确保风险分析的客观性

核心 Prompt:章节撰写

系统提示词:
你是一位专业的金融/科技行业研报撰写专家。你的任务是根据给定的章节标题、
核心要点和参考数据,撰写该章节的详细研报内容。撰写要求:
1. 专业性:语言客观、严谨,符合研报写作规范,避免口语化表达
2. 数据驱动:引用参考数据中的具体数字、百分比、公司名、产品型号等,标注数据来源
3. 结构清晰:使用二级/三级标题、列表、加粗等方式组织内容
4. 深度分析:不止于罗列事实,需提供因果分析、趋势判断和逻辑推演
5. 字数要求:本章节内容不少于 800 字
6. 格式要求:使用 Markdown 格式输出,可包含表格
7. 如参考数据不足,可基于行业常识进行合理推断,但需标注
8. 不要输出章节标题(系统会自动添加),直接输出正文内容

设计要点:

  • "不要输出章节标题"——Pipeline 自动添加标题,避免重复
  • "不止于罗列事实"——引导 LLM 做分析而非搬运数据,提升研报深度
  • "标注数据来源"——增强可信度,也方便用户追溯
  • "数据不足时推断并标注"——比沉默跳过更好,至少提供了分析框架
  • 字数约束 800 字——每章有最低内容保障,防止空洞

核心 Prompt:摘要生成

系统提示词:
你是一位专业研报编辑。请为以下研报撰写一段摘要(200~300字),
概括整篇研报的核心观点和结论。要求:
- 语言精炼,突出核心发现
- 包含关键数据和判断
- 使用 Markdown 格式

核心 Prompt:风险提示

系统提示词:
你是一位专业的金融风险分析师。请根据给定的研报主题和已撰写内容,
撰写风险提示章节。要求:
1. 列出 3~5 个主要风险因素
2. 每个风险因素需包含:风险描述 + 影响程度评估(高/中/低)
3. 语言客观严谨,避免过度渲染
4. 使用 Markdown 格式

三、LLM 调用统计

AgentLLM 调用次数说明
数据采集 1 + N 1次拆解 + N次汇总(N=子主题数,通常4~8)
分析 1 1次生成大纲
撰写 M + 1 + 1 M=总章节数(含子章节) + 1次摘要 + 1次风险
合计 3 + N + M 约 10~20 次调用

四、项目结构

smart-research-report/
├── config.py              # 全局配置(API Key、模型参数、常量)
├── llm_client.py          # 千帆 LLM 客户端(原生 requests,零 SDK)
├── image_client.py        # 千帆 Image API 客户端
├── search_client.py       # 百度 AI Search 客户端
├── agents/
│   ├── __init__.py
│   ├── base_agent.py      # Agent 基类
│   ├── data_collector.py  # 数据采集 Agent
│   ├── analyzer.py        # 分析 Agent
│   └── writer.py          # 撰写 Agent
├── pipeline.py            # 三 Agent 编排流水线
├── main.py                # 入口脚本
├── output/                # 输出目录(运行后生成)
│   ├── {文档名}_1_collected_data.json  # 第一步采集数据结果 
│   ├── {文档名}_2_outline.json         # 第二步规划设计结果
│   └── {文档名}_研报.md                 # 最总报告结果
└── README.md              # 本文档

五、运行方式

运行环境要求:python 3.12+

cd smart-research-report-v2# 基本用法
python main.py "AI算力产业链全景梳理与核心标的分析"# 完整主题
python main.py "AI算力产业链全景梳理与核心标的分析(聚焦服务器、光模块、液冷散热、AI芯片等环节的竞争格局与增长驱动)"# 不保存中间结果
python main.py --no-save "光伏产业链深度分析"

 

 

六、技术选型说明

组件选型理由
LLM 千帆 ernie-x1-turbo-32k 32k 上下文,适合长文档;用户已有 API Key
LLM 调用 原生 requests 零 SDK 依赖,轻量可控
搜索 百度 AI Search 千帆生态内搜索 API,与 LLM 同平台
数据传递 Python dict/JSON 简单直接,无需消息队列
输出格式 Markdown 研报标准格式,可转 PDF/Word
Agent 通信 函数调用(Pipeline 串联) 三 Agent 是严格串行关系,无需异步消息

七、项目源码

通过网盘分享的文件:smart-research-report-v2.zip

链接: https://pan.baidu.com/s/1zWKGvMXz4XdJmvzQfie3vQ?pwd=utyg 提取码: utyg 

--来自百度网盘超级会员v4的分享

http://www.jsqmd.com/news/730231/

相关文章:

  • 【限时开源】Tidyverse 2.0成本控制工具箱:包含cost_trace()调试器、budget_guard()拦截器、report_diff()基线比对器(仅开放前500名下载)
  • Camunda Platform 8核心引擎Zeebe深度体验:云原生工作流引擎到底强在哪?
  • Ubuntu 22.04 + 4060Ti 16G:保姆级避坑指南,搞定Qwen-VL-Chat-Int4本地部署
  • 多任务元学习因果知识PMSM故障诊断【附代码】
  • CCS 7.4.0环境实操:手把手为TMS320F28377D工程添加FPU快速补充库,附中断与RAM运行叠加测试
  • Java 21 中虚拟线程的 M:N 调度模型解析
  • 2026年3月全铝品牌推荐,衣柜/铝合金浴室柜/铝合金房间门/铝合金橱柜/铝合金鞋柜/门墙柜一体,全铝品牌客户热线 - 品牌推荐师
  • 影视会员自动发卡
  • NuScenes数据集+MMDetection3D框架下,多进程DataLoader报错的终极排查与修复指南
  • 微服务第三方API集成管理框架:设计、实现与生产实践
  • 阀门验收不再“靠经验记忆”:IA-Lab与AI检测报告生成助手如何把关键要点变成可追溯流程
  • 8.【Verilog】Verilog 时序检查
  • 告别手搓界面!用GUI Guider给STM32F4快速设计LVGL中文界面(附Keil5移植避坑点)
  • 别再手动做表了!用Excel宏+VBA,5分钟搞定月度成绩报表自动化
  • Dify插件SDK开发指南:从零构建AI工作流扩展工具
  • 靠谱的国企绩效薪酬咨询品牌企业有哪些? - mypinpai
  • ComfyUI-AnimateDiff-Evolved:解锁无限动画创作的专业指南
  • XUnity.AutoTranslator:3步解锁Unity游戏多语言自由
  • Altium Designer 22 保姆级配置指南:从原理图到PCB,这些隐藏设置让你效率翻倍
  • 2026国密改造趋势洞察:头部企业为何纷纷布局国密SSL证书?
  • 目标检测入门踩坑记:YOLO/Detectron2依赖项cython-bbox在Win10上的终极安装指南
  • 2026年3月轮胎批发厂家推荐,外胎/电瓶车轮胎/轻型电动车轮胎/摩托车轮胎/真空胎/电动两轮车真空胎,轮胎生产厂家推荐 - 品牌推荐师
  • 用Python爬虫+Scapy抓包,手把手教你从零搭建一个自己的期末复习资料库(附完整代码)
  • 知识付费小程序怎么搭建?
  • MQTTS连接adafruit平台示例
  • 对比直接使用官方 API,通过 Taotoken 聚合调用带来的管理便利
  • 春季儿童长高攻略:抓住长高黄金期
  • 3D模型渐进式对齐技术Interp3D解析与应用
  • 2026年保姆级教程|4000内全配重电钢琴测评,新手避坑不毁手型
  • AI自动化集成:atlassian-skill实现Jira与Confluence智能操作