从前端到全栈再到 AI 全栈:体验 AI 为项目带来的颠覆性变革

前言

通过一个项目带你从前端到全栈再到AI全栈,体验不一样的感觉。

通过这个项目,你能亲身体验到AI为传统项目带来的颠覆性变革,从提升用户体验到优化业务流程,乃至开拓全新的应用场景,每一处都将闪耀着AI的智慧之光。这不仅是一次技术的升级,更是一次思维模式的飞跃,让你在实践中领悟科技与创新的无限可能,享受AI技术带来的前所未有的魅力与震撼。

纯前端

通过引入Bootstrap ,可以使用Bootstrap 提供的丰富的预定义 CSS 样式和 JavaScript 组件达到快速构建用户界面的效果。

html

 体验AI代码助手
 代码解读
复制代码<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">

通过在HTNL文件中引入这个CSS文件,我们可以使用它提供的一系列的 CSS 样式和类。在没有后端提供数据的情况下,只能将数据写在前端直接渲染。

HTML 体验AI代码助手 代码解读复制代码<!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">
                <h1>AI赋能的用户表</h1>
                <table class="table table-striped" id="user_table">
                    <thead>
                        <tr>
                            <th>ID</th>
                            <th>姓名</th>
                            <th>家乡</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>1</td>
                            <td>张三</td>
                            <td>北京</td>
                        </tr>
                        <tr>
                            <td>2</td>
                            <td>李四</td>
                            <td>上海</td>
                        </tr>
                        <tr>
                            <td>3</td>
                            <td>李明</td>
                            <td>上海</td>
                        </tr>
                        <tr>
                            <td>4</td>
                            <td>王五</td>
                            <td>深圳</td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </body>
</html>

实现效果:

屏幕截图 2024-06-14 165748.png

全栈

通过前后端分离的方法分别在不同的文件内编写前端和后端代码。前端负责构建一个界面并且向后端发起数据请求动态更新页面的数据内容;而后端负责为前端提供数据。

后端

我们通过Node.js实现数据的提供。

  1. 首先初始化一个后端项目:

    csharp
    
     体验AI代码助手
     代码解读
    复制代码npm init -y
    
  2. 安装json-server包。json-server是用于快速搭建基于 JSON 文件的模拟 HTTP API 服务器的工具。通过使用json-server模拟一个后端接口。

    css
    
     体验AI代码助手
     代码解读
    复制代码npm i json-server
    

创建一个users.json文件,在里面输入用户数据。

JavaScript 体验AI代码助手 代码解读复制代码{
    "users": [
        {
            "id":1,
            "name": "张三",
            "hometown": "北京"
        },
        {
            "id": 2,
            "name": "李四",
            "hometown": "上海"
        },
        {
            "id": 3,
            "name": "李明",
            "hometown": "上海"
        },
        {
            "id": 4,
            "name": "王五",
            "hometown": "深圳"
        }
    ]
}

准备向外提供数据。在package.json文件中找到名为"scripts"的键,并且将里面的内容删除,在里面添加"dev": "json-server users.json"

javascript 体验AI代码助手 代码解读复制代码"scripts": {
    "dev": "json-server users.json"
},

执行以下指令。

arduino

 体验AI代码助手
 代码解读
复制代码npm run dev 

执行这个指令后会启动json-server ,并且让 json-server 基于名为 users.json 的 JSON 文件来搭建模拟的后端服务。 json-server会把 users.json 文件中的数据以特定的接口形式暴露出来。

屏幕截图 2024-06-14 173947.png

我们查看最后提供的接口http://localhost:3000/users的内容。其内容为:

屏幕截图 2024-06-14 174508.png

前端

在没有后端的情况下,只能将数据写在前端里。但是如果有后端传输数据,前端就只需要发起数据请求并且在获取数据后进行渲染就好了。

html 体验AI代码助手 代码解读复制代码<!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">
                <h1>AI赋能的用户表</h1>
                <table class="table table-striped" id="user_table">
                    <thead>
                        <tr>
                            <th>ID</th>
                            <th>姓名</th>
                            <th>家乡</th>
                        </tr>
                    </thead>
                    <tbody>
                    </tbody>
                </table>
            </div>
        </div>
        <script>
            const oBody = document.querySelector('#user_table tbody')
            fetch('http://localhost:3000/users')
                .then(data => data.json())
                .then(users => {
                oBody.innerHTML = users.map(user => `
                <tr>
                    <td>${user.id}</td>
                    <td>${user.name}</td>
                    <td>${user.hometown}</td>
            </tr>
            `).join('')
            })
        </script>
    </body>
</html>

在JavaScript部分中通过fetch方法向'http://localhost:3000/users'发送请求获取数据;当获取到数据后将其装换为JSON格式;然后把获取到的用户数据进行遍历,再在页面上渲染出来。

