首页 前端知识 在Vue中实现与OpenAI对话的功能

在Vue中实现与OpenAI对话的功能

2025-02-27 11:02:16 前端知识 前端哥 161 1000 我要收藏

以下是在Vue项目中实现与OpenAI对话功能的详细步骤,示例中以调用OpenAI的 gpt-3.5-turbo 模型进行交互为例:

一、创建Vue项目并安装必要依赖

  1. 创建Vue项目
    确保你的开发环境中已经安装了Node.js和npm(Node Package Manager)。打开命令行,使用以下命令创建一个新的Vue项目(这里以使用默认配置创建项目为例):
vue create openai-vue-dialogue
复制

按照提示逐步操作完成项目创建后,进入项目目录:

cd openai-vue-dialogue
复制
  1. 安装axios依赖
    为了方便向OpenAI的API发送HTTP请求,需要安装 axios 库,在项目根目录下执行以下命令:
npm install axios
复制

二、获取OpenAI API密钥

登录OpenAI官网(https://platform.openai.com/),注册账号后,进入账户设置页面找到“View API Keys”选项,点击“Create new secret key”来创建属于自己的API密钥,并妥善保存该密钥,后续代码中要将其配置进去以获取调用权限。

三、创建Vue组件实现对话功能

在Vue项目的 src/components 目录下,创建一个名为 OpenAIDialogue.vue 的组件文件,以下是具体的代码实现:

<template>
<div class="dialogue-container">
<h2>与OpenAI对话</h2>
<div class="chat-history">
<div
v-for="(message, index) in conversationHistory"
:key="index"
class="message"
:class="message.role === 'user'? 'user-message' : 'ai-message'"
>
<span class="message-role">{{ message.role }}</span>
<span class="message-content">{{ message.content }}</span>
</div>
</div>
<div class="input-container">
<input
v-model="userInput"
placeholder="输入你的问题"
class="input-field"
/>
<button @click="sendMessage" class="send-button">发送</button>
</div>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
userInput: '',
conversationHistory: [], // 存储对话历史
};
},
methods: {
async sendMessage() {
if (this.userInput.trim() === '') {
return; // 如果输入为空,不发送请求
}
try {
const apiKey = 'YOUR_API_KEY'; // 替换为你实际的OpenAI API Key
const userMessage = { role: 'user', content: this.userInput };
this.conversationHistory.push(userMessage);
const response = await axios.post(
'https://api.openai.com/v1/chat/completions',
{
model: 'gpt-3.5-turbo',
messages: this.conversationHistory,
},
{
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
}
);
const aiMessage = {
role: 'assistant',
content: response.data.choices[0].message.content,
};
this.conversationHistory.push(aiMessage);
this.userInput = ''; // 清空输入框
} catch (error) {
console.error(error);
const errorMessage = {
role: 'system',
content: '请求出现错误,请稍后再试',
};
this.conversationHistory.push(errorMessage);
}
},
},
};
</script>
<style scoped>
.dialogue-container {
width: 500px;
margin: 0 auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 5px;
}
.chat-history {
height: 300px;
overflow-y: scroll;
margin-bottom: 10px;
}
.message {
margin-bottom: 10px;
padding: 5px 10px;
border-radius: 5px;
}
.user-message {
background-color: #e6f7ff;
align-self: flex-end;
}
.ai-message {
background-color: #f0f9ff;
align-self: flex-start;
}
.message-role {
font-weight: bold;
margin-right: 5px;
}
.input-container {
display: flex;
align-items: center;
}
.input-field {
flex: 1;
padding: 5px;
border: 1px solid #ccc;
border-radius: 5px;
}
.send-button {
margin-left: 10px;
padding: 5px 10px;
border: none;
border-radius: 5px;
background-color: #007bff;
color: white;
cursor: pointer;
}
</style>
复制

在上述组件代码中:

模板(template)部分:
  • 整体构建了一个对话的界面布局,包含对话历史展示区域和输入框与发送按钮的操作区域。
  • 通过 v-for 指令循环遍历 conversationHistory 数组来展示每一条对话消息,根据消息的 role(角色,如 user 代表用户消息、assistant 代表OpenAI回复消息)来应用不同的样式,区分用户和OpenAI的消息显示。
脚本(script)部分:
  • 数据定义
    • userInput 用于双向绑定输入框中的用户输入内容,初始为空字符串。
    • conversationHistory 数组用来存储整个对话过程中的消息记录,每条消息都是包含 role(角色)和 content(内容)的对象。
  • sendMessage 方法(核心交互逻辑)
    • 首先判断用户输入是否为空,为空则直接返回不进行后续操作。
    • 然后将用户输入的内容封装成包含 roleuser 的消息对象,并添加到 conversationHistory 数组中,代表这一轮用户发送的消息。
    • 使用 axios 向OpenAI的API发送POST请求,请求地址是 https://api.openai.com/v1/chat/completions,请求体中指定使用 gpt-3.5-turbo 模型以及传递当前的 conversationHistory 数组作为对话上下文。同时在请求头中配置好授权信息(API Key)和请求内容类型。
    • 当请求成功后,从返回的数据中提取OpenAI的回复内容,封装成 roleassistant 的消息对象,添加到 conversationHistory 数组中,代表OpenAI的回复。最后清空用户输入框的内容,方便下一轮输入。
    • 若请求出现错误,会将包含错误提示内容的消息对象(rolesystem)添加到 conversationHistory 数组中,并在控制台打印错误信息,方便排查问题。
样式(style)部分:
  • 定义了一系列的样式规则,用于美化对话界面,如设置对话容器的大小、边框、圆角等,区分用户消息和OpenAI消息的背景颜色,以及对输入框、发送按钮等元素的样式设定,使整个对话界面更加清晰、美观,易于查看和操作。

四、在Vue应用中使用该组件

src/App.vue 文件中引入并使用 OpenAIDialogue.vue 组件,示例代码如下:

<template>
<div id="app">
<OpenAIDialogue />
</div>
</template>
<script>
import OpenAIDialogue from './components/OpenAIDialogue.vue';
export default {
components: {
OpenAIDialogue,
},
};
</script>
<style>
/* 可添加全局样式 */
</style>
复制

通过以上步骤,运行Vue项目后,就可以在页面上输入问题并发送给OpenAI,同时查看OpenAI的回复,实现与OpenAI的对话功能,并且对话历史会实时展示在界面上,方便用户查看整个对话过程。你还可以根据实际需求进一步扩展和优化功能,比如添加多语言支持、对话记录保存等功能。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/21760.html
标签
评论
还可以输入200
共0条数据,当前/页
会员中心 联系我 留言建议 回顶部
复制成功!