日常工作和生活中经常会涉及写行业调研报告、竞品分析报告、年度规划报告、个股深度分析等需要查找非常多的外部资源然后整合资源才能撰写出来的深度报告。“智能研报深度撰写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_formatjson) │ ▼ 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_tokens4096) │ 对每个子章节: LLM调用1次 (max_tokens3000) │ ▼ 生成摘要 │ LLM调用1次 (基于已撰写的全部内容) │ ▼ 生成风险提示 │ LLM调用1次 (基于已撰写的内容) │ ▼ 组装最终报告 摘要 各章节正文 风险提示 免责声明关键设计决策逐章节独立撰写每章独立调用 LLM而非一次生成全文。原因全文可能超万字单次 LLM 调用 max_tokens 不够独立撰写可针对每章调整温度和 token 限制单章失败可重试不影响其他章节子章节降级处理子章节 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 N1次拆解 N次汇总N子主题数通常4~8分析11次生成大纲撰写M 1 1M总章节数含子章节 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.12cd smart-research-report-v2 # 基本用法 python main.py AI算力产业链全景梳理与核心标的分析 # 完整主题 python main.py AI算力产业链全景梳理与核心标的分析聚焦服务器、光模块、液冷散热、AI芯片等环节的竞争格局与增长驱动 # 不保存中间结果 python main.py --no-save 光伏产业链深度分析生成效果详见本公众号同期发布的 “智能研报深度撰写Agent生成报告示例”六、技术选型说明组件选型理由LLM千帆 ernie-x1-turbo-32k32k 上下文适合长文档用户已有 API KeyLLM 调用原生 requests零 SDK 依赖轻量可控搜索百度 AI Search千帆生态内搜索 API与 LLM 同平台数据传递Python dict/JSON简单直接无需消息队列输出格式Markdown研报标准格式可转 PDF/WordAgent 通信函数调用Pipeline 串联三 Agent 是严格串行关系无需异步消息七、项目源码详见本文顶部绑定资源包