はじめに
この記事は、chatGPTの口調を変えるiPhoneアプリを作り、実際にいろんなキャラを演じてもらったものをまとめたものです。
ChatGPTをswiftで使用する。
ChatGPTをiPhoneアプリ上で使用するには、OpenAIの提供しているAPIが必要です。詳しいやり方はChatGPTが教えてくれるので、ぜひ訊いてみてください。(最初に教えてもらったコードではうまくいきませんでした。何度か修正を求めると、最終的にうまく行くコードを教えてもらえるはずです)
以下が完成したコードです。
import SwiftyJSON
var chatArray: [[String: String]] = [["role": "system", "content": "あなたは優秀なアシスタントです。"]]
func chatGPT(prompt: String, completion: @escaping (Result<String, Error>) -> Void) {
let apiKey = "あなたのAPIキー"
let headers = [
"Authorization": "Bearer \(apiKey)",
"Content-Type": "application/json"
]
let parameters: [String: Any] = [
"model": "gpt-3.5-turbo",
"messages": chatArray
]
let url = URL(string: "https://api.openai.com/v1/chat/completions")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = try? JSONSerialization.data(withJSONObject: parameters)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
completion(.failure(error))
HUD.hide()
} else if let data = data {
print("Raw JSON data: \(String(data: data, encoding: .utf8) ?? "nil")")
let jsonValue = try? JSON(data: data)
if let text = jsonValue?["choices"][0]["message"]["content"].string {
completion(.success(text))
} else {
completion(.failure(NSError(domain: "ChatGPTError", code: -1, userInfo: [NSLocalizedDescriptionKey: "Invalid JSON response"])))
}
}
}
task.resume()
}
let prompt = textField.text
chatGPT(prompt: prompt!) {[self] result in
switch result {
case .success(let response):
print("Response: \(response)")
chatArray.append(["role": "assistant", "content": response])
case .failure(let error):
print("Error: \(error.localizedDescription)")
}
}
ChatGPTの話し方を変える
ChatGPTに会話の内容を送る際の、会話内容の一番最初の部分がAIの属性になります。上記コードの場合は、"role": "system", "content": "あなたは優秀なアシスタントです。"
という部分です。なので、この部分を変えてあげるとAIの話し方が変わります。
この記事に詳しいのでぜひ見てみてください。
今回作成したアプリでは、AIの属性を決める部分を「あなたは優秀なアシスタントです。あなたは通常の口調で話します。」とし、このうち「優秀なアシスタント」「通常の口調」という部分を自由に変更できるようにしました。
chatArray[0]["content"] = "あなたは\(zokuseiTextField.text!)です。あなたは\(kutyouTextField.text!)で話します。"
実際に変更してみた結果がこちらです。
通常
「あなたは優秀なアシスタントです。あなたは通常の口調で話します。」
ロボット✖️関西弁
横暴な王様✖️博多弁
オタクくん✖️津軽弁
変な人✖️変な口調
「あなたは変な人です。あなたは特殊な口調(語尾に「ばびょーん」をつける。文の途中に「ぶっぴょー」を入れる。一人称は「最強の俺様」)で話します。」
関西弁のようなメジャーな方言であれば話してくれますが、津軽弁のような話者の少ない方言は不得意みたいです。
また、方言だけでなく、細かい話し方も設定すればある程度その通りに話してくれるだけでなく、その設定からさらに新たに設定も追加してくれるみたいです。5つ目のバージョンでは、一人称を「最強の俺様」としただけで厨二病っぽいキャラクターも作ってくれました。
特に、一人称の設定をした場合が一番はっきりとキャラクターとしての特徴が現れました。
侍✖️侍口調
「あなたは侍です。あなたは侍口調(一人称は「某」)で話します。」
ただ、真面目な話しようとするとこうしたキャラクターは引っ込んでしまい、普段の話し方に戻ってしまいます。
恐ろしい獣✖️恐ろしい話し方
「あなたは恐ろしい獣です。あなたは恐ろしい話し方(一人称は「オレ」。二人称は「てめー」。他人を見下した話し方をする。他人を罵る話し方をする。他人を不快にさせる話し方をする。)」
キャラクター性を保ったまま会話をするには、こちらから話しかける内容や、キャラクターづけに気をつける必要がありそうです。
これをうまく使えれば、ゲームのキャラクター作成なんかにも応用できそうです。ほかにもこういう話し方できたよとかあったらぜひ教えてください。