手把手教你怎么在VSCode中使用Vue3时接入ChatGPT?

近日在做项目的过程中,考虑到一个问题---如果说跨境电商网站,老外不会使用网站怎么办?难道真的用人工客服一个一个去回答外国人的问题吗?


所以就思考到了当下很火的人工智能聊天AI-

ChatGPT

如果是使用ChatGPT来接入到项目中,当做'客服'去帮助外国人解决一些在浏览网站时常见的问题,那岂不是事半功倍?

首先先来了解一下什么是ChatGPT?

ChatGPT是一种基于深度学习的自然语言处理模型,由OpenAI开发。它是由大量文本数据训练而成的语言模型,能够理解和生成自然语言文本。

ChatGPT的目标是模拟人类对话,能够回答问题、提供信息、进行对话和提供建议等。它可以用于各种自然语言处理任务,如对话系统、语言翻译、文本生成和信息检索等。

ChatGPT基于生成式模型,它通过学习输入文本的上下文来生成回复。它可以接受文本输入并生成相应的文本输出。

为了使用ChatGPT,您需要使用OpenAI提供的API密钥进行身份验证,并通过API将文本发送到ChatGPT模型进行处理。模型会生成一个回复,您可以将其用于您的应用程序或系统中。

OpenAI提供了多个ChatGPT模型,其中包括GPT-3和GPT-3.5 Turbo等。这些模型具有不同的能力和性能特点,您可以根据需求选择适合的模型。

使用ChatGPT时,需要注意以下几点:

  1. API密钥:您需要在OpenAI网站上注册并获取API密钥。API密钥用于身份验证,以便访问ChatGPT模型。

  2. 请求限制:使用OpenAI API时,可能会有每分钟请求限制和配额限制。确保您的应用程序遵守这些限制,并适当处理限制错误。

  3. 输入预处理:在将文本发送给ChatGPT之前,您可能需要对输入进行预处理,例如分词、去除噪声或添加特定的指令。

  4. 输出处理:从ChatGPT获得的输出是生成的文本,您可能需要对其进行后处理,例如去除空白字符、截断或添加其他格式。

总之,ChatGPT是一个功能强大的语言模型,可用于实现自动对话、聊天机器人、智能助手和其他自然语言处理任务。它可以帮助您构建更智能、自然的对话体验。


OK,Everyone,接下来我们直接上代码!

1. template中

