国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用OkHttp流式請(qǐng)求OpenAI API(GPT API)接口

這篇具有很好參考價(jià)值的文章主要介紹了使用OkHttp流式請(qǐng)求OpenAI API(GPT API)接口。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

因?yàn)?GPT 流式請(qǐng)求的出色交互體驗(yàn),我們打算做一個(gè)開源基礎(chǔ)應(yīng)用,方便開發(fā)者快速集成項(xiàng)目。
本應(yīng)用集成 ChatGPT API,使用模型為 gpt-3.5-turbo,項(xiàng)目代碼為 Kotlin 語言開發(fā)的安卓應(yīng)用。
人機(jī)交互的趨勢已經(jīng)到來,本應(yīng)用框架也希望能幫助更多開發(fā)者快速集成 ChatGPT 體驗(yàn)到人機(jī)交互的樂趣!

正文

我們根據(jù)流式請(qǐng)求 Chat API 開源一個(gè)安卓項(xiàng)目,可方便開發(fā)者快速上手使用 開源地址

使用OkHttp流式請(qǐng)求OpenAI API(GPT API)接口使用OkHttp流式請(qǐng)求OpenAI API(GPT API)接口

直接上核心代碼,由 kotlin 編寫

import com.blankj.utilcode.util.GsonUtils
import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.ToastUtils
import com.google.gson.JsonObject
import okhttp3.*
import org.yameida.asrassistant.config.Config
import org.yameida.asrassistant.model.Message
import org.yameida.asrassistant.model.StreamAiAnswer
import java.io.BufferedReader
import java.io.IOException
import java.lang.Exception

object HttpUtil {

    /**
     * ChatGPT
     */
    fun chat(send: String, callback: CallBack) {
        val url = "https://api.openai.com/v1/chat/completions"
        val apiKey = "Bearer ${Config.apiKey}"
        val jsonObject = JsonObject()
        jsonObject.addProperty("model", "gpt-3.5-turbo")
        val body = RequestBody.create(MediaType.parse("application/json"), "{\n" +
                "  \"model\": \"gpt-3.5-turbo\",\n" +
                "  \"stream\": true,\n" +
                "  \"messages\": [{\"role\": \"user\", \"content\": \"$send!\"}]\n" +
                "}")
        val request: Request = Request.Builder().url(url).method("POST", body)
            .addHeader("Authorization", apiKey)
            .build()
        OkHttpUtil.okHttpClient.newCall(request).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                e.printStackTrace()
                ToastUtils.showLong("網(wǎng)絡(luò)請(qǐng)求出錯(cuò) 請(qǐng)檢查網(wǎng)絡(luò)")
            }
            override fun onResponse(call: Call, response: Response) {
                try {
                    val responseBody = response.body()
                    if (responseBody != null) {
                        val bufferedReader = BufferedReader(responseBody.charStream())
                        var line = bufferedReader.readLine()
                        var index = 0
                        val sb = StringBuilder()
                        while (line != null) {
                            val msg = convert(line, "1", index++)
                            if (msg != null) {
                                sb.append(msg.content)
                                callback.onCallBack(sb.toString(), false)
                            }
                            line = bufferedReader.readLine()
                        }
                        callback.onCallBack(sb.toString(), true)
                    }
                } catch (e: Exception) {
                    e.printStackTrace()
                    ToastUtils.showLong("網(wǎng)絡(luò)請(qǐng)求出錯(cuò) 請(qǐng)檢查配置")
                }
            }
        })
    }

    fun convert(answer: String, questionId: String, index: Int): Message? {
        val msg = Message()
        msg.content = ""
        msg.messageType = "normal"
        msg.id = questionId
        if ("data: [DONE]" != answer) {
            val beanStr = answer.replaceFirst("data: ", "", false)
            val aiAnswer = GsonUtils.fromJson(beanStr, StreamAiAnswer::class.java) ?: return null
            val choices = aiAnswer.choices
            if (choices.isEmpty()) {
                return null
            }
            val stringBuffer = StringBuffer()
            for (choice in choices) {
                if (choice.finish_reason != "stop") {
                    if (choice.delta.content != null) {
                        stringBuffer.append(choice.delta.content)
                    } else {
                        return null
                    }
                }
            }
            msg.content = stringBuffer.toString()
            if (index == 0) {
                if (msg.content == "\n\n") {
                    LogUtils.e("發(fā)現(xiàn)開頭有兩次換行,移除兩次換行")
                    return null
                }
            }
        } else {
            msg.type = "stop"
        }
        msg.index = index
        return msg
    }

    interface CallBack {
        fun onCallBack(result: String, isLast: Boolean)
    }
}

