作为开发者,你是否想过用最简单的技术栈,快速实现一个能 “看懂数据、回答问题” 的 AI 应用?不用复杂框架,不用高深算法,仅靠前端 Bootstrap、Node.js 后端和 OpenAI API,就能搭建一个完整的 AI 数据查询系统。本文将带你从 0 到 1 落地实战,不仅能掌握全栈开发核心流程,还能理解 AI 如何与传统前后端联动,新手也能轻松跟上!
一、项目核心思路:AI 赋能数据查询的全栈逻辑
很多人觉得 AI 应用开发门槛高,其实核心逻辑很简单:让 AI 成为 “数据解读师”,连接前端的用户需求和后端的数据源。
这个项目的核心流程可以概括为 3 步:
- 后端用 json-server 快速搭建数据服务,提供用户基础数据(姓名、家乡等);
- 前端通过 Bootstrap 构建页面,展示数据并接收用户查询问题;
- 中间层用 Node.js 搭建 HTTP 服务,将用户问题和数据源传给 LLM,再把 AI 的回答返回给前端。
整个过程没有复杂的数据库设计,不用手动写查询逻辑,AI 会自动解析数据并响应问题 —— 这就是 AI 时代全栈开发的高效之处:让工具帮我们处理重复工作,专注核心业务逻辑。
二、技术栈选型:轻量高效,新手友好
为什么选择这些技术?核心是 “快速落地”,避免在环境配置和复杂语法上浪费时间:
- 前端:HTML+Bootstrap + 原生 JS,不用 React/Vue,减少学习成本,Bootstrap 自带样式让页面快速成型;
- 后端数据服务:json-server,一行命令就能把 JSON 文件变成 RESTful API,无需写数据库连接代码;
- 中间层:Node.js+http 模块,原生模块搭建 HTTP 服务,配合 OpenAI SDK 调用 AI 能力;
- AI 能力:OpenAI API(兼容第三方代理),用 gpt-3.5-turbo 模型,低成本实现自然语言交互。
技术栈看似基础,但覆盖了全栈开发的核心环节:前后端通信、数据处理、第三方服务集成,学会这套思路,能迁移到更复杂的 AI 应用开发中。
三、分步实现:从搭建到运行的完整流程
3.1 项目结构设计:清晰划分模块
先规划好目录结构,避免开发中文件混乱,这是全栈开发的好习惯:
plaintext
ai-fullstack-demo/
├── frontend/ # 前端页面
│ └── index.html # 核心页面(数据展示+问题输入)
├── backend/ # 后端服务
│ ├── server.js # Node.js HTTP+LLM服务
│ └── users.json # 数据源(用户信息)
└── .env # 环境变量(存储OpenAI API密钥)
每个文件夹职责明确,前端只负责页面交互,后端处理数据和 AI 调用,后期维护起来也方便。
3.2 后端搭建:3 行代码启动数据服务
首先搞定数据源和数据服务,这是整个应用的 “数据底座”:
- 初始化项目并安装依赖:
bash
运行
npm init -y
pnpm add json-server dotenv openai
- 编写数据源
users.json:
json
{
"users": [
{"id": 1, "username": "曹威威", "hometown": "九江"},
{"id": 2, "username": "宋婉琳", "hometown": "吉安"},
{"id": 3, "username": "习皓俊", "hometown": "吉安"},
{"id": 4, "username": "王毓宸", "hometown": "吉安"}
]
}
- 启动数据服务:在
package.json中添加脚本:
json
"scripts": {
"dev:data": "json-server --watch backend/users.json --port 3001"
}
运行npm run dev:data,访问http://localhost:3001/users,就能看到 JSON 数据 —— 这就是我们的后端 API,无需写任何接口代码!
3.3 中间层:Node.js 联动 LLM 服务
这是项目的核心,负责连接前端、数据源和 AI,实现 “问题→数据→AI 回答” 的流转:
- 配置环境变量:在
.env文件中添加 API 密钥(避免硬编码):
env
OPENAI_API_KEY=你的API密钥
- 编写
server.js:
javascript
运行
import http from 'http';
import OpenAI from 'openai';
import url from 'url';
import { config } from 'dotenv';
// 加载环境变量
config({ path: '.env' });
// 初始化OpenAI客户端(兼容第三方代理)
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://api.agicto.cn/v1'
});
// 调用AI生成回答
const getCompletion = async (prompt) => {
const messages = [{ role: 'user', content: prompt }];
const result = await client.chat.completions.create({
model: 'gpt-3.5-turbo',
messages,
temperature: 0.1 // 控制回答准确性,越低越精准
});
return result.choices[0].message.content;
};
// 搭建HTTP服务
http.createServer(async (req, res) => {
// 解决跨域问题(前端和后端端口不同)
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Content-Type', 'application/json');
// 解析前端传入的问题和数据
const parsedUrl = url.parse(req.url, true);
const { question, data } = parsedUrl.query;
// 构建AI提示词(关键:让AI基于指定数据回答)
const prompt = `请根据以下JSON数据回答问题:\n${data}\n问题:${question}`;
try {
const result = await getCompletion(prompt);
res.end(JSON.stringify({ result }));
} catch (error) {
res.end(JSON.stringify({ result: 'AI调用失败,请检查API密钥' }));
}
}).listen(1314, () => {
console.log('LLM服务启动:http://localhost:1314');
});
核心逻辑:接收前端传来的 “问题” 和 “数据源”,拼接成提示词传给 AI,再把 AI 的回答以 JSON 格式返回 —— 这就是 AI 应用中间层的核心工作。
3.4 前端实现:数据展示 + 交互功能
前端要做两件事:展示后端数据,接收用户问题并传给中间层:
html
预览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI数据查询助手</title>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<!-- 数据表格 -->
<div class="row col-md-6 col-md-offset-3">
<table class="table table-striped" id="user_table">
<thead>
<tr><th>ID</th><th>姓名</th><th>家乡</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
<!-- 问题输入表单 -->
<div class="row col-md-6 col-md-offset-3">
<form name="aiForm">
<div class="form-group">
<label for="questionInput">请输入问题:</label>
<input type="text" class="form-control" id="questionInput" name="question" required placeholder="例如:吉安有多少人?谁来自九江?">
</div>
<button type="submit" class="btn btn-primary">提交查询</button>
</form>
</div>
<!-- AI回答展示 -->
<div class="row col-md-6 col-md-offset-3" id="message" style="margin-top:20px;"></div>
</div>
<script>
const oForm = document.forms["aiForm"];
const oTableBody = document.querySelector('#user_table tbody');
const oBtn = document.querySelector(".btn");
let users = [];
// 1. 加载后端数据并展示在表格
fetch('http://localhost:3001/users')
.then(res => res.json())
.then(data => {
users = data;
// 渲染表格数据
oTableBody.innerHTML = data.map(user => `
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.hometown}</td>
</tr>
`).join("");
});
// 2. 提交问题给LLM服务
oForm.addEventListener("submit", (event) => {
event.preventDefault();
const question = oForm["question"].value.trim();
if (!question) {
alert("请输入查询问题!");
return;
}
oBtn.disabled = true;
// 调用中间层服务,传递问题和数据
fetch(`http://localhost:1314/?question=${question}&data=${JSON.stringify(users)}`)
.then(res => res.json())
.then(data => {
oBtn.disabled = false;
document.getElementById('message').innerHTML = `<div class="alert alert-success">${data.result}</div>`;
});
});
</script>
</body>
</html>
代码很简洁:用fetch获取后端数据渲染表格,提交表单时把问题和数据传给 Node.js 服务,最后展示 AI 的回答 ——Bootstrap 让页面不用额外写样式,原生 JS 就能实现所有交互。
3.5 启动项目:三步运行全栈应用
- 启动数据服务:
npm run dev:data(端口 3001); - 启动 LLM 服务:
node backend/server.js(端口 1314); - 打开
frontend/index.html,输入问题(如 “吉安有几个人?”“谁来自九江?”),点击提交就能看到 AI 的回答!
四、关键技术点拆解:理解全栈联动的核心
4.1 跨域问题解决
前端运行在本地文件(file://协议),后端服务在localhost:3001和1314,会出现跨域错误。我们在 Node.js 服务中添加了Access-Control-Allow-Origin: *,允许所有域名访问,快速解决开发环境的跨域问题。
4.2 AI 提示词设计技巧
让 AI 准确回答的关键是 “明确提示词”:我们把数据源和问题一起传给 AI,让 AI 只基于提供的数据回答,避免编造信息。temperature: 0.1设置让 AI 更严谨,适合数据查询类场景。
4.3 前后端数据流转
前端→中间层:通过 URL 参数传递问题(question)和 JSON 格式的数据(data);中间层→AI:拼接成自然语言提示词,调用 OpenAI API;AI→前端:中间层将 AI 的文本回答包装成 JSON,前端解析后展示 —— 整个流程是典型的 “请求 - 响应” 模式,只是中间多了 AI 的解读环节。
五、项目扩展方向:从 Demo 到生产级应用
这个 Demo 虽然简单,但可以基于它扩展出更实用的功能,体现全栈开发的灵活性:
- 数据层:替换 json-server 为 MySQL/MongoDB,支持更复杂的数据查询;
- 前端:用 React/Vue 重构,添加数据分页、筛选功能,优化用户体验;
- AI 能力:增加提示词工程,让 AI 支持更复杂的查询(如 “统计每个城市的人数”“按 ID 排序展示用户”);
- 性能优化:添加缓存机制,避免重复调用 AI API,降低成本;
- 部署上线:前端部署到 Netlify/Vercel,后端部署到阿里云 / 腾讯云,配置域名和 HTTPS。
六、开发思考:AI 时代的全栈开发新趋势
通过这个项目能发现,AI 正在改变全栈开发的模式:
- 降低门槛:不用手动写复杂的查询逻辑、业务规则,AI 能直接理解自然语言并处理数据;
- 聚焦核心:开发者从 “写代码实现功能” 转向 “设计流程、优化提示词、保障数据安全”;
- 快速迭代:用轻量技术栈快速验证想法,再逐步迭代升级,符合互联网产品的开发逻辑。
对于新手来说,不用一开始就学习所有复杂技术,从这样的小 Demo 入手,理解前后端联动和 AI 集成的核心,再逐步扩展技术栈,是更高效的学习路径。