做个课设:构建智能 GDP 数据可视化与问答系统:前端 + 后端 + LLM 联动实战

99 阅读4分钟

在数据驱动的时代,如何将静态的经济数据转化为可交互、可理解、可对话的智能应用,是现代 Web 开发的重要课题。本文将带你完整实现一个 “中国省份 GDP 智能查询系统” ,融合前端展示、后端 API 服务与大语言模型(LLM)能力,打造真正意义上的“数据会说话”。


一、系统架构概览

整个系统由三部分组成:

模块技术栈功能
前端界面HTML + Bootstrap + JavaScript展示 GDP 数据、支持增删改查、提供自然语言提问入口
后端数据服务Node.js + HTTP Server提供 RESTful API 管理省份 GDP 数据(模拟数据库)
AI 问答引擎OpenAI 兼容 API(如 AGICTO)接收用户问题,结合 GDP 数据生成自然语言回答

💡 关键创新点:将结构化数据注入 LLM 上下文,实现“基于事实”的精准问答。


二、前端:交互式 GDP 管理面板

1. 双栏表格设计

  • 使用 Bootstrap 的 col-md-6 实现左右分栏

  • 自动分割省份列表,提升长列表可读性

  • 支持三种视图:

    • 原始排名:按行政顺序(ID)
    • GDP 排序:从高到低(广东 > 江苏 > 山东...)
    • 地区分组:东部/南部/西部/北部,每组内部再排序
js
编辑
// 地区分组映射
const regionMap = {
  '东部': ['北京', '上海', '江苏', '浙江', '广东', ...],
  '西部': ['四川', '陕西', '重庆', '新疆', ...],
  // ...
};

2. CRUD 操作

  • 修改 GDP:下拉选择省份 → 输入新值 → PATCH 请求更新
  • 新增省份:输入名称与 GDP → POST 创建(后端分配 ID)
  • 删除省份:选择后 DELETE,前端同步移除

✅ 所有操作实时刷新表格,无需手动刷新页面。

3. 自然语言问答入口

html
预览
<input type="text" placeholder="例如:哪个省GDP最高?">
<button>提交</button>

用户可输入如:

  • “GDP 最高的三个省是?”
  • “河南和湖北谁更强?”
  • “广东省有哪些强市?”

三、后端:轻量级数据服务(Node.js)

js
编辑
// server.js
http.createServer(async (req, res) => {
  const { question, data } = url.parse(req.url, true).query;
  
  const prompt = `
${data}
请根据上面的JSON数据,回答:“${question}”
如果问题涉及省份的其他信息(如城市、人口),可自行补充,但需简洁(50字内)。
`;

  const result = await getCompletion(prompt);
  res.end(JSON.stringify({ result }));
}).listen(1314);

关键设计:

  • CORS 开启Access-Control-Allow-Origin: *,允许前端跨域调用
  • 动态 Prompt 注入:将前端传来的 data(GDP 数组)直接嵌入提示词
  • 安全转义:使用 encodeURIComponent 防止特殊字符破坏 JSON 结构

四、AI 引擎:基于 AGICTO 的 LLM 服务

使用兼容 OpenAI API 的国产模型服务(如 AGICTO),降低成本并提升响应速度:

js
编辑
import OpenAI from 'openai';
const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: 'https://api.agicto.cn/v1' // 替换为国产模型网关
});

const getCompletion = async (prompt) => {
  const res = await client.chat.completions.create({
    model: 'gpt-3.5-turbo',
    messages: [{ role: 'user', content: prompt }],
    temperature: 0.1 // 降低随机性,确保数据准确性
  });
  return res.choices[0].message.content;
};

Prompt 工程技巧:

  • 明确指令:“根据上面的 JSON 数据回答
  • 限制长度:“50 字以内
  • 允许扩展:“可自行查询该省强市等信息”,增强实用性

🌰 示例问答:

  • :GDP 最高的是哪个省?
  • :广东省,GDP 为 129118.58 亿元。
  • :浙江省有哪些强市?
  • :杭州、宁波、温州等,数字经济发达。

五、数据一致性与用户体验

1. 前端状态管理

  • originalUsers 数组缓存全量数据
  • 每次 CRUD 操作后同步更新本地数据并重渲染
  • 下拉菜单动态刷新,避免“已删除省份仍可选”

2. 用户反馈机制

  • 成功:✅ 绿色提示
  • 失败:❌ 红色提示
  • 加载中:按钮置灰防重复提交

3. 响应式布局

  • Bootstrap 保证在手机/平板/桌面端均良好显示
  • 表单自动换行(flex-wrap: wrap

六、部署与扩展建议

本地开发启动流程:

bash
编辑
# 1. 启动数据服务(假设已有 mock API 或 JSON Server)
npx json-server --watch db.json --port 3001

# 2. 启动 AI 服务
node server.js  # 监听 1314 端口

# 3. 打开 index.html(通过 Live Server 或直接 file://)

可扩展方向:

  • 🔐 添加用户登录与权限控制
  • 📊 集成 ECharts 实现 GDP 可视化图表
  • 🌐 支持多国 GDP 数据切换
  • 🧠 增强 LLM 能力:支持趋势分析(“近五年增长最快的是?”)

七、总结

本项目虽小,却完整体现了现代 Web 应用的典型架构:

前端交互 + 后端服务 + AI 智能 = 下一代数据产品

通过将 结构化数据大语言模型 结合,我们不仅展示了数据,更赋予了数据“对话”的能力。这正是 AIGC 时代开发者的核心竞争力——不是取代人,而是让人与数据的沟通更自然、更高效

现在,打开你的编辑器,运行代码,向系统提问:“谁是中国经济的领头羊?” —— 让数据亲自告诉你答案。