xml 复制代码
<template>
    <div>
        <div>
            <!-- 点击展示客服弹窗 -->
            <div class="service" @click="showModal">
                <svg t="1686814946576" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
                    p-id="2479" width="200" height="200">
                    <path d="M959.716928 554.950208M532.429285 958.838931M64.446801 594.626859M270.969435 57.464783"
                        fill="#FFFFFF" p-id="2480"></path>
                    <path
                        d="M583.719438 385.762901C664.377456 493.897713 810.145377 538.433022 810.145377 538.433022 799.252283 351.240643 687.435615 259.769348 510.411829 258.869862 298.641681 257.789251 175.627996 429.173596 222.010373 597.866646 222.00935 597.866646 580.769246 462.953957 583.719438 385.762901z"
                        fill="#FFFFFF" p-id="2481"></path>
                    <path
                        d="M843.843874 721.201649c65.939805-16.944927 114.865097-15.887852 114.865097-150.871149 0-65.013713-38.867216-120.714316-93.980441-144.029324C824.128857 272.551466 697.718819 116.236328 507.890402 111.958908c-6.053879-0.135076-12.062733-0.157589-18.004049 0-183.887101 4.724605-309.892933 146.908908-324.069817 311.821865-58.44511 21.626553-102.44216 79.103616-100.462063 146.549727 4.432962 151.456481 66.321498 153.863297 148.712997 155.550729l0-293.098431c1.732457-125.304867 124.495432-264.293385 293.822932-264.293385 168.313404 0 261.415848 130.999566 302.464753 247.369947l0 301.380048c-8.28264 19.399839-30.449499 41.206494-70.936609 80.296791-52.819996 50.971905-128.907928 77.414137-128.907928 77.414137-8.844435 1.867534-15.078417 13.68365-12.603039 23.76424 2.475378 10.082636 13.253862 16.136515 21.605064 12.242835 0 0 80.274278-26.195615 140.430356-84.256986C819.492256 769.20392 843.640236 721.763444 843.843874 721.201649z"
                        fill="#FFFFFF" p-id="2482"></path>
                    <path
                        d="M375.327224 624.215758m-37.46631 0a36.613 36.613 0 1 0 74.93262 0 36.613 36.613 0 1 0-74.93262 0Z"
                        fill="#FFFFFF" p-id="2483"></path>
                    <path
                        d="M657.294131 624.215758m-37.46631 0a36.613 36.613 0 1 0 74.93262 0 36.613 36.613 0 1 0-74.93262 0Z"
                        fill="#FFFFFF" p-id="2484"></path>
                </svg>
            </div>
            <!-- 弹窗 -->
            <a-modal class="box" v-model:visible="visible" title="SERVICE">
                <div class="kefubox">
                    <div v-for="message in chatHistory" :key="message.id">
                        <!-- 遍历用户发送的信息,如果role为user就返回信息 -->
                        <div v-if="message.sender === 'user'" class="user-message">
                            <!-- 用户发送的信息 -->
                            <div class="userBox">
                                <!-- icon图标 -->
                                <svg t="1686817502794" class="icon" viewBox="0 0 1024 1024" version="1.1"
                                    xmlns="http://www.w3.org/2000/svg" p-id="3466" width="30" height="30">
                                    <path fill="#000000"
                                        d="M500 128.8c-95.2 5.6-173.6 83.2-180 178.4-7.2 112 80.8 205.6 191.2 205.6 106.4 0 192-86.4 192-192 0.8-110.4-92-198.4-203.2-192zM512 575.2c-128 0-383.2 64-383.2 192v96c0 17.6 14.4 32 32 32h702.4c17.6 0 32-14.4 32-32V766.4c0-127.2-255.2-191.2-383.2-191.2z"
                                        p-id="3467">
                                    </path>
                                </svg>
                            </div>
                            <!-- 用户输入的问题 -->
                            <span>{{ message.text }}</span>
                        </div>
                        <div v-else class="bot-message" style="margin: 5px 0px;padding:5px 10px;">
                            <!-- icon图标 -->
                            <div style="display: flex;align-items: center;margin-right: 10px;">
                                <svg t="1686814946576" class="icon" viewBox="0 0 1024 1024" version="1.1"
                                    xmlns="http://www.w3.org/2000/svg" p-id="2479" width="30" height="30">
                                    <path
                                        d="M959.716928 554.950208M532.429285 958.838931M64.446801 594.626859M270.969435 57.464783"
                                        fill="#000000" p-id="2480"></path>
                                    <path
                                        d="M583.719438 385.762901C664.377456 493.897713 810.145377 538.433022 810.145377 538.433022 799.252283 351.240643 687.435615 259.769348 510.411829 258.869862 298.641681 257.789251 175.627996 429.173596 222.010373 597.866646 222.00935 597.866646 580.769246 462.953957 583.719438 385.762901z"
                                        fill="#000000" p-id="2481"></path>
                                    <path
                                        d="M843.843874 721.201649c65.939805-16.944927 114.865097-15.887852 114.865097-150.871149 0-65.013713-38.867216-120.714316-93.980441-144.029324C824.128857 272.551466 697.718819 116.236328 507.890402 111.958908c-6.053879-0.135076-12.062733-0.157589-18.004049 0-183.887101 4.724605-309.892933 146.908908-324.069817 311.821865-58.44511 21.626553-102.44216 79.103616-100.462063 146.549727 4.432962 151.456481 66.321498 153.863297 148.712997 155.550729l0-293.098431c1.732457-125.304867 124.495432-264.293385 293.822932-264.293385 168.313404 0 261.415848 130.999566 302.464753 247.369947l0 301.380048c-8.28264 19.399839-30.449499 41.206494-70.936609 80.296791-52.819996 50.971905-128.907928 77.414137-128.907928 77.414137-8.844435 1.867534-15.078417 13.68365-12.603039 23.76424 2.475378 10.082636 13.253862 16.136515 21.605064 12.242835 0 0 80.274278-26.195615 140.430356-84.256986C819.492256 769.20392 843.640236 721.763444 843.843874 721.201649z"
                                        fill="#000000" p-id="2482"></path>
                                    <path
                                        d="M375.327224 624.215758m-37.46631 0a36.613 36.613 0 1 0 74.93262 0 36.613 36.613 0 1 0-74.93262 0Z"
                                        fill="#000000" p-id="2483"></path>
                                    <path
                                        d="M657.294131 624.215758m-37.46631 0a36.613 36.613 0 1 0 74.93262 0 36.613 36.613 0 1 0-74.93262 0Z"
                                        fill="#000000" p-id="2484"></path>
                                </svg>
                            </div>
                            <!-- GPT回答的信息 -->
                            <span>{{ message.text }}</span>
                        </div>
                    </div>
                </div>
                <!-- 输入框 -->
                <template #footer>
                    <div class="iptbox">
                        <div>
                            <input type="text" name="" id="" v-model="userInput" @keyup.enter="sendMessage"
                                placeholder="请输入要查询的问题...">
                            <button @click="sendMessage">发送</button>
                        </div>
                    </div>
                </template>

            </a-modal>

        </div>
    </div>