其中要加上join('')的原因是map()返回的是一个字符串数组,并不是我们想要的一整个字符串,所有通过join('')将该数组内的字符串拼接成一个整体。

以下是不添加join('')的效果,表格之间存在着逗号,原因是map()返回的字符串数组在后续操作中会隐式调用toString()转换为字符串类型。

屏幕截图 2024-06-15 101046.png

添加join('')后的效果图:

屏幕截图 2024-06-14 203521.png

全栈+AI

在以上全栈的基础上为引入AI做准备。

前端

HTML部分

在原有的前端基础上添加表单用于实现向AI询问用户表相关问题的功能。我们不需要自己手敲表单代码,只需要在Bootstrap 中找到自己喜欢的表单模板进行简单修改就好了。

表单用于提交数据。在没有ajax之前的传统方法是通过跳转页面,数据会发送到该页面进行处理;在ajax出现后方式改变了,首先通过dom结构获取数据再用ajax手动提交数据给服务器,不用跳转页面而是在当前页面接收服务器返回的响应并进行相应处理。

html 体验AI代码助手 代码解读复制代码    <div class="container">
        <div class="row col-md-6 col-md-offset-3">
            <h1>AI赋能的用户表</h1>
            <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" method="get" action="http://www.baidu.com">
                <div class="form-group">
                    <label for="questionInput">向AI提问:</label>
                    <input type="text" name="question" class="form-control" id="questionInput" placeholder="请输入相关问题">
                </div>
                <button type="submit" class="btn btn-default">提交</button>
            </form>
        </div>
        <h4 class="row col-md-6 col-md-offset-3" id="message">
        </h4>
    </div>

通过使表单中label标签的for属性值和input标签的id属性值相同,这样可以实现在页面表单中点击label部分可以直接跳转到对应的input输入框中。

JavaScript部分

在前端的JavaScript部分中,可以分为两部分。一部分是从json-server生成的模拟接口中获取数据并且渲染在页面上;另外一部分是通过监听表单的提交事件触发AI服务功能回答关于用户表相关的问题。

详细解释监听表单事件的操作:

  1. 通过event.preventDefault()可以阻止表单的默认行为,也就是阻止表单的页面跳转操作。
  2. 通过this['question'].value.trim()获取用户在页面输入的问题。
  3. 接入AI服务:
    1. 向服务器传输一个名为 question 的查询参数,其值是变量 question 的值,并且也传输了一个名为 users 的查询参数,其值是将 usersData 进行 JSON 序列化后的值。(usersData是一个数组,里面的元素是对象,每个对象代表一条用户数据)
    2. 获取服务器返回的值,并且渲染在页面上展示给用户。
javascript 体验AI代码助手 代码解读复制代码const oMessage = document.querySelector('#message')
const oBody = document.querySelector('#user_table tbody')
const oForm = document.forms['aiForm']
let usersData = []
//获取数据
fetch('http://localhost:3000/users')
    .then(data => data.json())
    .then(users => {
    usersData = users
    oBody.innerHTML = users.map(user => `
                <tr>
                    <td>${user.id}</td>
                    <td>${user.name}</td>
                    <td>${user.hometown}</td>
                </tr>
            `).join('')
})
//监听表单的提交事件
oForm.addEventListener('submit', function (event) {
    //用于阻止事件的默认行为。表单点击提交按钮会默认提交表单,所以需要阻止默认行为(跳转页面)
    event.preventDefault()
    //通过name属性去查找表单元素,获取表单数据。这样性能更好
    const question = this['question'].value.trim()//this指向表单
    //接入AI服务器
    fetch(`http://localhost:8888/users?question=${question}&users=${JSON.stringify(usersData)}`)//深拷贝
        .then(data => data.json())
        .then(res => {
        oMessage.innerHTML = res.message
    })
})

效果展示:

屏幕截图 2024-06-16 130836.png

用户在输入框内输入问题,点击提交后会在下方展示AI对该问题的回答。

AI

这个项目的AI服务通过后端实现。

首先创建一个后端文件。

csharp

 体验AI代码助手
 代码解读
复制代码npm init -y

然后安装openaidotenv模块。

css 体验AI代码助手 代码解读复制代码npm i openai
npm i dotenv

