当前位置:首页 > VUE

vue实现gpt聊天

2026-03-30 03:25:24VUE

Vue实现GPT聊天功能

创建Vue项目

使用Vue CLI创建一个新项目

vue create gpt-chat-app
cd gpt-chat-app

安装必要的依赖

vue实现gpt聊天

npm install axios

创建聊天组件

在src/components目录下创建Chat.vue文件

vue实现gpt聊天

<template>
  <div class="chat-container">
    <div class="messages">
      <div v-for="(message, index) in messages" :key="index" :class="['message', message.role]">
        {{ message.content }}
      </div>
    </div>
    <div class="input-area">
      <input v-model="inputMessage" @keyup.enter="sendMessage" placeholder="输入消息..."/>
      <button @click="sendMessage">发送</button>
    </div>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      messages: [],
      inputMessage: '',
      apiKey: 'YOUR_OPENAI_API_KEY',
      apiUrl: 'https://api.openai.com/v1/chat/completions'
    };
  },
  methods: {
    async sendMessage() {
      if (!this.inputMessage.trim()) return;

      const userMessage = { role: 'user', content: this.inputMessage };
      this.messages.push(userMessage);

      const tempMessage = this.inputMessage;
      this.inputMessage = '';

      try {
        const response = await axios.post(this.apiUrl, {
          model: "gpt-3.5-turbo",
          messages: [...this.messages],
          temperature: 0.7
        }, {
          headers: {
            'Authorization': `Bearer ${this.apiKey}`,
            'Content-Type': 'application/json'
          }
        });

        const aiMessage = response.data.choices[0].message;
        this.messages.push(aiMessage);
      } catch (error) {
        console.error('Error:', error);
        this.messages.push({ role: 'assistant', content: '抱歉,出错了,请稍后再试。' });
      }
    }
  }
};
</script>

<style>
.chat-container {
  max-width: 600px;
  margin: 0 auto;
  padding: 20px;
}
.messages {
  height: 400px;
  overflow-y: auto;
  margin-bottom: 20px;
  border: 1px solid #ddd;
  padding: 10px;
}
.message {
  margin: 10px 0;
  padding: 8px 12px;
  border-radius: 4px;
}
.user {
  background-color: #e3f2fd;
  margin-left: 20%;
}
.assistant {
  background-color: #f5f5f5;
  margin-right: 20%;
}
.input-area {
  display: flex;
}
input {
  flex-grow: 1;
  padding: 8px;
  border: 1px solid #ddd;
  border-radius: 4px;
}
button {
  margin-left: 10px;
  padding: 8px 16px;
  background-color: #1976d2;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}
</style>

配置路由

在src/router/index.js中配置路由

import { createRouter, createWebHistory } from 'vue-router';
import Chat from '../components/Chat.vue';

const routes = [
  {
    path: '/',
    name: 'Chat',
    component: Chat
  }
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
});

export default router;

运行项目

启动开发服务器

npm run serve

注意事项

  1. 将YOUR_OPENAI_API_KEY替换为实际的OpenAI API密钥
  2. 确保API密钥安全,不要直接暴露在前端代码中
  3. 考虑添加加载状态和错误处理
  4. 可以根据需求调整模型参数如temperature等

高级优化建议

  1. 添加消息历史持久化
  2. 实现流式响应
  3. 添加打字动画效果
  4. 支持多轮对话上下文
  5. 添加用户认证和对话历史管理

标签: vuegpt
分享给朋友:

相关文章

vue双向实现

vue双向实现

Vue 双向数据绑定的实现原理 Vue 的双向数据绑定主要通过 v-model 指令实现,其核心是结合了数据劫持(Object.defineProperty 或 Proxy)和发布-订阅模式。 数据…

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debou…

vue使用vr实现标注

vue使用vr实现标注

Vue 中使用 VR 实现标注的方法 在 Vue 项目中结合 VR 技术实现标注功能,可以通过 WebXR 和 Three.js 等库实现。以下为具体实现方法: 安装依赖 确保项目中已安装 Thre…

vue实现后退

vue实现后退

Vue 实现后退功能的方法 在 Vue 中实现后退功能通常可以通过以下几种方式完成,具体取决于应用场景和需求。 使用 window.history API 通过原生 JavaScript 的 win…

vue实现剪辑

vue实现剪辑

Vue 实现视频剪辑功能 在Vue中实现视频剪辑功能通常需要结合HTML5的<video>元素和第三方库(如FFmpeg.js或Video.js)。以下是几种常见的实现方法: 使用FFm…

vue实现登出

vue实现登出

实现Vue登出功能 登出功能通常涉及清除用户会话、令牌或本地存储的数据,并重定向到登录页面。以下是几种常见的实现方式: 清除用户令牌和状态 在Vuex的store中定义一个logout mutati…