近日在做项目的过程中,考虑到一个问题---如果说跨境电商网站,老外不会使用网站怎么办?难道真的用人工客服一个一个去回答外国人的问题吗?
所以就思考到了当下很火的人工智能聊天AI-
ChatGPT
如果是使用ChatGPT来接入到项目中,当做'客服'去帮助外国人解决一些在浏览网站时常见的问题,那岂不是事半功倍?
首先先来了解一下什么是ChatGPT?
ChatGPT是一种基于深度学习的自然语言处理模型,由OpenAI开发。它是由大量文本数据训练而成的语言模型,能够理解和生成自然语言文本。
ChatGPT的目标是模拟人类对话,能够回答问题、提供信息、进行对话和提供建议等。它可以用于各种自然语言处理任务,如对话系统、语言翻译、文本生成和信息检索等。
ChatGPT基于生成式模型,它通过学习输入文本的上下文来生成回复。它可以接受文本输入并生成相应的文本输出。
为了使用ChatGPT,您需要使用OpenAI提供的API密钥进行身份验证,并通过API将文本发送到ChatGPT模型进行处理。模型会生成一个回复,您可以将其用于您的应用程序或系统中。
OpenAI提供了多个ChatGPT模型,其中包括GPT-3和GPT-3.5 Turbo等。这些模型具有不同的能力和性能特点,您可以根据需求选择适合的模型。
使用ChatGPT时,需要注意以下几点:
-
API密钥:您需要在OpenAI网站上注册并获取API密钥。API密钥用于身份验证,以便访问ChatGPT模型。
-
请求限制:使用OpenAI API时,可能会有每分钟请求限制和配额限制。确保您的应用程序遵守这些限制,并适当处理限制错误。
-
输入预处理:在将文本发送给ChatGPT之前,您可能需要对输入进行预处理,例如分词、去除噪声或添加特定的指令。
-
输出处理:从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填写正确,才能够正确访问。