创建一个JavaScript文件实现AI问答服务。

  1. 引入依赖模块:

    javascript 体验AI代码助手 代码解读复制代码const http = require('http');
    const url = require('url');
    const OpenAI = require('openai');
    require('dotenv').config();
    

    其中httpurl是Node.js的内置模块,分别用于创建HTTP服务器和解析URL。OpenAI用于与OpenAI的API进行交互。dotenv用于从.env文件加载环境变量。

  2. 初始化OpenAI客户端:

    javascript 体验AI代码助手 代码解读复制代码const client = new OpenAI({
        apiKey: process.env.OPENAI_KEY,
        baseURL: 'https://api.chatanywhere.tech/v1'
    })
    

    创建一个.env文件,在里面设置一个OPENAI_KEY变量,将其值设置为自己的API密钥。

    使用环境变量process.env.OPENAI_KEY设置API密钥,并指定代理基地址为https://api.chatanywhere.tech/v1。通过该代理转发对OpenAI的请求。

  3. 创建HTTP服务器:

    通过使用http.createServer()方法创建服务器,并传入一个异步处理函数。此函数会在每次接收到HTTP请求时被调用。(req是请求对象,res是响应对象)

    javascript
    
     体验AI代码助手
     代码解读
    复制代码const server = http.createServer(async function (req, res) {})
    
    • 设置CORS头部:通过res.setHeader()方法设置响应头,允许来自任何源的跨域请求,并指定了允许的HTTP方法(GET, POST, OPTIONS)和请求头(Content-Type, Authorization)。

      javascript 体验AI代码助手 代码解读复制代码res.setHeader('Access-Control-Allow-Origin', '*');
      res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); 
      res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
      
    • 当请求对象的URL包含/users时,

      1. 解析请求对象的URL内的查询参数。
      2. 通过结构的方法从查询参数中提取questionusers
      3. 构建一个prompt存储提供给AI的提示指令,里面包含着用户的提问和用户信息。
      4. 调用OpenAI API的chat.completions.create方法,使用gpt-3.5-turbo模型生成回复,同时设置temperature为0以降低回复的随机性。
      5. 处理API响应,将回复内容包装在一个JSON对象中。
      6. 将响应的状态码设置为200,指定响应的内容是JSON类型,然后将JSON字符串化的结果作为响应体发送给客户端。
      javascript 体验AI代码助手 代码解读复制代码if (req.url.indexOf('/users' >= 0)) {
          const parseUrl = url.parse(req.url, true)
          const { question, users } = parseUrl.query
          const prompt = `
              ${users}
              回答问题:${question},做出简短回答。
              `
          const response = await client.chat.completions.create({
              model: 'gpt-3.5-turbo',
              messages: [{ role: "user", content: prompt }],
              temperature: 0, // 控制输出的随机性,0表示更确定的输出
          });
          const result = response.choices[0].message.content || '';
          let info = {
              message: result
          }
          res.statusCode = 200;
          res.setHeader('Content-Type', 'text/json');
          res.end(JSON.stringify(info))
      }
      
  4. 启动服务器:监听8888端口。

    JavaScript 体验AI代码助手 代码解读复制代码server.listen(8888, function () {
        console.log('服务器启动了');
    })
    

效果展示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

快动手创建属于自己的AI项目吧,逐步走向AI全栈工程师。

      message: result
     }
     res.statusCode = 200;
     res.setHeader('Content-Type', 'text/json');
     res.end(JSON.stringify(info))
 }
 ```
  1. 启动服务器:监听8888端口。

    JavaScript 体验AI代码助手 代码解读复制代码server.listen(8888, function () {
        console.log('服务器启动了');
    })
    

效果展示

[外链图片转存中…(img-Yb2WisYU-1751884202925)]

快动手创建属于自己的AI项目吧,逐步走向AI全栈工程师。

大模型岗位需求

大模型时代,企业对人才的需求变了,AIGC相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
在这里插入图片描述

掌握大模型技术你还能拥有更多可能性

• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;

• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;

• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;

• 更优质的项目可以为未来创新创业提供基石。

可能大家都想学习AI大模型技术,也想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把全套AI技术和大模型入门资料、操作变现玩法都打包整理好,希望能够真正帮助到大家。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

零基础入门AI大模型

今天贴心为大家准备好了一系列AI大模型资源,包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

有需要的小伙伴,可以点击下方链接免费领取【保证100%免费

点击领取 《AI大模型&人工智能&入门进阶学习资源包》*

1.学习路线图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果大家想领取完整的学习路线及大模型学习资料包,可以扫下方二维码获取
在这里插入图片描述

👉2.大模型配套视频👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。(篇幅有限,仅展示部分)

img

大模型教程

👉3.大模型经典学习电子书👈

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(篇幅有限,仅展示部分,公众号内领取)

img

电子书

👉4.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(篇幅有限,仅展示部分,公众号内领取)

img

大模型面试

**因篇幅有限,仅展示部分资料,**有需要的小伙伴,可以点击下方链接免费领取【保证100%免费

点击领取 《AI大模型&人工智能&入门进阶学习资源包》

**或扫描下方二维码领取 **

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员一粟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值