用一个项目揭开AI全栈的神秘面纱——让AI根据你的项目数据生成回答

一、引言

在当今数字化时代,AI 技术已经深入到我们生活的方方面面。而 AI 全栈开发则涉及到从前端界面展示到后端数据处理,再到 AI 模型交互的整个流程。今天,我们将通过一个具体的项目,详细揭开 AI 全栈的神秘面纱,让你对全栈开发有更深入的理解。

二、项目概述

本项目是一个 AI 用户问答聊天机器人应用,主要由前端页面展示、后端数据接口提供以及 AI 服务器响应问题三部分组成。前端负责与用户交互,展示用户数据并接收用户问题;后端提供用户数据接口;AI 服务器则根据用户提供的数据和问题,调用 AI 模型生成回答。

三、项目结构与准备工作

1. 项目结构

项目主要分为三个部分:前端(frontend)、后端(backend)和 AI 服务器(llm ai server)。

  • 前端:负责展示用户界面,与用户交互。
  • 后端:提供数据接口,管理数据文件。
  • AI 服务器:处理用户的问题,调用 AI 模型生成回答。

2. 数据文件准备 - user.json

这个文件存储了用户的基本信息,是一个 JSON 格式的数据文件。内容如下:

json 复制代码
{
    "users": [
        {
            "id": 1,
            "name": "小帅",
            "hometown": "山东"
        },
        {
            "id": 2,
            "name": "小瓜", 
            "hometown": "江西"
        },
        {
            "id": 3,
            "name": "小卢",
            "hometown": "江西"
        }
    ]
}

3. 后端数据接口服务启动

我们使用 json-server 来提供数据接口。首先要安装它:

css 复制代码
npm i json-server

安装完成后,我们可以使用以下命令启动服务:

css 复制代码
json-server --port 3000 --watch user.json

为了方便,我们可以在 package.jsonscripts 中添加一个命令:

json 复制代码
"scripts": {
    "dev": "json-server --port 3000 --watch user.json"
}

之后,我们就可以使用 npm run dev 来启动服务,服务会监听 http://localhost:3000/users,提供用户数据接口。

四、AI 服务器搭建 - main.js

1. 引入必要的模块

ini 复制代码
const http = require('http');
const OpenAI = require('openai');
const url = require('url');

这里引入了 Node.js 的 http 模块用于创建服务器,OpenAI 模块用于调用 AI 模型,url 模块用于解析 URL 中的查询字符串。

2. 配置 OpenAI 客户端

php 复制代码
const client = new OpenAI({
    apiKey: '你的KEY',
    baseURL: 'https://api.302.ai/v1'
});

这里设置了 OpenAI 的 API 密钥和基础 URL,以便后续调用 AI 模型。

3. 通用 LLM 完成接口函数

ini 复制代码
const getCompletion = async (prompt, model = "gpt-3.5-turbo") => {
    const messages = [{
        role: "user",
        content: prompt
    }];
    const response = await client.chat.completions.create({
        model: model,
        messages: messages,
        temperature: 0.1,
    });
    return response.choices[0].message.content;
};

这个函数用于向 OpenAI 模型发送请求并获取响应。prompt 是用户的问题,model 是使用的 AI 模型,temperature 控制生成结果的随机性,值越低结果越确定。

4. 测试函数(可选)

ini 复制代码
const main = async () => {
    const prompt = "用贴吧语气的话骂我";
    const result = await getCompletion(prompt);
    console.log(result);
};

这个函数可以用于测试 getCompletion 函数是否正常工作。

5. 创建 HTTP 服务器

ini 复制代码
const server = http.createServer(async (req, res) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET,POST,OPTIONS');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Authorization');

    const parsedUrl = url.parse(req.url, true);
    const queryObj = parsedUrl.query;
    const prompt = `
    ${queryObj.data}
    请你根据以上数据回答以下问题
    ${queryObj.question}
    `;
    const result = await getCompletion(prompt);
    let info = {
        result
    };
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/json');
    res.end(JSON.stringify(info));
});

server.listen(1314);

这个服务器监听 1314 端口,处理前端发送的请求。它会从 URL 的查询字符串中获取用户的数据和问题,组合成一个提示(prompt),然后调用 getCompletion 函数获取 AI 模型的回答,并将结果以 JSON 格式返回给前端。