</template>

2. JavaScript

xml 复制代码
<script setup>
import { defineComponent, ref } from 'vue';
import axios from 'axios';

// 弹窗
const visible = ref(false);
const showModal = () => {
    visible.value = true;
};



// 聊天历史记录
const chatHistory = ref([]);
// 用户输入的问题
const userInput = ref('');

// 点击发送事件
const sendMessage = async () => {
    const message = {
        
        id: chatHistory.value.length + 1,
        // 默认发送者设置成了user
        sender: 'user',
        // 此时是用户输入的问题
        text: userInput.value
    };
    
    // 将这些信息存入到聊天历史记录的数组中
    chatHistory.value.push(message);
    // 然后清空输入框
    userInput.value = '';

    try {
        const apiKey = '在此处输入你的API-key'; // 替换为你的 OpenAI API 密钥
        const prompt = message.text;//用户输入的问题  要问的问题

        const apiUrl = 'https://api.openai.com/v1/chat/completions'; //固定的地址,api模型
        const headers = {
            'Content-Type': 'application/json',  //请求头这里不用改
            'Authorization': `Bearer ${apiKey}`  //一定要将变量apikey填写正确才可以请求到
        };
        // prompt(必需):作为输入给模型的文本提示。它是一个字符串,描述了你想要问模型的问题或提供给模型的上下文信息。

        // max_tokens(可选):用于控制生成回复的长度。它是一个整数,表示模型生成的最大标记数量。默认值为 16。

        // temperature(可选):用于控制生成回复的创造性和随机性。它是一个浮点数,值越高,生成的结果越随机,值越低,生成的结果越保守。默认值为 0.6。

        // top_p(可选):用于控制生成回复的多样性。它是一个浮点数,介于 0 和 1 之间。较低的值会生成更保守和一致的回复,较高的值会生成更多样化的回复。默认值为 1.0。

        // n(可选):用于控制生成回复的数量。它是一个整数,表示你想要生成的回复的数量。默认值为 1。

        // 发送请求传送的Data数据
        const data = {
            messages: [
                // 定义的角色
                { role: "system", content: "You are a helpful assistant." },
                { role: "user", content: prompt },
                { role: "assistant", content: "The Los Angeles Dodgers won the World Series in 2020." },
            ],
            max_tokens: 100,
            model: "gpt-3.5-turbo"
        };

        // 获取AI返回的回答
        const result = await axios.post(apiUrl, data, { headers })
        // console.log(result);

        // AI返回的所有信息
        const botMessage = {
            id: chatHistory.value.length + 1,
            sender: 'bot',
            text: result.data.choices[0].message.content
        };
        
        // 将AI返回的信息存入到历史列表中
        chatHistory.value.push(botMessage);
    } catch (error) {
        console.error(error);
    }
};

