最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP和GO對接ChatGPT實現(xiàn)聊天機器人效果實例

 更新時間:2024年01月05日 14:13:12   作者:秋刀魚兒啊  
這篇文章主要為大家介紹了PHP和GO對接ChatGPT實現(xiàn)聊天機器人效果實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

PHP部分主要是與ChatGPT API通信

<?php
// ChatGPT API Endpoint
$apiEndpoint = 'https://api.openai.com/v1/engines/gpt-3.5-turbo/completions';
// ChatGPT API密鑰
$apiKey = 'YOUR_API_KEY'; // 替換為你在OpenAI上獲得的API密鑰
// 獲取前端發(fā)送的消息
$message = $_POST['prompt'];
// 準(zhǔn)備發(fā)送的數(shù)據(jù)
$data = [
    'prompt' => $message,
    'max_tokens' => 50,
    'temperature' => 0.7
];
// 構(gòu)建HTTP請求頭
$headers = [
    'Content-Type: application/json',
    'Authorization: Bearer ' . $apiKey,
    'OpenAI-Organization: org-TBIGMYjFzWqsshWUUQahkUng'
];
// 使用cURL發(fā)送HTTP POST請求
$ch = curl_init($apiEndpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// 執(zhí)行cURL請求
$response = curl_exec($ch);
// 關(guān)閉cURL句柄
curl_close($ch);
// 處理ChatGPT API的響應(yīng)
if ($response !== false) {
    $responseData = json_decode($response, true);
    $responseMessage = $responseData['choices'][0]['message']['content'];
    // 返回消息逐字輸出
    for ($i = 0; $i < mb_strlen($responseMessage); $i++) {
        echo $responseMessage[$i];
        flush(); // 將輸出立即發(fā)送給瀏覽器
        usleep(50000); // 等待一段時間,以實現(xiàn)逐字輸出的效果
    }
} else {
    echo 'API請求失敗。';
}
?>

使用Go語言對接ChatGPT API并實現(xiàn)逐字輸出

在Go語言中,你可以使用net/http包來發(fā)送HTTP請求。以下是一個簡單的示例代碼,演示如何使用Go語言對接ChatGPT API并實現(xiàn)逐字輸出:

package main
import (
  "bytes"
  "encoding/json"
  "fmt"
  "io/ioutil"
  "net/http"
  "os"
  "time"
)
// ChatGPT API Endpoint
const apiEndpoint = "https://api.openai.com/v1/engines/gpt-3.5-turbo/completions"
// ChatGPT API密鑰
const apiKey = "YOUR_API_KEY" // 替換為你在OpenAI上獲得的API密鑰
func main() {
  // 獲取用戶輸入的消息
  fmt.Print("輸入消息: ")
  var message string
  fmt.Scanln(&message)
  // 準(zhǔn)備發(fā)送的數(shù)據(jù)
  data := map[string]interface{}{
    "prompt":      message,
    "max_tokens":  50,
    "temperature": 0.7,
  }
  // 將數(shù)據(jù)轉(zhuǎn)換為JSON格式
  jsonData, err := json.Marshal(data)
  if err != nil {
    fmt.Println("JSON編碼錯誤:", err)
    os.Exit(1)
  }
  // 創(chuàng)建HTTP請求
  request, err := http.NewRequest("POST", apiEndpoint, bytes.NewBuffer(jsonData))
  if err != nil {
    fmt.Println("創(chuàng)建HTTP請求錯誤:", err)
    os.Exit(1)
  }
  // 設(shè)置請求頭
  request.Header.Set("Content-Type", "application/json")
  request.Header.Set("Authorization", "Bearer "+apiKey)
  request.Header.Set("OpenAI-Organization", "org-TBIGMYjFzWqsshWUUQahkUng")
  // 發(fā)送HTTP請求
  client := http.Client{}
  response, err := client.Do(request)
  if err != nil {
    fmt.Println("發(fā)送HTTP請求錯誤:", err)
    os.Exit(1)
  }
  defer response.Body.Close()
  // 讀取響應(yīng)數(shù)據(jù)
  responseData, err := ioutil.ReadAll(response.Body)
  if err != nil {
    fmt.Println("讀取響應(yīng)數(shù)據(jù)錯誤:", err)
    os.Exit(1)
  }
  // 處理ChatGPT API的響應(yīng)
  var jsonResponse map[string]interface{}
  err = json.Unmarshal(responseData, &jsonResponse)
  if err != nil {
    fmt.Println("JSON解碼錯誤:", err)
    os.Exit(1)
  }
  // 獲取生成的消息
  responseMessage := jsonResponse["choices"].([]interface{})[0].(map[string]interface{})["message"].(map[string]interface{})["content"].(string)
  // 返回消息逐字輸出
  for _, char := range responseMessage {
    fmt.Print(string(char))
    time.Sleep(100 * time.Millisecond) // 每100毫秒輸出一個字
  }
}

請注意,這是一個簡單的示例,你可能需要根據(jù)實際需求進行修改和優(yōu)化。確保將YOUR_API_KEY替換為你在OpenAI上獲得的API密鑰。同時,考慮到安全性,你可能需要采取措施來保護API密鑰,比如在服務(wù)器端進行處理,而不是直接在前端處理

前端請求后端接口效果

以下是前端請求后端接口效果,示例代碼:

<template>
  <view class="chat-container">
    <view class="message-list">
      <!-- 這里是消息列表,用于顯示聊天記錄 -->
      <view v-for="(message, index) in messages" :key="index" class="message-item">
        <view :class="message.isSender ? 'sender-message' : 'receiver-message'" class="message-bubble">
          {{ message.content }}
        </view>
      </view>
    </view>
    <view class="input-bar">
      <!-- 輸入框和發(fā)送按鈕 -->
      <input class="input-box" type="text" v-model="newMessage" placeholder="輸入消息..." />
      <button @click="sendMessage" class="send-button">發(fā)送</button>
    </view>
  </view>
</template>
<script>
  export default {
    data() {
      return {
        messages: [],
        newMessage: '' // 用于存儲新消息
      };
    },
    methods: {
      sendMessage() {
        if (this.newMessage.trim() !== '') {
          const message = this.newMessage
          this.messages.push({
            content: this.newMessage,
            isSender: true
          });
          this.newMessage = ''; // 清空輸入框
          // 準(zhǔn)備發(fā)送的數(shù)據(jù)
          const data = {
            prompt:message,
            max_tokens:50,
            temperature:0.7
          };
          uni.request({
            url: '',//后端請求接口
            method: 'POST',
            data: data,
            success: (res) => {
              console.log('ChatGPT Response:', res.data);
              // 返回消息逐字輸出
              const responseMessage = res.data.message;
              let index = 0;
              this.messages.push({
                content: '',
                isSender: false
              });
              const printMessageInterval = setInterval(() => {
                const partialMessage = responseMessage.substring(0, index +
                1); // 獲取部分消息
                this.messages[this.messages.length - 1].content = partialMessage; // 更新最后一條消息內(nèi)容
                index++;
                // 當(dāng)消息輸出完畢后清除間隔函數(shù)
                if (index === responseMessage.length) {
                  clearInterval(printMessageInterval);
                }
              }, 100); // 每100毫秒輸出一個字
            },
            fail: (err) => {
              console.error('ChatGPT Error:', err);
              // 處理錯誤
            }
          });
        }
      }
    }
  };
</script>
<style scoped>
  /* 頁面容器 */
  .chat-container {
    display: flex;
    flex-direction: column;
    height: 100vh;
  }
  /* 消息列表 */
  .message-list {
    flex: 1;
    overflow-y: scroll;
    padding: 10px;
  }
  /* 消息項樣式 */
  .message-item {
    display: flex;
    justify-content: flex-start;
    margin-bottom: 10px;
  }
  .sender-message {
    align-self: flex-end;
    background-color: #c3e88d;
    padding: 8px;
    border-radius: 8px;
    margin-left: auto;
    /* 將發(fā)送者消息框推到右側(cè) */
  }
  .receiver-message {
    align-self: flex-start;
    background-color: #f0f0f0;
    padding: 8px;
    border-radius: 8px;
    margin-right: auto;
    /* 將接收者消息框推到左側(cè) */
  }
  .message-bubble {
    max-width: 70%;
    /* 調(diào)整消息框的最大寬度 */
  }
  /* 輸入框和發(fā)送按鈕 */
  .input-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px;
    position: fixed;
    bottom: 0;
    width: 100%;
    background-color: #ffffff;
  }
  .input-box {
    flex: 1;
    height: 36px;
    border: 1px solid #ccc;
    border-radius: 5px;
    padding: 5px;
    margin-right: 10px;
  }
  .send-button {
    background-color: #409eff;
    color: white;
    border: none;
    border-radius: 5px;
  }