五、前端页面搭建 - index.html

1. 页面结构

xml 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AI Users Rag chatbot</title>
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css">
</head>
<body>
    <div class="container" action="http://www.baidu.com">
        <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 class="row">
                <form name="aiForm">
                    <div class="from-group">
                        <label for="questionInput">提问</label> 
                        <input type="text" class="form-control" id="questionInput" name="question" placeholder="请输入问题" >
                    </div>
                    <button type="submit" class="btn btn-default" name="btn">查询</button>
                </form>
            </div>
            <div class="row" id="message">

            </div>
        </div>
    </div>
    <script>
        // 后续 JavaScript 代码
    </script>
</body>
</html>

这里使用了 Bootstrap 框架来美化页面,创建了一个表格用于展示用户数据,一个表单用于用户输入问题,以及一个区域用于显示 AI 回答。

2. 获取并展示用户数据

ini 复制代码
const tableBody = document.querySelector('table tbody');
const oForm = document.forms['aiForm'];
let usersData;

fetch('http://localhost:3000/users')
   .then(res => res.json())
   .then(users => {
        usersData = users;
        for (let user of users) {
            const tr = document.createElement('tr');
            for (let key in user) {
                const td = document.createElement('td');
                td.innerText = user[key];
                tr.appendChild(td);
            }
            tableBody.appendChild(tr);
        }
    });

使用 fetch 函数从后端接口 http://localhost:3000/users 获取用户数据,然后将数据展示在表格中。

3. 处理用户提问

ini 复制代码
oForm.addEventListener('submit', function (e) {
    e.preventDefault();
    const question = oForm.question.value.trim();
    if (!question) {
        alert('请输入问题');
        return;
    }

    fetch(`http://localhost:1314/api?question=${question}&data=${JSON.stringify(usersData)}`)
       .then(res => res.json())
       .then(data => {
            console.log(data);
            document.querySelector('#message').innerText = data.result;
        });
});

当用户提交表单时,阻止表单的默认提交行为,获取用户输入的问题,然后使用 fetch 函数将问题和用户数据发送到 AI 服务器 http://localhost:1314/api,最后将 AI 服务器返回的结果展示在页面上。

六、总结

通过这个项目,我们详细了解了 AI 全栈开发的整个流程。从前端的页面设计和交互,到后端的数据接口提供,再到 AI 服务器的模型调用,每个环节都紧密相连。希望这个项目能帮助你揭开 AI 全栈的神秘面纱,让你对全栈开发有更深入的理解和实践经验。在实际开发中,你可以根据需求对项目进行扩展和优化,例如使用更复杂的 AI 模型、优化前端界面等。

相关推荐
candyTong3 小时前
Cline 的检查点/工作区快照是如何实现的
openai·cline
麦兜*7 小时前
LangChain4j终极指南:Spring Boot构建企业级Agent框架
java·spring boot·spring·spring cloud·ai·langchain·ai编程
草梅友仁7 小时前
草梅 Auth 1.3.0 发布与 GitHub 动态 | 2025 年第 32 周草梅周报
开源·github·ai编程
都叫我大帅哥8 小时前
🧠 LangGraph状态管理:让AI工作流拥有“记忆”的超能力
python·langchain·ai编程
泯泷12 小时前
Tiptap 深度教程(三):核心扩展全面指南
前端·javascript·全栈
yeshan14 小时前
使用 iFLOW-CLI GitHub Action 和 Qwen3-Coder 给 GitHub 仓库生成幻灯片风格的文档站点
github·ai编程·掘金·金石计划
七月稻草人14 小时前
飞算JavaAI:人工智能与Java的创新融合与应用前景
开发语言·人工智能·ai编程·java开发·飞算javaai炫技赛
不老刘15 小时前
Windows系统安装Claude官方Code CLI完整指南
ai编程·claude
Spider_Man15 小时前
Coze 驱动的宠物冰球工作流构建与项目代码实践
javascript·ai编程·coze
Jooolin15 小时前
【Linux】Linux 的权限:你必须掌握的文件安全基础
linux·安全·ai编程