</script>

3. style

xml 复制代码
<style scoped>
.service {
    display: flex;
    justify-content: center;
    align-items: center;
    position: fixed;
    bottom: 200px;
    right: 100px;
    background-color: #004dff;
    width: 60px;
    height: 60px;
    border-radius: 50%;
    padding: 5px;
    box-shadow: 4px 10px 10px -7px black;
}

.box {
    height: 500px;
}

.iptbox {
    display: flex;
    /* justify-content: center; */
    align-items: center;
    position: relative;
}

.iptbox input {
    width: 490px;
    height: 40px;
    padding-left: 5px;
    padding-right: 70px;
    border-radius: 10px;
}

.iptbox button {
    width: 60px;
    height: 30px;
    position: absolute;
    right: 3px;
    top: 5px;
    border-radius: 10px;
    border: none;
    background-color: #707070;
    color: #fff;
    font-weight: 600;
}



.bot-message,
.user-message {
    display: flex;
    align-items: center;
}

.bot-message {
    background-color: #888a9f;
    color: #000000;
    border-radius: 10px;
}

.user-message {
    background-color: #6f717e;
    color: #000000;
    padding: 5px 10px;
    border-radius: 10px;
}

.userBox {
    margin-right: 10px;
    display: flex;
    align-items: center;
}

</style>

效果大概就是这个样子

##### 其实这一篇文章的主要核心部分,就在于还是要有一个ChatGPT账号,然后去查看自己的API-key,然后将API-key填写正确,才能够正确访问。

关于如何查看自己的API-key的方法,放在下方:

打开platform.openai.com/overview 网址,登录之后,点击右上角

点击生成新的key

输入key名,可以随便输入

注意:!!!上一步点击确定创建之后,会弹出这个页面,一定要点击复制这个key,因为这个key只会出现一次,如果没有保存,就只能重新创建一个新的key

然后将这个key粘贴到js输入key的地方,运行代码!

相关推荐
狸克先生3 小时前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互
新加坡内哥谈技术6 小时前
Mistral推出“Le Chat”,对标ChatGPT
人工智能·chatgpt
nbsaas-boot8 小时前
如何利用ChatGPT加速开发与学习:以BPMN编辑器为例
学习·chatgpt·编辑器
hunteritself1 天前
ChatGPT高级语音模式正在向Web网页端推出!
人工智能·gpt·chatgpt·openai·语音识别
Doker 多克1 天前
Spring AI 框架使用的核心概念
人工智能·spring·chatgpt
曼城周杰伦1 天前
自然语言处理:第六十二章 KAG 超越GraphRAG的图谱框架
人工智能·pytorch·神经网络·自然语言处理·chatgpt·nlp·gpt-3
爱技术的小伙子1 天前
【ChatGPT】ChatGPT在多领域知识整合中的应用
chatgpt
学习前端的小z1 天前
【AIGC】如何准确引导ChatGPT,实现精细化GPTs指令生成
人工智能·gpt·chatgpt·aigc
段传涛2 天前
LLM( Large Language Models)典型应用介绍 1 -ChatGPT Large language models
人工智能·语言模型·chatgpt
起名字真南2 天前
【C++】深入理解 C++ 中的继承进阶:多继承、菱形继承及其解决方案
java·jvm·c++·chatgpt·aigc