ChatGPT APIは、OpenAIのGPT技術を利用した人工知能チャットボットです。
このAPIは、ユーザーが自然な言語で質問や会話をすることができ、応答を自動的に生成することができます。
いろいろな言語で実現可能ですが、今回はC#で実装してみます。
では、早速試してみましょう。
Pythonでの実装方法は別記事に掲載しています。
-
-
ChatGPTのAPIを12行のコードで試す(Python編)
ChatGPT APIは、OpenAIのGPT技術を利用した人工知能チャットボットです。このAPIは、ユーザーが自然な言語で質問や会話をすることができ、応答を自動的に生成することができます。いろいろな ...
続きを見る
APIは使用量に応じて料金が発生します。
無駄なトークンを使用しないように注意しましょう。
実行前にトークン量を確認する方法は別記事を参照してください。
-
-
ChatGPT(gpt-3.5-turbo)のトークン量をあらかじめ確認する(C#編)
ChatGPT APIは、OpenAIのGPT技術を利用した人工知能チャットボットです。使用するには文字の量に応じたトークンを使用します。トークンの使用量に応じて課金が発生するので注意してください。 ...
続きを見る
完成イメージ

全体的な流れ
- OpenAIアカウントの開設
- APIキーの発行
- SDKのダウンロード
- プログラミング
- 動かしてみる
下準備
OpenAIアカウントの開設
https://openai.com/product を開き、真ん中にある「Get Started」からアカウントを作成します。
なお、SMSによる電話番号認証が必要です。

APIキーの発行
https://platform.openai.com/account/api-keys を開き、「Create new secret key」を押して、新規のAPIキーを発行します。
APIキーはこの画面を閉じると再確認できないので、コピーしてどこかに保存しておきましょう。
APIキーは他人に知られないようにしましょう。


SDKのダウンロード
https://github.com/betalgo/openai/releases を開き、「Source code」をダウンロードします。

SDKをダウンロードしたら解凍し、ソリューション「OpenAI.sln」を開きます。

このSDKの中身が必要なソースコードになります。
このままこのソリューションで、コンソールプロジェクトを追加しても良いですし、
ビルドしてアセンブリ(OpenAI.GPT3.dll)を参照しても大丈夫です。
今回はここにコンソールプロジェクトを追加します。
ソリューションエクスプローラーで「ソリューション'OpenAI'」を右クリック、「追加」→「新しいプロジェクト」を選択。

新しいプロジェクト追加ウィザードで、C#のコンソールアプリを選択し、「次へ」をクリック。

新しいプロジェクトを構成します、の画面では、好きなプロジェクト名と保存先を指定して次へをクリック。

追加情報では、APIに併せて「.NET 6.0」を選択し、作成をクリック。

追加されたプロジェクトの依存関係を右クリック、「プロジェクト参照の追加」をクリック。

参照マネージャーで「OpenAI.GPT3」にチェックを入れOKをクリック。

最後にプロジェクトを右クリック、スタートアッププロジェクトに設定をクリックします。

ここまでで下準備は完了です。
コードを書く
program.csファイルに次のコードを書きます。
下準備で用意したAPIキーは8行目(『取得したAPIキーをここに設定する』の部分)に設定してください。
openAiService.SetDefaultModelId(Models.ChatGpt3_5Turbo); の部分には、ChatGpt3_5Turboを指定するのを忘れずに。
using Microsoft.Extensions.DependencyInjection;
using OpenAI.GPT3.Extensions;
using OpenAI.GPT3.Interfaces;
using OpenAI.GPT3.ObjectModels;
using OpenAI.GPT3.ObjectModels.RequestModels;
var serviceCollection = new ServiceCollection();
serviceCollection.AddOpenAIService(settings => { settings.ApiKey = "取得したAPIキーをここに設定する"; });
var serviceProvider = serviceCollection.BuildServiceProvider();
var openAiService = serviceProvider.GetRequiredService<IOpenAIService>();
openAiService.SetDefaultModelId(Models.ChatGpt3_5Turbo);
string s;
while (true)
{
Console.WriteLine("入力後にEnterを押下して下さい。");
s = Console.ReadLine();
var completionResult = await openAiService.ChatCompletion.CreateCompletion(new ChatCompletionCreateRequest
{
Messages = new List<ChatMessage>
{
// ChatMessage.FromSystem("Chatの設定"),
ChatMessage.FromUser(s),
},
Model = Models.ChatGpt3_5Turbo,
//MaxTokens = 50 トークンの使用量制限(オプション)
});
if (completionResult.Successful)
{
Console.WriteLine(completionResult.Choices.First().Message.Content);
}
Console.WriteLine();
}
実行確認
F5キーを押して実行するとコンソールが立ち上がります。
この画面で質問を入力し、Enterを押下するとChatGPTが返事を返してくれます。

チャットの設定をする
ChatMessage.FromSystem("Chatの設定") の部分のコメントを外し、チャットの設定をすることができます。
例えばChatMessage.FromSystem("嘘を答えてください。") とすると、嘘を応えるようになります。
Messages = new List<ChatMessage>
{
ChatMessage.FromSystem("嘘を答えてください。"),
ChatMessage.FromUser(s),
},

稼働状態の確認
https://platform.openai.com/account/usage を開くと、使用したトークン、APIのモデルなどを確認することができます。
無駄遣いしないよう、適宜確認しましょう。

インタラクティブな会話にしたい
トークンの消費が多いので今回は紹介していませんが、過去の会話も含めてやりとりを送ることで会話を続けることも可能です。
ChatMessageのListにこちらの質問を一つだけ入力して送付していますが、
ここを<過去の質問内容>、<過去の回答>、<新しい質問>のListになるようにして、
送付すれば過去の質問と回答を考慮した新しい回答を得ることができます。
インタラクティブな会話になる一方、使用するトークンが多いので、会話数の制限を付けることをおすすめします。
まとめ
ChatGPT APIを使用する(改行を除いて)30行ほどのサンプルコードを掲載しました
トークンの使用料がかかるのでやりたい放題とはいかないですが、
チャットの設定、質問のしかたなどを変更すれば、まだまだ楽しめそうですね。