第四章:大模型(LLM)】08.Agent 教程-(11)构建历史与数据分析协作系统
本文介绍了基于LangGraph构建历史与数据分析协作系统的设计方案。该系统通过模块化Agent架构,将历史查询、数据收集、分析处理和报告生成等功能拆分为节点化流程,实现自动化历史研究和数据分析。系统核心包括用户输入解析、历史知识检索、数据收集清洗、分析可视化及报告生成五大模块,支持多用户协作和模块化扩展。文中提供了Python代码示例展示节点间的数据流转,并给出知识库扩展、多维分析和可视化增强等
第四章:大模型(LLM)
第八部分:Agent 教程
第十一节:构建历史与数据分析协作系统
1. 概述
历史与数据分析协作系统是一种智能 Agent 平台,能够:
-
历史知识查询:快速获取历史事件、人物、时间线等信息。
-
数据分析:对历史数据进行统计、趋势分析、可视化展示。
-
协作功能:多用户或多模块协作生成分析报告、图表和洞察。
通过 LangGraph 构建节点化 Agent,可以将复杂任务拆解成“历史查询 → 数据处理 → 分析 → 报告生成”等模块,实现自动化和可扩展性。
2. 系统设计思路
系统主要功能模块:
-
用户问题解析:识别用户请求是历史知识查询还是数据分析。
-
历史知识检索:从知识库、百科或文献数据库获取历史信息。
-
数据收集与清洗:收集相关历史数据(如事件、人口、经济指标),并进行清洗。
-
数据分析与可视化:统计趋势、生成图表。
-
报告生成:将分析结果与历史背景整合成自然语言报告。
-
协作与反馈:支持多用户输入和模型迭代优化分析。
LangGraph 可以将每个模块设计为节点,通过图结构实现信息流和逻辑流的控制。
3. LangGraph 架构设计
节点设计示例
节点类型 | 功能描述 | 输入 | 输出 |
---|---|---|---|
用户输入解析节点 | 判断问题类型并提取关键词 | 用户文本 | JSON(查询类型、主题、时间范围) |
历史知识检索节点 | 检索历史事件、人物、背景信息 | 关键词、时间 | 历史信息文本 |
数据收集节点 | 收集相关历史数据(CSV/数据库) | 查询参数 | 数据表 |
数据清洗节点 | 数据格式化、缺失值处理 | 数据表 | 清洗后的数据 |
数据分析节点 | 统计、趋势分析、可视化 | 清洗数据 | 图表、分析结果 |
报告生成节点 | 生成自然语言分析报告 | 历史信息 + 分析结果 | 文本报告 |
输出节点 | 返回最终结果 | 文本报告 + 图表 | 可视化报告或下载链接 |
数据流示意
用户输入
│
▼
[用户输入解析节点] → 查询参数
│
├──> [历史知识检索节点] → 历史信息
│
└──> [数据收集节点] → 数据表 → [数据清洗节点] → [数据分析节点]
│
▼
[报告生成节点] → 输出报告
4. LangGraph + Python 示例代码
from langgraph import Graph, LLMNode
import pandas as pd
# 创建图
history_graph = Graph(name="Historical Data Analysis System")
# 1. 用户输入解析节点
parse_input_node = LLMNode(
name="ParseUserInput",
model="gpt-5-mini",
prompt_template="""
分析用户输入:
{user_input}
输出 JSON,包括:
{{
"query_type": "history/data_analysis",
"topic": "...",
"time_range": "YYYY-YYYY"
}}
"""
)
# 2. 数据收集节点示例(CSV 数据)
def collect_historical_data(topic, time_range):
# 模拟数据读取
df = pd.read_csv(f"data/{topic}.csv")
df_filtered = df[(df['year'] >= int(time_range.split('-')[0])) &
(df['year'] <= int(time_range.split('-')[1]))]
return df_filtered
# 3. 数据分析节点
def analyze_data(df):
analysis_result = df.describe() # 简单统计分析
chart_path = "trend_chart.png"
df.plot(x='year', y='value', kind='line').get_figure().savefig(chart_path)
return analysis_result, chart_path
# 4. 报告生成节点
report_node = LLMNode(
name="GenerateReport",
model="gpt-5-mini",
prompt_template="""
根据历史信息 {history_info} 和数据分析结果 {analysis_summary},生成详细报告。
"""
)
# 5. 执行示例
user_input = "分析1910-1920年中国主要城市人口变化趋势"
parsed_params = parse_input_node.run(inputs={"user_input": user_input})
df_data = collect_historical_data(parsed_params["ParseUserInput"]["topic"],
parsed_params["ParseUserInput"]["time_range"])
analysis_summary, chart_file = analyze_data(df_data)
final_report = report_node.run(inputs={
"history_info": "历史背景信息,可从知识库获取",
"analysis_summary": str(analysis_summary)
})
print("生成报告:", final_report)
print("趋势图保存于:", chart_file)
5. 优化建议
-
知识库扩展:接入百科、历史文献数据库、开放数据 API。
-
多维分析:不仅分析人口变化,还可以分析经济、事件、政策等多维指标。
-
多用户协作:支持多人提交问题,共享数据分析节点输出。
-
可视化增强:图表类型可选(折线、柱状、热力图)并支持交互式展示。
-
模型优化:在报告生成节点使用多轮推理,提高分析报告准确性和逻辑性。
6. 总结
-
使用 LangGraph 构建历史与数据分析协作系统,可以将复杂多步骤任务模块化,实现端到端自动化。
-
系统可以同时处理历史查询和数据分析请求,实现知识与数据的融合。
-
节点化设计支持多用户协作和可扩展性,易于增加新的分析维度和数据源。
-
最终输出为可视化报告和自然语言分析内容,提高历史研究和数据分析的效率。
更多推荐
所有评论(0)