// 使用方法
HttpUtil.chat(result, object : HttpUtil.CallBack {
    override fun onCallBack(result: String, isLast: Boolean) {
        runOnUiThread {
        	//更新數(shù)據(jù)或UI
            updateData()
        }
    }
})

總結(jié)

至此,你應(yīng)該已經(jīng)完成了Chat機(jī)器人智能問答對(duì)接,一個(gè)智能QA機(jī)器人就實(shí)現(xiàn)了,后續(xù)我會(huì)繼續(xù)進(jìn)行AI能力的擴(kuò)展,如多模態(tài)等。喜歡本文可以給開源項(xiàng)目一個(gè) star~有問題可以留言或私信我。文章來源地址http://www.zghlxwxcb.cn/news/detail-514660.html

到了這里,關(guān)于使用OkHttp流式請(qǐng)求OpenAI API(GPT API)接口的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用 Python 流式傳輸來自 OpenAI API 的響應(yīng):分步指南

    使用 Python 流式傳輸來自 OpenAI API 的響應(yīng):分步指南

    OpenAI API 提供了大量可用于執(zhí)行各種 NLP 任務(wù)的尖端 AI 模型。但是,在某些情況下,僅向 OpenAI 發(fā)出 API 請(qǐng)求可能還不夠,例如需要實(shí)時(shí)更新時(shí)。這就是服務(wù)器發(fā)送事件 (SSE) 發(fā)揮作用的地方。 SSE 是一種簡單有效的技術(shù),用于將數(shù)據(jù)從服務(wù)器實(shí)時(shí)流式傳輸?shù)娇蛻舳恕?如何在 W

    2023年04月19日
    瀏覽(39)
  • 使用SSE技術(shù)調(diào)用OPENAI接口并實(shí)現(xiàn)流式輸出,用PHP語言實(shí)現(xiàn)

    作為AI語言模型服務(wù)提供商,OpenAI 提供了一系列的 API 接口,其中大部分需要通過 HTTP 請(qǐng)求訪問。對(duì)于大量數(shù)據(jù)的請(qǐng)求,傳統(tǒng)的同步請(qǐng)求會(huì)導(dǎo)致網(wǎng)絡(luò)響應(yīng)變慢,無法滿足實(shí)時(shí)數(shù)據(jù)處理和分析的需求。因此,為了優(yōu)化這些接口的調(diào)用效率,我們可以利用 SSE(Server Sent Events) 技術(shù)來

    2024年02月11日
    瀏覽(22)
  • 通過微軟Azure調(diào)用GPT的接口API-兼容平替OpenAI官方的注意事項(xiàng)

    眾所周知,我們是訪問不通OpenAI官方服務(wù)的,但是我們可以自己通過代理或者使用第三方代理訪問接口 現(xiàn)在新出臺(tái)的規(guī)定禁止使用境外的AI大模型接口對(duì)境內(nèi)客戶使用,所以我們需要使用國內(nèi)的大模型接口 國內(nèi)的效果真的很差,現(xiàn)在如果想使用GPT大模型,可以使用微軟Azure的

    2024年02月12日
    瀏覽(32)
  • 使用小程序的wx.request()請(qǐng)求chatGpt流式接口的實(shí)現(xiàn)

    使用小程序的中wx.request()請(qǐng)求chatGpt流式接口的實(shí)現(xiàn) 可以成功接收到數(shù)據(jù),但是遇到了下面的問題,就是在接收的數(shù)據(jù)如果是中文會(huì)出現(xiàn)亂碼,英文沒有問題,可以正常解析出來。 大家有遇到這個(gè)問題嗎,求解,求解…

    2024年02月12日
    瀏覽(17)
  • ChatGPT流式傳輸(stream=True)的實(shí)現(xiàn)-OpenAI API 流式傳輸

    默認(rèn)情況下,當(dāng)請(qǐng)求OpenAI的API時(shí),整個(gè)響應(yīng)將在生成后一次性發(fā)送回來。如果需要的響應(yīng)比較復(fù)雜,就會(huì)需要很長時(shí)間來等待響應(yīng)。 為了更快地獲得響應(yīng),可以在請(qǐng)求API時(shí)選擇“流式傳輸”。 要使用流式傳輸,調(diào)用API時(shí)設(shè)置 stream=True 。這將返回一個(gè)對(duì)象,以 data-only server-

    2024年02月08日
    瀏覽(34)
  • PHP實(shí)現(xiàn)chatGPT流式輸出代碼,OpenAI對(duì)接,支持GPT3.5/GPT4

    ?源碼下載地址:https://gitee.com/haoyachengge/chatgpt-speed.git 本文是sse實(shí)現(xiàn)方式,非常的簡單。當(dāng)然也可以用websocket方式實(shí)現(xiàn),我也會(huì)繼續(xù)更新

    2024年02月14日
    瀏覽(31)
  • Observability:使用 OpenTelemetry 和 Elastic 監(jiān)控 OpenAI API 和 GPT 模型

    Observability:使用 OpenTelemetry 和 Elastic 監(jiān)控 OpenAI API 和 GPT 模型

    作者:David Hope ChatGPT 現(xiàn)在很火,它打破了互聯(lián)網(wǎng)。 作為 ChatGPT 的狂熱用戶和 ChatGPT 應(yīng)用程序的開發(fā)者,我對(duì)這項(xiàng)技術(shù)的可能性感到無比興奮。 我看到的情況是,基于 ChatGPT 的解決方案將呈指數(shù)級(jí)增長,人們將需要監(jiān)控這些解決方案。 由于這是一項(xiàng)非常新的技術(shù),我們不想讓

    2023年04月17日
    瀏覽(29)
  • Okhttp實(shí)現(xiàn)參數(shù)請(qǐng)求接口用postman的form-data請(qǐng)求接口

    Okhttp實(shí)現(xiàn)參數(shù)請(qǐng)求接口用postman的form-data請(qǐng)求接口

    1.看下圖,是不是這種訪問方式 2.如果是這種訪問方式,使用okhttp請(qǐng)求接口是這樣的。

    2024年02月04日
    瀏覽(26)
  • openai開放gpt3.5-turbo模型api,使用python即可寫一個(gè)基于gpt的智能問答機(jī)器人

    openai開放gpt3.5-turbo模型api,使用python即可寫一個(gè)基于gpt的智能問答機(jī)器人

    使用 pip 安裝openai庫,注意 gpt3.5-turbo 模型需要 python=3.9 的版本支持,本文演示的python版本是 python==3.10.10 需要提前在 openai 官網(wǎng)上注冊(cè)好賬號(hào),然后打開 https://platform.openai.com/account/api-keys 就可以創(chuàng)建接口 keys 每個(gè)賬號(hào)注冊(cè)完成會(huì)有18美元在里面,每次調(diào)用api,就會(huì)花費(fèi)里面的

    2024年02月06日
    瀏覽(103)
  • Java請(qǐng)求Http接口-OkHttp(超詳細(xì)-附帶工具類)

    Java請(qǐng)求Http接口-OkHttp(超詳細(xì)-附帶工具類)

    簡介:OkHttp是一個(gè)默認(rèn)有效的HTTP客戶端,有效地執(zhí)行HTTP可以加快您的負(fù)載并節(jié)省帶寬,如果您的服務(wù)有多個(gè)IP地址,如果第一次連接失敗,OkHttp將嘗試備用地址。這對(duì)于IPv4 + IPv6和冗余數(shù)據(jù)中心中托管的服務(wù)是必需的。OkHttp啟動(dòng)具有現(xiàn)代TLS功能(SNI,ALPN)的新連接,并在握手

    2024年02月12日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包