일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- molocon24후기
- etc2
- ChatGPT
- dxt
- cookcontent
- xcode-select_jeknins
- jenkins_owasp
- asset database_androidlib
- jenkins_계정삭제
- owasp_dependency_check
- unity package_androidlib
- unreal_binaryselection
- xcode_targeting
- unrealbuildcommand
- owasp_depdendency_check_shell
- python3.12.4
- unreal_contentmanagement
- jenkins_role관리_플러그인
- Unity2022
- sourcetree_authencicationfailed
- unreal_flavorselection
- unrealbuildshellscript
- apkipa업로드저장소
- sourcetree_accessdenied
- molocon24
- jenkins_sudo
- unreal_android_빌드옵션
- appcenter대체
- python_distutils_module_missing
- molocon24내용정리
- Today
- Total
mystic-agit 개발 블로그
ChatGPT Android 프로젝트 적용하기 본문
ChatGPT API를 사용하여 Android 프로젝트에서 사용하도록 적용해보았다.
( ChatGPT 페이지에서 회원가입을 진행하는 방법은 링크 페이지에서 확인 )
# GitHub 프로젝트
- Git 링크 : https://github.com/mystic707/ChatGPTSample
- 빌드 테스트 시기 : 2023. 04
- Android OS 12 test
- 샘플앱 버전 : 1.1
- Git 링크 샘플앱 질문 입력 가능하도록 UI 구성 업데이트 (버전 1.2)
[ 설정에 필요한 정보 확인하기 ]
(1) API 키 생성
ChatGPT 페이지에서 회원가입을 하였다면
https://platform.openai.com/account/api-keys 페이지에서 Create new secret key 수행 시
API key를 발급받을 수 있고, 다시 확인 불가능하기 때문에 해당 값을 기억해달라는 내용의 팝업 안내가 나온다.
해당키는 API 통신 시 사용되므로 프로젝트 내 메모할 수 있는 곳에 기록이 필요하다.
[ API 스펙 확인하기 ]
https://platform.openai.com/docs/api-reference/completions
API 소개 페이지에서 Request의 몇 가지 키의 스펙을 확인해보자.
Key | Description |
model (required) |
- 요청한 text에 답을 찾는 프로세스 모델 - 업데이트 시 모델이 추가되는 것으로 보이고 API 페이지에서 모델 목록과 개요를 확인할 수 있음 |
prompt (optional) |
- 요청할 text - 영문 혹은 한글로 표현할 수 있음 |
max_token (optional) |
- 답 문장에 대한 최대 토큰 수 - 토큰은 문장의 구성에 따라 모델이 정의하는 로직에 따라 정해짐 (예 : The airplane is machine > The / air/plane / is / machine (5 tokens) - 대부분의 모델의 최대 토큰 수는 2048 (4096을 제공하는 일부 모델도 있음) - default value : 16 |
temperature (optional) |
- 답 문장에 대한 집중도 범위(?) - 0에 가까울 수록 보다 결정적인 답을 반환(빈도가 더 높은 정보를 주는 것으로 추정) - 2에 가까울 수록 보다 무작위적인 답을 반환 - default value : 1, range : 0~2 |
top_p (optional) |
- 답변된 token에 대해서 어느 빈도의 상위 token을 고려할지 판단 기준 값(?) - 0.1 이라면 상위 10% 빈도 상위를 고려, 1이라면 모두를 고려 - default value : 1 |
logprobs (optional) |
- 가장 가능성이 높은 token을 반환 (응답에서 주요 키워드를 추출하는데 도움이 될듯(?)) - default value : 1, max value : 5 |
다른 키의 설명도 있지만 주요 사용될 것으로 보이는 키를 몇가지 확인해보았다.
API Response의 스펙도 확인해보자.
Key | Key(inner path) | Description |
choices | text | - 질문의 응답 text |
[ Android Studio 프로젝트에 API 적용하기 ]
(1) Android Studio 프로젝트 생성
(2) build.gradle 내 okhttps 라이브러리 참조 추가
(https://square.github.io/okhttp/ 페이지 참고)
implementation("com.squareup.okhttp3:okhttp:4.10.0")
(3) AndroidManifest에 INTERNET permission 추가
<uses-permission android:name="android.permission.INTERNET" />
(4) requestChatGPT() 메서드 작성
(ChatGPT : https://platform.openai.com/docs/api-reference/completions/create 참고)
(OkHttp : https://square.github.io/okhttp/ 참고)
내용이 간단하여 메인 액티비티 코드 자체를 모두 첨부해보았다.
package com.example.mysticagitchatgpt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import okhttp3.*
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import java.io.IOException
class MainActivity : AppCompatActivity() {
val HttpContentType_JSON: MediaType = "application/json; charset=utf-8".toMediaType()
var okHttpClient = OkHttpClient()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 메서드 호출
requestChatGPT("what is apple?")
}
fun requestChatGPT(question: String) {
Log.d("mysticagit", "question : $question")
// request body에 들어갈 Json
var jsonBody: JSONObject = JSONObject()
// API 레퍼런스 참고 ( https://platform.openai.com/docs/api-reference/completions/create )
jsonBody.put("model", "text-davinci-003")
jsonBody.put("prompt", question)
jsonBody.put("max_tokens", 30)
jsonBody.put("temperature", 0)
// request에 필요한 요청 url(url), API Key(header) 설정
// (API Key 확인하기 : https://platform.openai.com/account/api-keys )
var requestBody: RequestBody = (jsonBody.toString()).toRequestBody(HttpContentType_JSON)
var request: Request = Request.Builder()
.url("https://api.openai.com/v1/completions")
.header("Authorization", "Bearer sk-AbcDeAbcdeABCDE1234567890J1234567890") // API Key 발급받은 것을 사용하세요!
.post(requestBody)
.build()
// 요청
okHttpClient.newCall(request).enqueue( object : Callback {
// 응답 성공 시
override fun onResponse(call: Call, response: Response) {
Log.d("mysticagit", "onResponse")
if(response.isSuccessful) {
var jsonResponse = JSONObject(response.body?.string())
// response body에서 choices 내 답변된 text 데이터 확인
var jsonResponseArray = jsonResponse.getJSONArray("choices")
var result: String? = jsonResponseArray.getJSONObject(0).getString("text")
// 결과 출력
result?.let {
Log.d("mysticagit", "answer : $it")
} ?: {
Log.d("mysticagit", "answer is empty")
}
}
}
// 응답 실패 시
override fun onFailure(call: Call, e: IOException) {
Log.d("mysticagit", "onFailure")
}
})
}
}
(5) 호출 결과
간단하게 로그로 결과를 확인해보았다. UI를 구성해서 질문을 텍스트로 받고, 응답을 노출시킨다면 대화형으로 구성 가능할 것으로 보인다.
(4) 응답 확인 후에
https://platform.openai.com/account/usage 사용량을 확인할 수 있다.
Token 처리량에 따라 사용량이 발생하고 현재 무료로 사용 가능한 최대량은 5 달러로 보인다.
만약 추가 요금을 지불하고 사용하려는 경우 Billing 페이지에서 지불이 가능해 보인다
[ 레퍼런스 ]
'Platform > ChatGPT' 카테고리의 다른 글
ChatGPT 웹 페이지 서비스 사용방법 (0) | 2023.03.16 |
---|