ChatGPTのレスポンスを返すプログラムを作成する。
今回はC#プログラミングでChatGPTから応答を返すプログラムを作っていきます。
今回の対象モデルは【text-davince-003】と【chatgpt3.5-turbo】です。
環境はVisual Studio2022を使用しています。
ChatGPTのアカウントは既に生成したことが前提です。
ChatGPTAPIキーの発行手順
まずは、ChatGPTのAPIキーを発行する必要があります。
step
1https://openai.com/api/にアクセスします。
step
2「GET STARTED」をクリックします。
step
3アカウントは既に作成したと思うので、「Continue」をクリックします。
step
4メールアドレスとパスワードを入力し、Continueボタンを押下します。
step
5OpenAIの利用方法について質問に対し、個人利用として「I’m exploring personal use」を選択します。画像がなくてすみません。
以上でAPIキーを発行するまでのアカウント登録まで完了します。
step
6メニュー画面の右上の「Personal」アイコンをクリックし、「View API Keys」をクリックします。
step
7「Create new secret key」を押下すると、APIキーを発行することができます。
発行したAPIキーをコピーし、プログラム上で指定すると使うことができます。
APIキーの発行手順については以上です。
ライブラリのインストール
プロジェクトを作成し終わったら、ChatGPTAPIと接続する便利なライブラリをインストールします。
step
1メニューの「ツール」⇒「NuGetパッケージマネージャー」⇒「ソリューションのNuGetパッケージの管理」をクリックします。
step
2参照を押下し、検索テキストボックスに「OPENAI」と入力します。
step
3「Betalgo.OpenAI.GPT3」を探して、選択します。
step
4「プロジェクト」を選択し、インストールボタンを押下します。
step
5「I Accept」ボタンを押下します。
step
6緑のアイコンが付くと正常にダウンロードができています。
以上でライブラリのインストールは完了です。
text-davince-003を使用するソースコード
早速、【text-davince-003】モデルを使ったソースコードをみていきます!
APIキーを入力して、下記のソースコードを実行してみてください!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using OpenAI.GPT3; using OpenAI.GPT3.Managers; using OpenAI.GPT3.ObjectModels; using OpenAI.GPT3.ObjectModels.RequestModels; internal class Program { private static async Task Main(string[] args) { var prompt = "消費税のブログタイトル考えてください。"; var openAiService = new OpenAIService(new OpenAiOptions() { ApiKey = "" //発行したAPIキーを入力 }); Console.WriteLine(prompt); var result = await openAiService.Completions.CreateCompletion(new CompletionCreateRequest() { Prompt = prompt, Echo = true, MaxTokens = 1000 }, Models.TextDavinciV3); if (result.Successful) { var resultcontent = result.Choices.Select(n => n.Text).FirstOrDefault().Split("\n\n").Skip(1).FirstOrDefault(); Console.WriteLine(resultcontent); } else { if (result.Error == null) { throw new Exception("Unknown Error"); } Console.WriteLine($"{result.Error.Code}: {result.Error.Message}"); } } } |
出力結果
消費税のブログタイトル考えてください。
『サラリーマンのための5つのポイント!実践型消費税のお話』
ChatGPTからレスポンスが返ってきましたね!
Selectメソッド、FirstOrDefaultメソッドはLinqのメソッドです。
Linqを分かりやすく解説した本を執筆したので、ぜひ読んでみてください!
Kindle Unlimitedなら無料で読めます!
chatgpt3.5-turboを使用するソースコード
続けて、chatgpt3.5-turboを使用したソースコードをみていきます。
chatgpt3.5-turboから会話履歴も一緒にリクエストするため、
String型でなくリスト型などでリクエストする必要があります。
「Betalgo.OpenAI.GPT3」では、リクエスト用のクラスも用意されているので、それを使っていきましょう!
対応したソースコードが下記となっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
using OpenAI.GPT3; using OpenAI.GPT3.Managers; using OpenAI.GPT3.ObjectModels; using OpenAI.GPT3.ObjectModels.RequestModels; internal class Program { private static void Main(string[] args) { IList<ChatMessage> Messages = new List<ChatMessage>(); Messages.Add(new ChatMessage("system", "筋肉トレーニング")); Messages.Add(new ChatMessage("user", "ブログタイトルを考えてください。")); //ChatMessageリストをAPIにリクエストする。 var Response = getOpenAIResponse(Messages).Result; Console.WriteLine(Response); } private static async Task<String> getOpenAIResponse(IList<ChatMessage> Messages) { var resultcontent = ""; var openAiService = new OpenAIService(new OpenAiOptions() { ApiKey = "" //発行したAPIキーを入力 }); foreach (var item in Messages.Select(n => n.Role + n.Content)) { Console.WriteLine(item); } var result = await openAiService.ChatCompletion.CreateCompletion(new ChatCompletionCreateRequest { Messages = Messages, Model = Models.ChatGpt3_5Turbo, MaxTokens = 1000//optional }); if (result.Successful) { resultcontent = result.Choices.First().Message.Content; } else { //エラーの時はnullを返す。 return null; } return resultcontent; } } |
出力結果
system筋肉トレーニングuserブログタイトルを考えてください。
「筋肉トレーニングで理想のボディを手に入れよう!」
上記のソースコードのように、ChatMessageクラスをリスト化した値をリクエストします。
1 2 3 |
IList<ChatMessage> Messages = new List<ChatMessage>(); Messages.Add(new ChatMessage("system", "筋肉トレーニング")); Messages.Add(new ChatMessage("user", "ブログタイトルを考えてください。")); |
userは現在のリクエスト、systemは過去のリクエストを表しています。
chatgpt3.5-turboからは過去のリクエストも考慮して、レスポンスを返してくれることが可能となりました。
ロールは下記のような意味を持っています。
role |
内容 |
user |
現在のリクエスト |
system |
過去のリクエスト |
assistant |
過去のレスポンス |
そのため、下記のようにsystemのソースコードをコメントアウトし、リクエストをすると、
1 2 3 |
IList<ChatMessage> Messages = new List<ChatMessage>(); //Messages.Add(new ChatMessage("system", "筋肉トレーニング")); Messages.Add(new ChatMessage("user", "ブログタイトルを考えてください。")); |
出力結果
userブログタイトルを考えてください。
「日々のささやかな幸せを綴る日記」
筋トレとは全く関係ないブログタイトルとなりましたね。
このようにchatgpt3.5-turboから会話履歴に基づいたレスポンスを返すことが可能となりました。
chatgpt3.5-turboの解説は以上です。
まとめ
今回はC#でChatGPTを使用する方法を解説していきました。
細かいソースコードの解説はLinqやリストなどの説明となり脱線してしまうため、本記事では割愛させて頂きました。
上記のプログラムを使えば、ChatGPTと連携するプログラムはすぐに作れると思います!ぜひご活用ください!
最後まで読んで頂き、ありがとうございました!