个人博客:perper.top 欢迎拜访


近日在做项目的过程中,考虑到一个问题—假如说跨境电商网站,老外不会运用网站怎么办?莫非真的用人工客服一个一个去答复外国人的问题吗?


所以就思考到了当下很火的人工智能谈天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中

<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

<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

<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>

效果大约就是这个样子

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

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

关于怎么检查自己的API-key的办法,放在下方:

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

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

点击生成新的key

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

输入key名,能够随便输入

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

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

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

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

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