</style>

以上就是PHP和GO對接ChatGPT實現(xiàn)聊天機器人效果實例的詳細(xì)內(nèi)容,更多關(guān)于PHP GO對接ChatGP聊天機器人的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang使用Token來驗證

    Golang使用Token來驗證

    token指的是一種用于驗證用戶身份或授權(quán)訪問的憑證,本文主要介紹了Golang使用Token來驗證,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • 淺析Go語言中的超時控制

    淺析Go語言中的超時控制

    日常開發(fā)中我們大概率會遇到超時控制的場景,而一個良好的超時控制可以有效的避免一些問題,所以本文就來和大家深入探討一下Go語言中的超時控制吧
    2023-10-10
  • 使用docker構(gòu)建golang線上部署環(huán)境的步驟詳解

    使用docker構(gòu)建golang線上部署環(huán)境的步驟詳解

    這篇文章主要介紹了使用docker構(gòu)建golang線上部署環(huán)境的步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 詳解Go語言如何利用高階函數(shù)寫出優(yōu)雅的代碼

    詳解Go語言如何利用高階函數(shù)寫出優(yōu)雅的代碼

    高階函數(shù)(Hiher-order?Function)定義為:滿足下列條件之一的函數(shù):接收一個或多個函數(shù)作為參數(shù);返回值是一個函數(shù)。本文為大家介紹了如何利用高階函數(shù)寫出優(yōu)雅的代碼,希望對大家有所幫助
    2023-01-01
  • 詳解golang中的結(jié)構(gòu)體編解碼神器Mapstructure庫

    詳解golang中的結(jié)構(gòu)體編解碼神器Mapstructure庫

    mapstructure是GO字典(map[string]interface{})和Go結(jié)構(gòu)體之間轉(zhuǎn)換的編解碼工具,這篇文章主要為大家介紹一下Mapstructure庫的相關(guān)使用,希望對大家有所幫助
    2023-09-09
  • Go語言學(xué)習(xí)之指針的用法詳解

    Go語言學(xué)習(xí)之指針的用法詳解

    這篇文章主要為大家詳細(xì)介紹了Go語言中指針的用法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Go語言有一定的幫助,需要的可以參考一下
    2022-04-04
  • 詳解go語言判斷管道是否關(guān)閉的常見誤區(qū)

    詳解go語言判斷管道是否關(guān)閉的常見誤區(qū)

    這篇文章主要想和大家一起探討一下在Go語言中,我們是否可以使用讀取管道時的第二個返回值來判斷管道是否關(guān)閉,文中的示例代碼講解詳細(xì),有興趣的可以了解下
    2023-10-10
  • Go語言共享內(nèi)存讀寫實例分析

    Go語言共享內(nèi)存讀寫實例分析

    這篇文章主要介紹了Go語言共享內(nèi)存讀寫方法,實例分析了共享內(nèi)存的原理與讀寫技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • go語言中的map如何解決散列性能下降

    go語言中的map如何解決散列性能下降

    近期對go語言的map進行深入了解和探究,其中關(guān)于map解決大量沖突的擴容操作設(shè)計的十分巧妙,所以筆者特地整理了這篇文章來探討一下go語言中map如何解決散列性能下降,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • Go語言并發(fā)編程 sync.Once

    Go語言并發(fā)編程 sync.Once

    這篇文章要介紹的是Go語言并發(fā)編程 sync.Once,sync.Once用于保證某個動作只被執(zhí)行一次,可用于單例模式中,下面文章我們來介紹一下它的使用方法,需要的朋友可以參考一下
    2021-10-10

最新評論

天全县| 伊通| 渝中区| 南宫市| 桦川县| 三门县| 比如县| 彰化县| 临猗县| 望谟县| 甘德县| 鄂伦春自治旗| 盐边县| 治县。| 邓州市| 府谷县| 射阳县| 海晏县| 铜山县| 渝北区| 措美县| 元氏县| 深泽县| 榆社县| 沧源| 奈曼旗| 普兰店市| 尉氏县| 遂溪县| 长汀县| 望奎县| 靖江市| 正镶白旗| 锡林郭勒盟| 威信县| 洪江市| 章丘市| 惠安县| 新宁县| 岱山县| 普兰县|