研究报告自动化:从问题到完整报告的AI全流程
输入一个问题,输出一份专业的研究报告。这不是科幻,这是DeepScope正在做的事。本文解析研究报告自动化的完整技术栈。
写一份研究报告需要多少步骤?
人工做,至少需要2-3小时。
AI做,5分钟。
## 摘要
[200字左右的概述]
## 1. 引言
### 1.1 研究背景
### 1.2 研究目的
### 1.3 研究方法
## 2. [主要发现1]
### 2.1 [子主题]
### 2.2 [数据/证据]
## 3. [主要发现2]
### 3.1 [子主题]
### 3.2 [数据/证据]
## 4. [分析与讨论]
### 4.1 [趋势分析]
### 4.2 [对比分析]
### 4.3 [风险与机会]
## 5. 结论与建议
### 5.1 主要结论
### 5.2 行动建议
## 参考文献
1. [来源1]
2. [来源2]
php
async def understand_query(llm, query: str) -> dict:
"""理解研究问题"""
prompt = f"""分析以下研究问题:
问题:{query}
请回答:
1. 核心主题是什么?
2. 需要研究哪些方面?
3. 目标读者是谁?
4. 预期的报告深度?
返回JSON格式。"""
response = await llm.ainvoke(prompt)
return json.loads(response)
php
async def create_research_plan(llm, understanding: dict) -> list:
"""创建研究计划"""
prompt = f"""基于以下理解,创建研究计划:
主题:{understanding['topic']}
研究方面:{understanding['aspects']}
报告深度:{understanding['depth']}
请创建3-5个研究子任务,每个任务包括:
1. 任务类型(search/analysis)
2. 任务描述
3. 搜索关键词(如果是搜索任务)
返回JSON格式。"""
response = await llm.ainvoke(prompt)
return json.loads(response)["tasks"]
python
async def execute_research(search_agent, analysis_agent, tasks: list) -> dict:
"""执行研究任务"""
results = {
"search_results": [],
"analysis_results": []
}
search_tasks = [t for t in tasks if t["type"] == "search"]
search_results = await asyncio.gather(
*[search_agent.search(t) for t in search_tasks]
)
results["search_results"] = search_results
analysis_tasks = [t for t in tasks if t["type"] == "analysis"]
for task in analysis_tasks:
analysis = await analysis_agent.analyze(search_results, task)
results["analysis_results"].append(analysis)
return results
python
async def generate_report(llm, query: str, research_results: dict) -> str:
"""生成研究报告"""
structure = await plan_report_structure(llm, query)
summary = await generate_summary(llm, query, research_results)
sections = []
for section in structure["sections"]:
content = await generate_section(llm, section, research_results)
sections.append(f"## {section['title']}\n\n{content}")
conclusion = await generate_conclusion(llm, query, research_results)
references = extract_references(research_results)
report = f"""# {query}
## 摘要
{summary}
{chr(10).join(sections)}
## 结论与建议
{conclusion}
## 参考文献
{format_references(references)}
"""
return report
STRUCTURE_PROMPT = """你是一个研究报告结构专家。请为以下主题规划报告结构:
主题:{topic}
要求:
1. 包含5-7个主要章节
2. 每个章节有2-3个子章节
3. 结构逻辑清晰,层层递进
4. 包含引言、正文、结论
返回JSON格式的结构。"""
SECTION_PROMPT = """请撰写研究报告的以下章节:
章节标题:{title}
章节主题:{topic}
相关内容:
{context}
要求:
1. 字数500-800字
2. 内容详实,有数据支撑
3. 逻辑清晰,论证有力
4. 使用Markdown格式
5. 引用来源用[1][2]标注"""
SUMMARY_PROMPT = """请为以下研究报告生成摘要:
研究主题:{topic}
主要发现:
{findings}
要求:
1. 字数150-200字
2. 概述研究背景、方法、主要发现和结论
3. 语言简洁明了"""
php
def extract_references(research_results: dict) -> list:
"""提取参考文献"""
references = []
for result in research_results["search_results"]:
for source in result.sources:
references.append({
"title": source.title,
"url": source.url,
"accessed": datetime.now().strftime("%Y-%m-%d")
})
seen = set()
unique_refs = []
for ref in references:
if ref["url"] not in seen:
seen.add(ref["url"])
unique_refs.append(ref)
return unique_refs
php
def format_references(references: list) -> str:
"""格式化参考文献"""
formatted = []
for i, ref in enumerate(references, 1):
formatted.append(f"{i}. [{ref['title']}]({ref['url']})")
return "\n".join(formatted)
python
class ReportQuality:
"""报告质量评估"""
async def evaluate(self, llm, report: str) -> dict:
"""评估报告质量"""
prompt = f"""请评估以下研究报告的质量:
{report}
评估维度(1-10分):
1. 完整性:是否涵盖了主题的各个方面
2. 准确性:信息是否准确,来源是否可靠
3. 逻辑性:结构是否清晰,论证是否有力
4. 可读性:语言是否流畅,格式是否规范
5. 价值性:是否有实际的参考价值
返回JSON格式的评估结果。"""
response = await llm.ainvoke(prompt)
return json.loads(response)
python
class ReportGenerator:
"""报告生成系统"""
def __init__(self):
self.llm = ChatOpenAI(model="gpt-4")
self.search_agent = SearchAgent()
self.analysis_agent = AnalysisAgent()
self.quality_checker = ReportQuality()
async def generate(self, query: str, depth: str = "standard") -> dict:
"""生成研究报告"""
print(f"📝 开始生成报告: {query}")
print(" 理解问题...")
understanding = await understand_query(self.llm, query)
print(" 创建研究计划...")
plan = await create_research_plan(self.llm, understanding)
print(" 执行研究...")
research_results = await execute_research(
self.search_agent, self.analysis_agent, plan
)
print(" 生成报告...")
report = await generate_report(self.llm, query, research_results)
print(" 评估质量...")
quality = await self.quality_checker.evaluate(self.llm, report)
if quality["overall"] < 7:
print(" 质量不达标,重新生成...")
report = await generate_report(self.llm, query, research_results)
quality = await self.quality_checker.evaluate(self.llm, report)
print("✅ 报告生成完成!")
return {
"report": report,
"quality": quality,
"sources": len(research_results["search_results"])
}
generator = ReportGenerator()
result = await generator.generate("分析2024年AI Agent市场竞争格局")
print(result["report"])
print(f"质量评分: {result['quality']}")
print(f"参考来源: {result['sources']} 个")
📝 开始生成报告: 分析2024年AI Agent市场竞争格局
理解问题...
创建研究计划...
执行研究...
生成报告...
评估质量...
✅ 报告生成完成!
## 摘要
2024年,AI Agent市场呈现爆发式增长。本报告通过分析市场数据、
技术趋势和竞争格局,揭示了当前市场的主要特征和发展方向...
## 1. 引言
### 1.1 研究背景
随着大语言模型(LLM)技术的快速发展,AI Agent成为2024年最
热门的技术方向之一...
### 1.2 研究目的
本报告旨在全面分析AI Agent市场的竞争格局,为相关企业和投资者
提供决策参考...
## 2. 市场现状
### 2.1 市场规模
据Gartner预测,全球AI Agent市场规模将在2024年达到...
### 2.2 主要玩家
| 公司 | 产品 | 特点 |
|------|------|------|
| OpenAI | ChatGPT + Function Calling | 最早实现工具调用 |
| Anthropic | Claude + Tool Use | 安全性领先 |
| Google | Gemini + Extensions | 生态整合 |
## 3. 技术趋势
### 3.1 多Agent协作
多Agent系统成为主流架构,AutoGen、CrewAI等框架快速发展...
### 3.2 工具调用标准化
OpenAI Function Calling成为事实标准,各厂商纷纷兼容...
## 4. 竞争格局分析
### 4.1 技术壁垒
Agent技术的核心壁垒在于:模型能力、工具生态、安全机制...
### 4.2 生态竞争
各厂商围绕Agent构建生态系统,争夺开发者...
## 5. 结论与建议
### 5.1 主要结论
1. AI Agent市场处于快速增长期
2. 多Agent协作是未来趋势
3. 安全性成为竞争关键
### 5.2 行动建议
1. 关注多Agent技术发展
2. 投资安全技术
3. 构建工具生态
## 参考文献
1. [Gartner AI Agent市场报告](https://example.com)
2. [OpenAI Function Calling文档](https://platform.openai.com)
...
质量评分: {'completeness': 9, 'accuracy': 8, 'logic': 9, 'readability': 9, 'value': 8, 'overall': 8.6}
参考来源: 8 个
python
async def generate_sections_parallel(llm, sections, research_results):
"""并行生成各章节"""
tasks = [
generate_section(llm, section, research_results)
for section in sections
]
return await asyncio.gather(*tasks)
python
async def update_report(llm, existing_report, new_info):
"""增量更新报告"""
sections_to_update = await identify_outdated(llm, existing_report)
for section in sections_to_update:
new_content = await generate_section(llm, section, new_info)
existing_report = replace_section(existing_report, section, new_content)
return existing_report
python
async def translate_report(llm, report, target_language):
"""翻译报告"""
prompt = f"""将以下报告翻译为{target_language}:
{report}
要求:
1. 保持专业术语准确
2. 保持Markdown格式
3. 语言自然流畅"""
return await llm.ainvoke(prompt)
研究报告自动化的核心流程:
| 步骤 | 作用 | 关键技术 |
|---|---|---|
| 理解问题 | 明确目标 | LLM意图识别 |
| 研究计划 | 分解任务 | 任务规划 |
| 信息搜集 | 收集资料 | 多Agent并行搜索 |
| 深度分析 | 提取洞察 | 分析Agent |
| 报告生成 | 组织输出 | 结构化生成 |
| 质量评估 | 保证质量 | LLM评估 |
研究报告自动化是AI最有价值的应用之一。让AI帮你做研究,你只需要提出问题。
tags: research-automation, report-generation, multi-agent, deepscope, python
series: multi-agent-systems