為線上客服系統接入chatGPT(四):chatGPT介面vue網頁版,可以聯繫上下文語境,可以實現自己的chatGPT,附代碼

来源:https://www.cnblogs.com/taoshihan/archive/2023/02/07/17098030.html
-Advertisement-
Play Games

如果想實現chatGPT的網頁版,調用介面就可以了,但是如果需要聯繫上下文語境,就需要在傳遞的數據的時候進行下拼接 傳參的時候對所有的對話數據進行拼接,拼成下麵這樣 {"prompt":"(You:在嗎\n)這裡在哦,有什麼可以幫助你的嗎?(You:你這個系統多少錢\n)抱歉,您想知道什麼?這裡是客 ...


如果想實現chatGPT的網頁版,調用介面就可以了,但是如果需要聯繫上下文語境,就需要在傳遞的數據的時候進行下拼接

傳參的時候對所有的對話數據進行拼接,拼成下麵這樣

{"prompt":"(You:在嗎\n)這裡在哦,有什麼可以幫助你的嗎?(You:你這個系統多少錢\n)抱歉,您想知道什麼?這裡是客服中心,不提供價格咨詢服務哦。(You:在哪咨詢價格\n)可以您聯繫我們的銷售團隊,他們會給您提供更多的產品價格咨詢服務。(You:聯繫方式發一下\n)您可以通過電話或網路咨詢,我們的客服熱線是000-888-888,網站是Http://www.example.com 。(You:錯的\n)很抱歉由於我們儘力提供精確和準確的信息,但如果有錯誤出現了,非常抱歉。請您及時聯繫我們,我們會儘快糾正這個錯誤,感謝您的反饋。(You:你是機器人嗎\n)(You:你是機器人嗎\n)","max_tokens":2048,"model":"text-davinci-003"}

 

(You:數據) 這是我們輸入的內容,後面接上返回的內容,效果如圖所示

 

 

 

 

具體詳細代碼:

<template>
    <div class="chatAppBody">
        <div class="chatTitle">chatGPT</div>
        <div class="chatBox">
            <div v-for="row in msgList">
                <div v-if="row.isme!=true">
                    <div class="chatNotice">{{row.time}}</div>
                    <div class="chatRow">
                        <el-avatar class="chatAvatar" :size="30" :src="row.avator"></el-avatar>
                        <div class="chatMsgContent">
                            <div class="chatUsername">{{row.name}}</div>
                            <div class="chatContent" v-html="row.content"></div>
                        </div>
                    </div>
                </div>
                <div v-if="row.isme==true">
                    <div class="chatNotice" v-if="row.show_time==true">{{row.time}}</div>
                    <div class="chatRow chatRowMe">
                        <div class="chatContent" v-html="row.content"></div>
                    </div>
                </div>
            </div>
        </div>
        <div class="chatBottom">
            <div class="chatAreaBox">
                <div class="chatArea">
                    <textarea class="chatAreaInput" v-model="originMessage"  @keyup.ctrl.enter.exact="chatToUser($event)" @keyup.enter.exact="chatToUser($event,'enter')" ></textarea>
                    <div @click="chatToUser($event)" class="chatSendBtn iconfont icon-fasong"></div>
                </div>
            </div>

            <div class="chatCopyright">
                <i class="el-icon-chat-dot-round"></i> Powered by 唯一客服
            </div>
        </div>
        
        <audio id="chatMessageAudio" style="display: none;" :src="require('@/assets/alert2.ogg')"></audio>
    </div>
</template>

<script>
    import tools from '../tools/functions.js'
    import storage from '../tools/localStorage.js'
    import xss from 'xss'
    export default {
      name: 'ChatApp',
        data() {
          return {
              window:window,
              secret:"自己的密鑰",
              message:"",
              originMessage:"",
              msgList:[],
              sendDisable:false,
          }
        },
        methods: {
           //發送給客戶
            chatToUser:function(e) {
                let _this=this;
                if(this.sendDisable) return;
                //用戶點擊了ctrl+enter觸發
                if(e && e.ctrlKey && e.keyCode==13) { 
                    this.originMessage += '\n';
                    return;
                }
                if(this.originMessage=="") return;
                _this.message+=`(You:${this.originMessage})`;
                let sendMessage = {
                    "prompt":_this.message,
                    "max_tokens":2048,
                    "model":"text-davinci-003",
                };
                let showMessage={
                    isme:true,
                    content:this.originMessage,
                    show_time:false,
                }
                this.msgList.push(showMessage);
                this.scrollBottom();
                let headers={
                    headers:{ 
                        'Authorization': `Bearer ${this.secret}`,
                        },
                }
                this.sendDisable=true;
                this.$axios.post('https://api.openai.com/v1/completions',sendMessage,headers).then(function (response) {
                    _this.sendDisable=false;
                    if(!response.data.choices){
                        _this.$message({
                          message: response.data.error.message,
                          type: 'error'
                        });
                        return ;
                    }
                    _this.originMessage="";
                    let retMessage=response.data.choices[0].text;
                    retMessage=tools.trim(retMessage,"\n");
                    _this.message+=retMessage;
                    let showMessage={
                        isme:false,
                        avator:"https://goflychat.oss-cn-hangzhou.aliyuncs.com/static/upload/avator/2022June/32a988a3c2f8700119fa1f5da1b6a4bd.png",
                        content:retMessage.replaceAll("\n","<br>"),
                        time:tools.shortTime(tools.getNowDate())
                    }
                    _this.msgList.push(showMessage);
                    _this.alertSound();
                    _this.scrollBottom();
                }).catch(function (error) {
                    _this.sendDisable=false;
                    _this.$message({
                      message: error.response.data.error.message,
                      type: 'error'
                    });
                    return ;
                });
            },
            //滾動到底部
            scrollBottom:function(){
                var _this=this;
                this.$nextTick(function(){
                    var container = _this.$el.querySelector(".chatBox");
                    container.scrollTop = 999999999;
                });
            },
            //提醒聲音
            alertSound(){
                tools.alertSound("chatMessageAudio","");
            }
        },
        mounted: function () {
        }
    }
</script>

<style lang="scss">
    .chatAppBody{
        display: flex;
        flex-direction: column;
        height: 100vh;
        background-color: #f1f5f8;
    }
    .chatTitle{
        background: #fff;
        padding: 5px 0px;
        text-align: center;
        font-size: 14px;
    }
    .chatBox{
        flex: 1;
        padding: 0px 5px;
        padding-bottom: 15px;
        overflow: auto;
    }
    .chatBottom{
        display: flex;
        flex-direction: column;
    }
    .chatRow{
        display: flex;
        align-items: flex-end;
        margin: 5px 0px;
    }
    .chatAvatar{
        margin-right: 5px;
        flex-shrink: 0;
    }
    .chatUsername {
        font-size: 12px;
        white-space: nowrap;
        color: #999;
        margin-bottom: 2px;
    }
    .chatContent{
        border-radius: 10px 10px 10px 0px;
        padding: 10px;
        background-color: rgb(255,255,255);
        box-shadow: 0 5px 30px rgb(50 50 93 / 8%), 0 1px 3px rgb(0 0 0 / 5%);
        font-size: 14px;
        word-break: break-all;
        line-height: 21px;
        display: inline-block;
    }
    
    .chatRowMe{
        justify-content: flex-end;
    }
    .chatRowMe .chatContent{
        border-radius: 10px 10px 0px 10px;
    }
    .chatNotice{
        text-align: center;
        color: #bbb;
        margin: 8px 0;
        font-size: 12px;
    }
    .chatAreaBox{
        margin: 0px 10px;
        margin-bottom: 10px;
        box-shadow: 0 5px 30px rgb(50 50 93 / 8%), 0 1px 3px rgb(0 0 0 / 5%);
        border-radius: 10px;
    }
    .chatArea{
        display: flex;
        padding: 3px 5px;
        align-items: center;
        background: #fff;
        border-radius: 10px;
    }
    .chatArea .iconfont{
        color: #383838;
        font-size: 18px;
        margin: 0px 6px;
        cursor: pointer;
    }
    .chatArea .iconfont:hover{
        color: #409eff;
    }
    .chatAreaInput{
        border-radius: 10px;
        border: 0;
        flex: 1;
        outline: none;
        resize: none;
        box-sizing: border-box;
        color: #505050;
        min-height: 50px;
        font-size: 16px;
    }
    .chatCopyright{
        color: #999a9b;
        font-size: 12px;
        text-align: center;
        margin-bottom: 10px;
        filter: grayscale(1);
        opacity: .9;
        font-family: Inter,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Tahoma,Arial,sans-serif;
    }
    
    .chatContent a{
        color: #07a9fe;
        text-decoration: none;
    }
    
    .alink{
        display: inline-block;
        word-break: break-all;
        color: #07a9fe;
        font-size: 12px;
        cursor: pointer;
    }
    
    </style>

 

十年開發經驗程式員,離職全心創業中,歷時三年開發出的產品《唯一客服系統》

一款基於Golang+Vue開發的線上客服系統,軟體著作權編號:2021SR1462600。一套可私有化部署的網站線上客服系統,編譯後的二進位文件可直接使用無需搭開發環境,下載zip解壓即可,僅依賴MySQL資料庫,是一個開箱即用的全渠道線上客服系統,致力於幫助廣大開發者/公司快速部署整合私有化客服功能。 開源地址:唯一客服(開源學習版) 官網地址:唯一客服官網
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文從提升用戶行為分析效率角度出發,詳細介紹了H5埋點方案規劃,埋點數據採集流程,提供可借鑒的用戶行為數據採集方案;且完整呈現了針對頁面分析,留存分析的數倉模型規劃方案。 ...
  • 本文主要記錄對象存儲組件Minio、數據湖組件Hudi及查詢引擎Hive\Spark之間的相容性配置及測試情況,Spark及Hive無需多言,這裡簡單介紹下Minio及Hudi。 MinIO 是在 GNU Affero 通用公共許可證 v3.0 下發佈的高性能對象存儲。 它是與 Amazon S3 ...
  • Flutter是Google推出的一款UI工具包,可以通過一套代碼同時在iOS和Android上構建媲美原生體驗的精美應用。它使用Dart作為開發語言,不依賴原生控制項,而是將自有的控制項庫,通過Skia圖形引擎直接繪製在平臺所提供的畫布上。簡單來說,它擁有以下特性:不依賴平臺、組件庫原生實現、能高速渲... ...
  • Flex 佈局目前已經非常流行了,現在幾乎已經相容所有瀏覽器了。在文章開始之前我們需要思考一個問題:我們為什麼要使用 Flex 佈局? 其實答案很簡單,那就是 Flex 佈局好用。一個新事物的出現往往是因為舊事物不那麼好用了,比如,如果想讓你用傳統的 css 佈局來實現一個塊元素垂直水平居中你會怎麼 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 使用須知 2017年下半年,微信6.5.21版本支持線上音視頻功能。開發者可以通過兩個音視頻組件 和 實現實時地線上直播、視頻通話、語音通話等功能。 上述功能需要用到兩個小程式媒體組件中的兩個: live-pusher 與 live-pl ...
  • 摘要:當協議、子功能變數名稱、主功能變數名稱、埠號中任意一個不相同時,都算作不同域。不同域之間相互請求資源,就算作“跨域”。 本文分享自華為雲社區《九種跨域方式實現原理咋回事》,作者:龍哥手記 一、什麼是跨域? 1.什麼是同源策略及其限制內容? 同源策略是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同 ...
  • 作者: 京東零售 陳震 一、 什麼是Backbone 在前端的發展道路中,前端框架元老之一jQuery對繁瑣的DOM操作進行了封裝,提供了鏈式調用、各類選擇器,屏蔽了不同瀏覽器寫法的差異性,但是前端開發過程中依然存在作用域污染、代碼復用度低、冗餘度高、數據和事件綁定煩瑣等痛點。 5年後,Backbo ...
  • 1.Api 自動導入 unplugin-auto-import自動引入 composition api,不需要再手動引入。(npm 地址) 下載 npm i -D unplugin-auto-import 配置 vite.config.ts import AutoImport from "unplu ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...