第四章:大模型(LLM)

第八部分:Agent 教程

第十一节:构建历史与数据分析协作系统


1. 概述

历史与数据分析协作系统是一种智能 Agent 平台,能够:

  • 历史知识查询:快速获取历史事件、人物、时间线等信息。

  • 数据分析:对历史数据进行统计、趋势分析、可视化展示。

  • 协作功能:多用户或多模块协作生成分析报告、图表和洞察。

通过 LangGraph 构建节点化 Agent,可以将复杂任务拆解成“历史查询 → 数据处理 → 分析 → 报告生成”等模块,实现自动化和可扩展性。


2. 系统设计思路

系统主要功能模块:

  1. 用户问题解析:识别用户请求是历史知识查询还是数据分析。

  2. 历史知识检索:从知识库、百科或文献数据库获取历史信息。

  3. 数据收集与清洗:收集相关历史数据(如事件、人口、经济指标),并进行清洗。

  4. 数据分析与可视化:统计趋势、生成图表。

  5. 报告生成:将分析结果与历史背景整合成自然语言报告。

  6. 协作与反馈:支持多用户输入和模型迭代优化分析。

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. 优化建议

  1. 知识库扩展:接入百科、历史文献数据库、开放数据 API。

  2. 多维分析:不仅分析人口变化,还可以分析经济、事件、政策等多维指标。

  3. 多用户协作:支持多人提交问题,共享数据分析节点输出。

  4. 可视化增强:图表类型可选(折线、柱状、热力图)并支持交互式展示。

  5. 模型优化:在报告生成节点使用多轮推理,提高分析报告准确性和逻辑性。


6. 总结

  • 使用 LangGraph 构建历史与数据分析协作系统,可以将复杂多步骤任务模块化,实现端到端自动化。

  • 系统可以同时处理历史查询和数据分析请求,实现知识与数据的融合。

  • 节点化设计支持多用户协作和可扩展性,易于增加新的分析维度和数据源。

  • 最终输出为可视化报告和自然语言分析内容,提高历史研究和数据分析的效率。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