提供您專業技能的最佳管道,IT企業主管唯一推薦

提供您專業技能的最佳管道,IT企業主管唯一推薦

2023年3月1日 星期三

如何利用retrofit從Android連結到OpenAI-恆逸講師分享



最近打開科技新聞大概都是ChatGPT又有什麼驚人智慧之舉,或者是智商能夠值年薪多少元的工程師,在在都說明了AI工具的開發一日千里,不管是在客戶端或者是服務器端都可以思考如何善用這些AI的api來促進應用程式更強大的功能,因此在本文中我們將說明如何用Android Studio連結到OpenAI的api。


首先OpenAI API的框架是使用restful,所以我們可以使用retrofit這套函式庫, 它的速度快,並且介面清晰,可以產生出型態安全的HTTP客戶端。為了要能夠使用它,首先可以在build.gradle中加上需要的library,除了retrofit之外,還需要加上gson處理時相關的函式庫,另外為了偵錯方便,可以加上okhttp3的logging函式庫如下

    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.google.code.gson:gson:2.8.9'
    implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'      

再來由於需要使用到網路,記得在AndroidManifest.xml中加上網路的權限。

    <uses-permission android:name="android.permission.INTERNET"/>    

完成準備工作之後,可以去https://platform.openai.com/account/api-keys上申請secret key來存取使用。

Retrofit的使用中最重要的部份是生成一個http的客戶端,此處可以使用OkHttpClient,並且增加授權的檔頭,以方便OpenAPI進行認證,可以參考如下kotlin程式碼:

    val client = OkHttpClient.Builder()
    .addInterceptor(interceptor) // 此處是HttpLoggingInterceptor
    .addInterceptor { chain ->
        val original = chain.request()
        val request = original.newBuilder()
            .addHeader("Authorization", "Bearer $TOKEN")
            .method(original.method(), original.body())
            .build()
        chain.proceed(request)
    }
    .build()    

此處由於我們使用的API是Complete,也就是問OpenAPI一個問題它會接話完成,所以可以定義如下的介面,我們只需要提供Request與Response相關的物件,接著Http之後取得並且轉換就可以完全交給gson跟retrofit來處理:

    interface ApiService {
        @POST("/v1/completions")
        fun complete(@Body req:CompleteRequest): Call
    }    

由於呼叫Complete時必須要提供模型名稱,要輸入的字串,溫度(也就是亂度)和使用模型的最大token長度,所以CompleteRequest可以如下所示:

    data class CompleteRequest(
    @SerializedName("model") val model: String?,
    @SerializedName("prompt") val prompt: String?,
    @SerializedName("temperature") val temperature: Int,
    @SerializedName("max_tokens") val maxTokens: Int,
    )

而最後在主程式呼叫時,依照OpenAPI的呼叫可以提供模型名如text-davinci-003,或者其它想用的模型,字串可以由UI輸入,溫度設定為0,也就是模型會使用最大機率的結果,並且使用最多的token數量是50,可以參考如下的程式。

    val call = apiService?.complete(
        CompleteRequest(
            "text-davinci-003", editText.text.toString(),
            0, 50
        )
    )    

之後再呼叫enqueue並且取得結果即可,此處可以發現在retrofit呼叫時,不用自己再額外處理執行緒之間的問題,如果沒有特別指定時回應的執行緒是主執行緒,可以直接做UI的更換。

實作完之後就可以開始詢問了,例如可以使用英文詢問如何做位好的工程師:

此時可以看到OpenAI頗為中肯的回答如下:

另外OpenAI的使用量也可以在 https://platform.openai.com/account/usage 中取得,因此在開發時也可以時時關注是不是超過自己的限額喔。

在本文中我們說明了如何在Android透過retrofit連結到OpenAI API的大致流程,但因為此API截至目前依然還是需要收費的,如果需要對使用量做權限控管,則建議從後台發出API呼叫,再讓Android依照本文所述方式連結到自己的後台以便進行認證、授權與後續權限配額的控制喔。

相關學習資源


Related Posts:

  • 如何利用retrofit從Android連結到OpenAI-恆逸講師分享最近打開科技新聞大概都是ChatGPT又有什麼驚人智慧之舉,或者是智商能夠值年薪多少元的工程師,在在都說明了AI工具的開發一日千里,不管是在客戶端或者是服務器端都可以思考如何善用這些AI的api來促進應用程式更強大的功能,因此在本文中我們將說明如何用Android Studio連結到OpenAI的a… Read More
  • 簡介網頁統計圖表函式庫Chart.js 文:顏怡宏 精誠資訊/恆逸教育訓練中心資深講師在這個資訊爆炸的時代,我們經常性的要面對海量的數值資料,這些數值資料如果要用傳統表格的方式來呈現,很容易讓網站來訪者望而生畏。如果只需要讓使用者能夠在最短的時間內,快速明白這些數值的相對關係與比較,最直覺的方式就是將龐大的數值資料圖像化,將數值資料轉換各… Read More
  • 資安入門選課指南:想入門,免放棄,照這樣選就對了!  文:唐任威 恆逸教育訓練中心資深講師在資安即國安時代,資安已然顯學,但想入門資安領域,卻不知如何下手嗎?資安入門課程之眾,其內容卻又大多重複;每一門課看來都厲害至極,可內容多元複雜,讓人暈頭轉向、目眩神迷。本文將剖析當今主流的資安入門課程,讓你清楚抉擇,順利邁入資安之路。 &l… Read More
  • Power Platform實踐了在SaaS服務架構下的資料倉儲與商務營運環境文:屠立剛 精誠資訊/恆逸教育訓練中心資深講師 從維基百科上的「資料倉儲/ Data Warehouse」說明可知,這是提供企業在商務營運下,對資訊架構所提供的資訊內容的報告和資料分析的系統,普遍被認為是「商業智慧/BI/ Business Intelligence」的核心組件。 「資料倉儲… Read More
  • 6個常見的雲安全錯誤及避免的方法雲端運算為各種規模的IT服務提供更大的靈活性與可靠性,同時更能降低成本。然而對於許多企業來說,雲端安全性一直都是許多決策者最頭痛的問題。根據2022年一項針對大型企業安全專業人員的調查,81%的受訪者表示過去一年中曾出現雲端安全事件,此外超過一半的受訪者表示,他們認為雲端安全風險比本地IT的安全問題… Read More

0 意見:

張貼留言