news 2026/4/23 18:51:30

Vue + Express + DeepSeek 实现一个简单的对话式 AI 应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue + Express + DeepSeek 实现一个简单的对话式 AI 应用

Vue + Express + DeepSeek 实现一个简单的对话式 AI 应用(2026 最新版教程)

这个教程将手把手教你构建一个简单的实时聊天 AI 应用

  • 前端:Vue 3(Composition API + Script Setup) + Bootstrap 美化
  • 后端:Express.js(Node.js)代理 DeepSeek API(避免前端暴露 API Key)
  • AI 模型:DeepSeek-V3.2(最新版本,base URL: https://api.deepseek.com,模型: deepseek-chat 或 deepseek-reasoner)

功能

  • 用户输入消息 → 发送到后端 → 调用 DeepSeek API → 返回回复
  • 支持聊天历史显示
  • 支持流式响应(实时打字效果,可选)

为什么用后端代理?前端直接调用会暴露 API Key,不安全。

前置准备
  1. 获取 DeepSeek API Key

    • 访问 https://platform.deepseek.com/api_keys
    • 注册/登录 → 创建 API Key(sk- 开头)
  2. 安装 Node.js(v18+):https://nodejs.org/

  3. 项目结构

ai-chat-app/ ├── backend/ # Express 后端 │ ├── server.js │ └── package.json └── frontend/ # Vue 3 前端 ├── src/ │ ├── App.vue │ ├── main.js │ └── components/Chat.vue ├── public/ └── package.json
步骤 1:创建 Express 后端(backend 文件夹)
mkdirai-chat-app&&cdai-chat-appmkdirbackend&&cdbackendnpminit -ynpminstallexpress axios cors dotenv

package.json(添加启动脚本):

"scripts":{"start":"node server.js"}

.env(存放 Key,不要提交到 Git):

DEEPSEEK_API_KEY=sk-your-real-key-here DEEPSEEK_BASE_URL=https://api.deepseek.com DEEPSEEK_MODEL=deepseek-chat // 或 deepseek-reasoner(思考模式)

server.js

require('dotenv').config();constexpress=require('express');constaxios=require('axios');constcors=require('cors');constapp=express();constPORT=3000;app.use(cors());// 允许前端跨域app.use(express.json());app.post('/api/chat',async(req,res)=>{const{messages}=req.body;// [{role: 'user', content: 'hello'}]try{constresponse=awaitaxios.post(`${process.env.DEEPSEEK_BASE_URL}/chat/completions`,{model:process.env.DEEPSEEK_MODEL,messages:messages,stream:false// 可改为 true 支持流式(需前端处理 SSE)},{headers:{'Authorization':`Bearer${process.env.DEEPSEEK_API_KEY}`,'Content-Type':'application/json'}});constaiReply=response.data.choices[0].message.content;res.json({reply:aiReply});}catch(error){console.error(error.response?.data||error.message);res.status(500).json({error:'AI 服务错误'});}});app.listen(PORT,()=>{console.log(`后端运行在 http://localhost:${PORT}`);});

启动后端:npm start

步骤 2:创建 Vue 3 前端(frontend 文件夹)
cd../ npx create-vue@latest frontend# 选择:TypeScript? No, JSX? No, Vue Router? No, Pinia? No, Vitest? No, ESLint? Yescdfrontendnpminstallaxios bootstrap

src/main.js(引入 Bootstrap):

import{createApp}from'vue'importAppfrom'./App.vue'import'bootstrap/dist/css/bootstrap.min.css'createApp(App).mount('#app')

src/App.vue(简单布局):

<template> <div class="container mt-5"> <h1 class="text-center mb-4">DeepSeek AI 聊天机器人</h1> <Chat /> </div> </template> <script> import Chat from './components/Chat.vue' export default { components: { Chat } } </script>

src/components/Chat.vue(核心聊天组件):

<template> <div class="card"> <div class="card-body" style="height: 60vh; overflow-y: auto;"> <div v-for="(msg, index) in messages" :key="index" class="mb-3"> <strong>{{ msg.role === 'user' ? '你' : 'AI' }}:</strong> <p class="border rounded p-2" :class="{'bg-light': msg.role === 'user', 'bg-info text-white': msg.role === 'assistant'}"> {{ msg.content }} </p> </div> <div v-if="loading" class="text-center">AI 思考中...</div> </div> <div class="card-footer"> <form @submit.prevent="sendMessage" class="d-flex"> <input v-model="input" class="form-control me-2" placeholder="输入消息..." required /> <button type="submit" class="btn btn-primary" :disabled="loading">发送</button> </form> </div> </div> </template> <script setup> import { ref } from 'vue' import axios from 'axios' const messages = ref([]) const input = ref('') const loading = ref(false) async function sendMessage() { if (!input.value.trim()) return messages.value.push({ role: 'user', content: input.value }) const userMessage = input.value input.value = '' loading.value = true try { const res = await axios.post('http://localhost:3000/api/chat', { messages: [...messages.value, { role: 'user', content: userMessage }] }) messages.value.push({ role: 'assistant', content: res.data.reply }) } catch (err) { messages.value.push({ role: 'assistant', content: '出错啦,请重试' }) } finally { loading.value = false } } </script>

启动前端:npm run dev(默认 http://localhost:5173)

步骤 3:运行与测试
  1. 先启动后端:cd backend && npm start
  2. 再启动前端:cd frontend && npm run dev
  3. 浏览器打开前端页面,开始聊天!

效果:输入消息 → 点击发送 → DeepSeek 返回智能回复,历史记录显示。

扩展建议(进阶)
  • 流式响应:后端设置stream: true,返回 SSE,前端用 EventSource 实时显示打字效果。
  • 聊天历史持久化:加数据库(如 MongoDB)。
  • 部署:前端用 Vercel/Netlify,后端用 Render/Heroku。
  • 模型切换:用deepseek-reasoner开启思考模式(更强推理)。

这个应用简单高效,适合学习全栈 AI 开发!代码已完整可运行。

如果需要流式版本、添加登录、或打包部署指南,随时告诉我,我继续帮你完善~🚀

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 17:07:07

权限控制系统:多用户环境下作业隔离与安全管理

权限控制系统&#xff1a;多用户环境下作业隔离与安全管理 &#x1f4cc; 引言&#xff1a;多用户场景下的安全挑战 随着AI生成模型在企业级应用中的广泛部署&#xff0c;Image-to-Video图像转视频生成器这类高算力需求工具逐渐从个人开发环境走向团队共享平台。在实际生产中&a…

作者头像 李华
网站建设 2026/4/23 10:47:45

自考必看!9个高效降AI率工具推荐

自考必看&#xff01;9个高效降AI率工具推荐 AI降重工具&#xff1a;自考论文的“隐形助手” 随着人工智能技术的不断发展&#xff0c;越来越多的学术写作开始借助AI工具来提高效率。然而&#xff0c;对于自考学生而言&#xff0c;如何在使用这些工具的同时&#xff0c;避免论文…

作者头像 李华
网站建设 2026/4/23 10:49:59

Sambert-HifiGan在在线医疗咨询中的语音应用实践

Sambert-HifiGan在在线医疗咨询中的语音应用实践 引言&#xff1a;让AI语音更有温度——多情感合成的临床价值 随着在线医疗咨询平台的快速发展&#xff0c;用户对交互体验的要求不断提升。传统的机械式TTS&#xff08;Text-to-Speech&#xff09;语音往往语调单一、缺乏情感&a…

作者头像 李华
网站建设 2026/4/23 12:26:03

Sambert-HifiGan语音合成服务的灾备与高可用设计

Sambert-HifiGan语音合成服务的灾备与高可用设计 引言&#xff1a;中文多情感语音合成的生产级挑战 随着智能客服、有声阅读、虚拟主播等AI语音应用的普及&#xff0c;高质量、低延迟、稳定可靠的语音合成&#xff08;TTS&#xff09;服务已成为关键基础设施。基于ModelScope平…

作者头像 李华
网站建设 2026/4/19 0:57:45

招聘提案总被拒?HR向上管理的通关指南

“提交的招聘预算被老板打回&#xff0c;理由是‘成本太高’&#xff1f;”“苦口婆心讲完人才缺口&#xff0c;业务部门却觉得‘不急不躁’&#xff1f;”“拿着一堆招聘数据汇报&#xff0c;领导却问‘这跟业务增长有啥关系’&#xff1f;”——在企业经营管理中&#xff0c;…

作者头像 李华
网站建设 2026/4/23 12:22:05

推荐5个高可用Image-to-Video开源镜像

推荐5个高可用Image-to-Video开源镜像 Image-to-Video图像转视频生成器 二次构建开发by科哥 在AIGC&#xff08;人工智能生成内容&#xff09;快速发展的今天&#xff0c;图像到视频生成&#xff08;Image-to-Video, I2V&#xff09;技术正成为创意表达、影视制作和数字营销的…

作者头像 李华