OpenAI APIとは?
昨今ではAIと言えばChatGPTと考えている人もいる程に世の中に浸透してきたChatGPT。
このChatGPTを外部から利用する際に使うのがOpenAI APIです!
APIを経由する事で自分のプログラムから自由にChatGPTの機能を使う事が可能になります。
APIの利用条件
APIの利用には専用のAPIキーの取得が必要になります。
そしてAPIは従量課金となるため、使う度にお金が掛かっていきます。
事前にチャージした分が無くなれば終了といった形にもできるので、実際には無限にお金が掛かる訳ではありませんが、お金が掛かるという部分をネックに感じる人も多いかもしれません。
お金が掛かると聞くと無料版でも十分なのでは?と感じるかもしれませんが、gpt-4o-mini辺りを使えば1度に0.01ドル以下の金額しか掛からない事が殆どなので少額でも検証には十分に使えます。
なぜC#で使うの?
C#は、多くのアプリケーション開発で使用される人気の高いプログラミング言語です。
ただOpenAI APIはPythonやURLから直接制御する説明が多いので、公式が公開しているOpenAI .NET API Libraryを使った記事も作ってみようというのが今回の経緯です。
実は意外と公式Libraryの情報が少なくて、ChatGPT自身に質問しても出来るはずの事を出来ないと言われたりしました……。
他にも公式が公開しているサードパーティー製のパッケージも多数紹介されているので、興味がある方はそちらを使っても問題ありません。
今回は記事にしませんが、OpenAI-API-dotnetはカスタマイズもしやすく自身で拡張したい人には良いかもしれません。
準備
環境の構築
C#プロジェクトでChatGPTを使用するには、以下の手順を実行します。
- Visual Studioまたはその他のC#対応IDEをインストール
- .NET 8.0以降の環境を用意
- NuGet、又はターミナルからOpenAIをインストール
APIキーの取得
ChatGPTを使用するには、OpenAIのAPIキーが必要です。
以下の手順を参考にしてください。
- OpenAI公式サイトでアカウントを作成
- ダッシュボードからAPIキーを生成
- 安全な場所に保存
※公開してしまうと他人にAPIを使われてお金が飛んでいきます
コードの実装
プロジェクトのセットアップ
まず、新しいC#コンソールアプリケーションを作成します。
その後、OpenAI-dotnetをインストールします。
dotnet add package OpenAI
基本的なコード例
以下は、ChatGPTと対話するための基本的なコード例です。
using OpenAI;
using OpenAI.Chat;
using System.ClientModel;
namespace ChatGptTest {
class Program {
static async Task Main(string[] args) {
// 取得したAPIキーをここに入力
var apiKey = "your-api-key-here";
// OpenAIの制御用クライアントを作成
OpenAIClient client = new OpenAIClient(new ApiKeyCredential(apiKey));
// 利用したいモデルを指定
var model = "gpt-4o-mini";
// Chat用のClientを取得(機能ごとにClientが存在する)
ChatClient chat = client.GetChatClient(model);
List<ChatMessage> chatMessages = new List<ChatMessage>();
// AIに送るメッセージ
string message = "質問したいことを入力";
chatMessages.Add(new UserChatMessage(message));
// チャットの送信
var response = await chat.CompleteChatAsync(chatMessages);
// ChatGPTの返答
var responseText = response.Value.Content[0].Text;
Console.WriteLine($"ChatGPTの応答:{message}");
}
}
}
これだけでC#からAPIの利用が可能になります!
ただこれだと何をするAIなのか?も分からない状態なので実際に利用する際は色々と工夫が必要になっていきます。
ポイント解説
APIキーの管理
セキュリティのため、APIキーは環境変数や設定ファイルを使用して管理することをお勧めします。
一番良いのはサーバーから通信する形にして公開するプログラム自体には含めない形ですね。
エラーハンドリング
API呼び出し時のエラーに備えて、適切なハンドリングを行うことが重要です。
例: ネットワークエラーやAPIリミット超過。
課金した金額分のAPIを使い切ると強制でエラーになってしまいます。
Promptの指定方法
AIにはどんな振る舞いをするか?を指定しておくことが重要です。
実際に質問に対して何をして欲しいのか?を指定するには下記の用にPromptを指定します。
List<ChatMessage> chatMessages = new List<ChatMessage>(); // AIに送るPrompt(複数指定可) string prompt = "事前に指定したい命令(Prompt)を入力"; chatMessages.Add(new SystemChatMessage(prompt)); // AIに送るメッセージ string message = "質問したいことを入力"; chatMessages.Add(new UserChatMessage(message));
こうやってPromptを事前に記述しておけば、ブラウザでChatGPTを使う時と同じようにAPIが利用できるようになります。
Chatの継続
AIと継続して複数回のチャット続けるには以下の方法があります。
// チャットの送信 var response = await chat.CompleteChatAsync(chatMessages); // AIからのレスポンスを登録 chatMessages.Add(new AssistantChatMessage(response.Value.Content[0].Text)); // 続けてAIに送るメッセージ message = "質問したいことを入力"; chatMessages.Add(new UserChatMessage(message));
これを繰り返せばやり取りを続けることが出来ます。
ただメッセージ量が多くなっていく事で通信料も増えるので工夫をしないと1度のやり取りに掛かる金額が増える点にご注意ください。
まとめ
C#とOpenAI-dotnetを活用することで、ChatGPTを簡単に利用することができます。
この技術を使えば、チャットボットや対話型アプリケーションなど、さまざまなプロジェクトを作成することが可能です。
次回は、より高度な機能の使用方法やカスタマイズの方法について解説していきます。