質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OpenAI Gym

OpenAI Gymは、強化学習を開発・強化するためのシミュレーション環境です。強化学習における実験や評価環境などを標準化し提供することを目的としています。さらに、結果をアップロードしたり、他の人の実行結果や実装を見ることも可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

ChatGPT

ChatGPTは、OpenAI社の提供するインタラクティブなテキストコミュニケーションを行うことができるAIサービスまたは、そのアルゴリズムのモデル名です。

Q&A

解決済

1回答

578閲覧

swiftでのChatGPT API呼び出し

yesmanp

総合スコア1

OpenAI Gym

OpenAI Gymは、強化学習を開発・強化するためのシミュレーション環境です。強化学習における実験や評価環境などを標準化し提供することを目的としています。さらに、結果をアップロードしたり、他の人の実行結果や実装を見ることも可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

ChatGPT

ChatGPTは、OpenAI社の提供するインタラクティブなテキストコミュニケーションを行うことができるAIサービスまたは、そのアルゴリズムのモデル名です。

0グッド

0クリップ

投稿2023/05/27 09:15

実現したいこと

  • swiftでのChatGPT APIを使ったアプリ開発
  • APIがどうしても使えません。
  • ViewControllerクラスにAPI呼び出しを実装したいのです

前提

プログラミング初学者ですがChatGPTにコードを聞きつつアプリ開発に挑戦しています。

発生している問題・エラーメッセージ

ChatGPT APIはどのようにしたら呼び出すことができますか
ChatGPTにやり方を聞きつつ実装していますが、エラーが多すぎてどこが間違っているのかいまいちわかりません。
簡単な呼び出し方をおしえていただけると幸いです。

該当のソースコード

ここまで実装しました。
しかし結果は何も返ってきません。。。
ネットで調べながら実装したのですが、不備を指摘いただきたいです
APIトークンはよくわからず2ヶ所入れいています。

import UIKit import OpenAISwift class ViewController: UIViewController { let apiKey = "TOKEN" let model = "gpt-3.5-turbo" let prompt = "What is the meaning of life?" let maxTokens = 50 override func viewDidLoad() { super.viewDidLoad() } func callChatGPTAPI() { let openAI = OpenAISwift(authToken: "TOKEN") openAI.sendCompletion(with: prompt) { result in switch result { case .success(let response): // API呼び出し成功時の処理 let reply = response.choices?.first?.text ?? "" print(reply) print("finish") case .failure(let error): // API呼び出し失敗時の処理 print("Error: \(error)") } } } @IBAction func call(_ sender: Any) { callChatGPTAPI() } }

試したこと

これを実行するとエラーは出ないのですが、ログに記述されるはずのAPI返却値が記述されません。
トークンの正しい記入方法はよくわからず、二箇所記述したらとりあえずエラーは消えました。
Webでサンプルコードを探していろいろ取り組みましたがダメでした。ViewControllerクラスに実装したいのですが良い例が見つからずいます。

補足情報(FW/ツールのバージョンなど)

Xcodeを使って開発。
OpenAISwiftパッケージをインポート済み

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2023/05/27 10:16

"TOKEN" のところほ、実際に取得した API key を入れてますか?
yesmanp

2023/05/28 08:38

はい、間違いなくトークンを入力しています。 実際にアプリリリースするとなった時に、ここにこのまま入力しておくのはセキュリティ的に、、、という話は聞いたことありますが一旦は動作検証したく、入力している次第です
yesmanp

2023/05/28 08:39

トークンというよりAPI keyですね
hoshi-takanori

2023/05/28 10:26

The meaning of life is subjective, and different people may have different answers とか言ってますけど。
hoshi-takanori

2023/05/28 10:32

そもそも callChatGPTAPI メソッドは呼ばれてるんだろうか…。
yesmanp

2023/05/28 17:10

まさに、メソッドが呼ばれているのかが判断できずです....。 呼んだ結果空文字が返却されているのか、呼んだけど時間がかかって返却値が返って来ていないのか、呼んだけど空振りしているのか、呼べていないのかわかりません。 API呼び出し自体それほど難しいものでは無いのだと思っておりました、高を括っておりました。。
hoshi-takanori

2023/05/28 18:43

callChatGPTAPI メソッドは @IBAction func call(_ sender: Any) から呼ばれることになってて、この @IBAction ってやつは storyboard 上でボタンか何かに紐づいてるんだと思いますが、その紐付けがうまくいってない可能性もありますよね。試しに @IBAction の中で print してみては。
yesmanp

2023/05/29 11:31

ご教授ありがとうございます。 試しに下記のように書き換えて実行してみました ``` @IBAction func call(_ sender: Any) { print("呼び出します...") callChatGPTAPI() print("呼び出しました") } ``` するとログには下記のように並びました ``` 呼び出します... 呼び出しました finish ``` 想定では「呼び出しました」が最後に来るはずでした。 つまり呼び出しに時間がかかっていて最後まで待たず次の処理へ行ったようです。 加えて、コールした結果はやはり空でした。。。 少しは状況が整理でき一歩前進できました、、、、
hoshi-takanori

2023/05/29 13:27

あ、finish は表示されてたんですね。そういう大事なことは…。 print の順番ですが、API の結果は非同期なので、その順番で合ってます。が、reply が空なのは変ですね。
hoshi-takanori

2023/05/30 08:32

とりあえず finish が表示されるってことは case .success には来てるはずですね。 で、response.choices という配列?の最初の要素だけを表示してますが、print(response) で response 全体を表示してみては。
yesmanp

2023/05/30 11:35

ご助言ありがとうございます。 なるほど、print(response) で response 全体をログ表示してみました。結果下記が出力されました。 ------- 呼び出します... 呼び出しました OpenAI<TextResult>(object: nil, model: nil, choices: nil, usage: nil, data: nil) finish ------- どうやら、responseも各項目nilとのことなので、呼び出し結果が空ですね。。これによってreplyも空であることがわかりました。一歩前進しました。ありがとうございます。 即時で返却値のログが出るのは、ChatGPTの性質上違和感なので、答えの生成を待てていないのかなーと思ったりもしています。。。
yesmanp

2023/05/30 11:47

apikeyをデタラメに書き換えても結果が変わらないことに気づき、またapikeyがどうしてもログ出力できないので、このキーがうまく渡せていないのではないかと思って来ました・・・
guest

回答1

0

自己解決

自己解決しました。
コメントをくださった方、大変勉強になりました。ありがとうございます。
OpenAIのAPI取得をし直したところうまく行きました。

投稿2023/05/31 17:41

yesmanp

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問