はじめに
最近、ChatGPT APIがリリースされたので、さっそく使ってみました。
今回リリースされたモデルは、以前のGPT-3.5系のモデルよりも1/10のコストで利用できるみたいです。
以下、Introducing ChatGPT and Whisper APIsより。
The ChatGPT model family we are releasing today, gpt-3.5-turbo, is the same model used in the ChatGPT product. It is priced at $0.002 per 1k tokens, which is 10x cheaper than our existing GPT-3.5 models.
前回はtext-davinci-003
を利用したChatGPTライクな音声対話アプリを作ったのですが、今回はChatGPTに搭載されている言語モデルのgpt-3.5-turbo
を利用したサンプルアプリを作ってみます。
サンプルアプリはGitHubに公開していますので、興味ある方はご覧ください。
サンプルアプリ
GitHub
ChatGPT APIの実装
まず、Alamofireを利用してChatGPT APIと連携します。(OpenAISwiftにgpt-3.5-turbo
のモデル選択が見当たらず、Alamofireで実装しています。)
公式ドキュメントのリクエストのフォーマット通りに、Alamofireでパラメータ設定を行います。
let headers: HTTPHeaders = [
"Content-type": "application/json",
"Authorization":"Bearer \(token)" // OpenAIのAPI_KEYを指定
]
let parameters: [String: Any] = [
"model": "gpt-3.5-turbo",
"messages": messages
]
AF.request(
"https://api.openai.com/v1/chat/completions",
method: .post,
parameters: parameters,
encoding: JSONEncoding.default,
headers: headers
).responseData(completionHandler: { response in
switch response.result {
case .success(let data):
// 成功後の処理
break
case .failure(let error):
// 失敗後の処理
break
}
})
parameters内のmodel
には、gpt-3.5-turbo
を、messages
には、roleとcontentからなるmessageオブジェクトの配列を渡します。roleはuser
, system
, assistant
のいずれかを指定します。
実際に以下のような例を考えると、
チャットの例
user: こんにちは。
assistant: こんにちは。
user: Swiftについて教えて。
messagesは以下のように記述されます。
let messages = [
["role": "user", "content":"こんにちは。"],
["role": "assistant", "content":"こんにちは。"],
["role": "user", "content":"Swiftについて教えて。"]
]
さらに次のように、system
を指定することで、アシスタントのふるまいを設定することも可能なようです。以下の例では、アシスタントに「人間と会話するチャットボット」のように振る舞ってもらえるはずです。
let messages = [
["role": "system", "content":"あなたは人間と会話するチャットボットです。"],
["role": "user", "content":"こんにちは。"],
["role": "assistant", "content":"こんにちは。"]
]
上記のように、アシスタントとユーザーの会話の履歴ごと、APIに渡すことで、アシスタントと会話を続けることが可能になります。会話の履歴がないとsingle-turnな単調な一問一答になります。
最後に
今回は、ChatGPT APIを使ってサンプルアプリを作ってみました。
最近、ChatGPTをよく使いますが本当に便利ですね。ただChatGPTをより良く使うには、使う側の能力(適切な質問を行うなど)も重要だなと実感しています。最近では、Prompt Engineeringといった言葉も耳にしますし。
私は質問を考えるのに時間がかかるので、ChatGPTへの質問を考えるAIみたいなのもあれば嬉しいですね。
Whisper APIもリリースされたので、そっちも使ってみようと思います。