ChatGPT API で C# でコマンドラインで会話する
こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu 22.04 で ChatGPT API を C# から使いコマンドラインから会話する方法を紹介します。
目的
Windows 11 の Linux でクラウド開発します。
こちらから記事の一覧がご覧いただけます。
実現すること
ローカル環境の Ubuntu で、ChatGPT API を C# から使いコマンドラインから会話します。
C# には本来厳格なコーディング規則がありますが、この記事では可読性のために、一部規則に沿わない表記方法を使用しています。ご注意ください。
関連記事
OpenAI API と比較してみましょう!
OpenAI API
技術トピック
ChatGPT API とは?
こちらを展開してご覧いただけます。
ChatGPT API
ChatGPT API は、OpenAI の言語モデルである GPT-3 をベースにした、自然言語による対話を実現するためのAPIです。
特徴 |
---|
ChatGPT API を利用することで、開発者は自分たちのアプリケーションやサービスに自然言語の対話機能を追加することができます。 |
ChatGPT API は、大規模なトレーニングデータを用いて学習された GPT-3 の言語理解力を利用し、自然言語での質問や会話に対して自然で流暢な回答を生成することができます。 |
また、ChatGPT API は、OpenAI が提供するプラットフォームである OpenAI Codex と組み合わせて、より高度な対話型アプリケーションを構築することも可能です。 |
開発環境
- Windows 11 Home 22H2 を使用しています。
WSL の Ubuntu を操作していきますので macOS の方も参考にして頂けます。
WSL (Microsoft Store アプリ版) ※ こちらの関連記事からインストール方法をご確認いただけます
> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
Ubuntu ※ こちらの関連記事からインストール方法をご確認いただけます
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
.NET SDK ※ こちらの関連記事からインストール方法をご確認いただけます
$ dotnet --list-sdks
7.0.202 [/usr/share/dotnet/sdk]
$ dotnet --version
7.0.202
この記事では基本的に Ubuntu のターミナルで操作を行います。Vim を使用してコピペする方法を初めて学ぶ人のために、以下の記事で手順を紹介しています。ぜひ挑戦してみてください。
ChatGPT と会話する手順
OpenAI API のキーを取得します
sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Ubuntu に OPENAI_API_KEY 環境変数を作成します。
$ export OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
この環境変数が一時的なものであることに注意してください。
プロジェクトの作成
.NET 環境をお持ちでない場合は、以下の関連記事から .NET SDK のインストール手順をご確認いただけます。
プロジェクトルートフォルダに移動します。
※ ~/tmp をプロジェクトルートフォルダとします。
$ cd ~/tmp
コンソールアプリを作成します。
※ ChatGPTApp がアプリ名です。
$ dotnet new console -o ChatGPTApp -f net7.0
コンソールアプリをビルド・実行します。
$ cd ~/tmp/ChatGPTApp
$ dotnet run
Hello, World!
ここまでの手順で、C#.NET コンソールアプリが作成できました。
ライブラリの追加
OpenAI のパッケージを NuGet で取得します。
$ dotnet add package OpenAI
パッケージを確認します。
$ dotnet list package
プロジェクト 'ChatGPTApp' に次のパッケージ参照が含まれています
[net7.0]:
最上位レベル パッケージ 要求済み 解決済み
> OpenAI 1.7.2 1.7.2
ここまでの手順で、プロジェクトに OpenAI のパッケージを組み込むことができました。
コードの修正 その1
ChatGPT API で会話します。
Program.cs を修正します。
$ vim Program.cs
ファイルの内容
using static System.Console;
using static System.Environment;
using OpenAI_API;
using OpenAI_API.Chat;
namespace ChatGPTApp {
class Program {
static async Task Main(string[] args) {
// get an api key.
string? apiKey = GetEnvironmentVariable("OPENAI_API_KEY");
// create an api object.
OpenAIAPI api = new(apiKey);
// create a chat object.
Conversation chat = api.Chat.CreateConversation();
// read a prompt from the console.
WriteLine("Enter a prompt: ");
string? prompt = ReadLine();
// get a result from the chat.
chat.AppendUserInput(prompt);
string? result = await chat.GetResponseFromChatbotAsync();
WriteLine(result.Trim());
// wait the console.
ReadLine();
}
}
}
コンソールアプリをビルド・実行します。
$ dotnet run
Enter a prompt:
Are you human?
No, I am an AI language model developed by OpenAI.
ここまでの手順で、ChatGPT API を使い ChatGPT と会話することができました。
しかし、現在のプログラムでは会話は一回きりで終了してしまいます。
コードの修正 その2
プログラムを停止するまで会話を繰り返します。
Program.cs を修正します。
$ vim Program.cs
ファイルの内容
using static System.Console;
using static System.Environment;
using OpenAI_API;
using OpenAI_API.Chat;
namespace ChatGPTApp {
class Program {
static async Task Main(string[] args) {
// get an api key.
string? apiKey = GetEnvironmentVariable("OPENAI_API_KEY");
// create an api object.
OpenAIAPI api = new(apiKey);
// create a chat object.
Conversation chat = api.Chat.CreateConversation();
// loop until a prompt is empty.
string? prompt = null;
do {
// read a prompt from the console.
WriteLine("Enter a prompt (or press Ctrl + C to exit):");
prompt = ReadLine();
if (!string.IsNullOrEmpty(prompt)) {
// get a result from the chat.
chat.AppendUserInput(prompt);
string? result = await chat.GetResponseFromChatbotAsync();
// print the result.
WriteLine(result.Trim());
}
} while (!string.IsNullOrEmpty(prompt));
// wait the console.
ReadLine();
}
}
}
コンソールアプリをビルド・実行します。
$ dotnet run
Enter a prompt (or press Ctrl + C to exit):
How are you?
As an AI language model, I don't have feelings. But I'm functioning perfectly fine. Thank you for asking. How may I assist you today?
Enter a prompt (or press Ctrl + C to exit):
I'm fine. are you?
As an AI language model, I don't have personal feelings, but I am currently functioning properly and ready to assist you with any tasks or questions you may have. How may I assist you today?
Enter a prompt (or press Ctrl + C to exit):
ここまでの手順で、ChatGPT API を使い ChatGPT と会話のラリーを行うことができました。
しかし、現在のプログラムでは自分の会話と ChatGPT の会話の表示が分かりづらいです。
コードの修正 その3
コンソール出力に色を付けます。
Program.cs を修正します。
$ vim Program.cs
ファイルの内容
using static System.Console;
using static System.ConsoleColor;
using static System.Environment;
using OpenAI_API;
using OpenAI_API.Chat;
namespace ChatGPTApp {
class Program {
static async Task Main(string[] args) {
// get an api key.
string? apiKey = GetEnvironmentVariable("OPENAI_API_KEY");
// create an api object.
OpenAIAPI api = new(apiKey);
// create a chat object.
Conversation chat = api.Chat.CreateConversation();
// loop until a prompt is empty.
string? prompt = null;
do {
// read a prompt from the console.
ForegroundColor = Yellow;
WriteLine("Enter a prompt (or press Ctrl + C to exit):");
ResetColor();
prompt = ReadLine();
if (!string.IsNullOrEmpty(prompt)) {
// get a result from the chat.
chat.AppendUserInput(prompt);
string? result = await chat.GetResponseFromChatbotAsync();
// print the result.
ForegroundColor = Green;
WriteLine(result.Trim());
}
} while (!string.IsNullOrEmpty(prompt));
// wait the console.
ReadLine();
}
}
}
コンソールアプリをビルド・実行します。
$ dotnet run
ここまでの手順で、ChatGPT API を使い ChatGPT と会話を楽しむプログラムを作成することができました。
まとめ
ローカル環境の Ubuntu で、ChatGPT API を C# から使いコマンドラインから会話することができました。
実際の開発では、軽量なテキストエディタである VS Code や、IDE (統合開発環境) を使用して、.NET プログラムを開発することが一般的です。しかし、dotnet コマンドでビルドしたり、実行したりすることも、.NET 開発環境を理解する上で役立ちます。
どうでしたか? Window 11 の WSL Ubuntu に、.NET の開発環境を手軽に構築することができます。ぜひお試しください。今後も .NET の開発環境などを紹介していきますので、ぜひお楽しみにしてください。
推奨コンテンツ
参考資料