MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

“MatGPT” を使って MATLAB 上で ChatGPT と会話するアプリを作ってみよう!

※MatGPT の仕様変更により、2024年1月23日に記事内容をアップデートしました。

※本記事では MatGPT version 2.0.0(2023/12/19 リリース)の使用例を紹介しており、それ以前のバージョンの MatGPT とはプログラムの書き方が大幅に異なります。また、今後バージョンアップにより仕様変更が行われた場合、記載したコードが動かなくなる可能性もございますのでご注意ください。

 

皆さんこんにちは、トレーニングチームの遠藤です。

最近急激に気温が下がってきて、朝ベッドからなかなか出られない日々が続いています。こうも気温の変化が激しいと、私の体内ソルバーがゼロクロッシングを検出してサンプル時間を細かく刻んでしまい困ってしまいますね(?)。

と、くだらない話はこれくらいにして、本題に入りましょう。今回は私としては久々の技術系の内容となります。いままでは、MATLAB と Simulink を繋ぐ、というテーマで色々と技術的な記事を書いてきましたが、今回は少し趣向を変えて、MATLAB と別のものを繋げていきたいと思います。

その別のものとは……ずばり ChatGPT です!

 

↑のように、ChatGPT と会話するアプリを MATLAB で簡単に作成する方法について紹介していこうと思います!

 

※本記事では、OpenAI の API を使用するために OpenAI のアカウントの作成や API キーの発行といった作業を行いますので、あらかじめご了承ください。また、お試しいただく場合は OpenAI サービスの利用規約 にもご注意ください。

 

0. 目次

  1. そもそも MATLAB 上で ChatGPT と会話するためには
  2. MatGPT とは!?
  3. MatGPT の使い方
  4. MatGPT でより高度な会話を行う
  5. ChatGPT と会話するアプリを作ってみよう!
  6. おわりに

1. そもそも MATLAB 上で ChatGPT と会話するためには

ご存じの方も多いかと思いますが念のため、ChatGPT は OpenAI が2022年11月30日に公開した、生成 AI サービスです。まるで人間とチャットしているかのように自然な回答が返ってくるということで一躍話題になり、現在では多くのユーザー・企業が様々な用途で利用しています。

ChatGPT はサーバー上に実体があり、ユーザーがそれにインターネット経由でアクセスすることで対話を行います(いわゆる SaaS 形式)。通常は ChatGPT のウェブページ上からアクセスして利用することが多いかと思いますが、それとは別に、専用の API を用いてアクセスすることもできます

“ChatGPT の API” と聞くと、何か難しいコマンドがいっぱいありそうなイメージかもしれませんが、実は中身は単純なウェブリクエスト形式の API です。送るデータと送り先のURL(エンドポイント)さえ正しく指定できれば、誰でも比較的簡単に使うことができます。

そして、実は MATLAB にはデフォルトで webread/webwrite などのウェブリクエストを行う関数が用意されていますので、これを使えば理論上 MATLAB 上で ChatGPT と通信することができちゃいます!

………

……

「いやいや、ウェブリクエストなんかやったことないからわからないよ!」と思った方、ご安心ください。実はここら辺の細かい仕様を理解していなくても、ChatGPT と簡単に通信を行えてしまうようなツールが File Exchange で公開されています

その名も、 MatGPT です!

 

2. MatGPT とは!?

MatGPT は、MATLAB 上で ChatGPT を使用するための便利なツールが含まれたパッケージです。MatGPT の中には「ChatGPT にアクセスするためのクラス」と「そのクラスを使った対話アプリ」の 2 つが入っていて、複雑な操作なしで簡単に MATLAB 上で ChatGPT にアクセスすることができます。

アプリの方は、普通にブラウザ上で ChatGPT を使うかのように、MATLAB 上でアプリを開いて対話をすることができます。会話以外にも、MATLAB のコードを作ってもらったり、関数の使い方を聞いたりすることもできます。

↑アプリ自体は英語ですが、日本語でもちゃんと会話できます!

 

これに対して、クラスの方は、スクリプト上で ChatGPT と通信をするためのクラスオブジェクトが複数実装されています。このオブジェクトを使うことで、ウェブリクエスト系の関数を手動で呼び出すことなく簡単にコードベースで ChatGPT にアクセスすることができます。

↑MatGPT を使えばたった2行で ChatGPT と会話できる!

 

※どちらもロール等を変更して会話しているだけで、アクセス先は通常の GPT モデルです。MATLAB のデータを学習させた特別なモデルを使っているわけではないのでご注意ください。

※MatGPT は GPT-3.5 と GPT-4 の両方に対応していますが、GPT-4 は過去に支払いを行ったことがある OpenAI のアカウントでのみ使用可能です。

 

今回は後者のクラスオブジェクトを活用することで、MATLAB 上で ChatGPT と会話するようなアプリを作ってみたいと思います。

 

3. MatGPT の使い方

それでは、アプリを作り始める前に MatGPT の使い方を簡単に確認してみましょう!(MatGPT のページの “Requirements” と “Instllation” の部分もご参考ください)

3-1. OpenAI のアカウントを作成して API キーを取得する

MatGPT を使うためには、OpenAI の API キーが必要です。API キーを持っていない方は、こちらのページのリンクから OpenAI のアカウントの作成&API キーの発行を行いましょう。

※API キーの発行自体は無料で行うことができます。API キーを使用する場合、使うモデルや通信する文字数によって料金がかかりますが、API キーの初回発行時には最初の 3 ヶ月のみ使用可能な 5 ドル分の無料クレジットが付与される(2023/11/6 時点)ので、試しに使ってみたい場合はこれを使うのがよいかと思います。

3-2. MatGPT をダウンロードする

API キーを取得できたら、MatGPT のページの「ダウンロード」ボタンからプログラムを zip ファイルでダウンロードして解凍します。解凍したら、MATLAB でそのフォルダまで移動しましょう。解凍したフォルダの中にはいろいろなファイルが入っていますが、今回使うクラスオブジェクトはすべて “helpers” フォルダの中に入っているので、helpers フォルダの中まで移動しましょう。

3-3. MATLAB 上で API キーを設定する

helpers フォルダまで移動したら、先ほど取得した API キーを MATLAB 上で環境変数として設定します。MatGPT は “OPENAI_API_KEY” という名前の環境変数に設定されているキーを使って通信を行います。環境変数を設定する方法は色々ありますが、今回は以下のコマンドで直接設定しちゃいましょう。

>> setenv("OPENAI_API_KEY", "発行した API キー")

※setenv 関数で設定した環境変数は MATLAB を閉じるとリセットされます。OS 側で直接設定しても OK ですが、その際はキーの流出にご注意ください。

3-3. 試しにコマンドウィンドウで MatGPT を使ってみる

これで MatGPT を使うための下準備が終わりましたので、早速使ってみましょう!まずは openAIChat コマンドを使って ChatGPT へアクセスするためのオブジェクトを作成します。

>> chat= openAIChat();

後は、このオブジェクトの generate メソッドを使えば、

>> text = generate(chat,"こんにちは!")

ChatGPT から返信が来ました!

もしこの時点でエラーが出てしまう場合は、

  • helpers フォルダに入っていない
  • API キーが間違っている、環境変数名が間違っている
  • インターネット接続、セキュリティ等の問題で ChatGPT との接続がうまくいっていない

などが考えられますので確認してみてください。

4. MatGPT でより高度な会話を行う

上述した2行のコードだけでも MATLAB 上で ChatGPT と簡単な会話はできますが、MatGPT の機能をつかうことでより高度な会話を行うことができます。今回は 2 つの機能をピックアップしてご紹介します。

4-1. 初期プロンプトを設定する

ChatGPT は、最初にプロンプトで会話のルールを細かく指定しておくと、それ以降はそのルールに従って答えが返ってきます。MatGPT では、openAIChat コマンドを実行する際にプロンプトを入力することで、それが初期プロンプトとして採用されます。

例えば、口調指定をしてあげると……

役割指定の例>> chat = openAIChat("ギャル口調でしゃべってください。");
>> text = generate(chat,"こんにちは!")

こんな感じで、返答の口調が指定した通りに変わります、楽しい!
(ヤバイヒョウタンって何……)

4-2. 会話の履歴を残す

実は、generate メソッドを使って会話するだけでは、ChatGPT 側に会話の履歴が残りません。なので、例えば何か質問してからそれを英訳するように頼んでも……

全く関係ない英訳が返って来てしまいます(初期プロンプトは生きているので、ギャルっぽい英語にはなってます)。

 

チャットのやり取りを履歴を残しながら会話を進めたい場合は、”openAIMessages” クラスを使う必要があります。

openAIMessages は、会話の履歴を保存しておき、それを丸ごと ChatGPT に送るためのオブジェクトです。使い方は単純で、まずopenAIChat オブジェクトを作成する際に、openAIMessages オブジェクトも一緒に作成します。

※この段階ではまだ何も会話していないので、当然中は空っぽです。

 

次に、ChatGPT に送りたいメッセージを、addUserMessage メソッドで openAIMessages オブジェクトに記録します。

これにより、オブジェクトの中に「ユーザー」が「MATLABって何ですか?」というメッセージを送ったことが記録されます。

そして、この openAIMessages オブジェクトを generate メソッドに渡し、ChatGPT から返答をもらいます。ただし、先ほどとは違い、出力引数を 2 つ設定します

これにより、1 つ目の出力には返信内容のテキストのみが、2 つ目の出力には返信内容だけでなく誰がその返信をしたかの情報も格納された構造体が返ってきます。

そして、この 2 つ目の出力を、今度は addResponseMessage メソッドで openAIMessages オブジェクトに記録します。

 

あとは、また addUserMessage で送りたいメッセージを記録、generate で送信、返信内容を addResponseMessage で記録、を繰り返すことで、履歴を残した状態で会話を行うことができます。

↑先ほどとは違い、過去の返答内容を英訳してくれました!

ただし、会話の履歴を残すということは、それまでのやりとりを毎回 ChatGPT に送ることになりますので、それだけトークンを消費します。「調子に乗って会話をずーっと続けていたら無料配布分のトークン数が無くなっちゃった!」みたいなことにならないよう注意しましょう。

 

※ここで紹介した機能以外にも、MatGPT には Function calling や Embeddings などの高度な機能も用意されています。詳しく知りたい方、例題コードを見たい方は、以下のページをご参照ください。

Large Language Models (LLMs) with MATLAB

 

5. ChatGPT と会話するアプリを作ってみよう!

ここまででとりあえず基本的な MatGPT の使い方がわかりましたので、早速これを使って会話アプリを作ってみましょう。 まずは MATLAB のホーム画面から「新規」→「アプリ」と選び、 App Designer を起動します(App Designer の使い方についてはこちらのドキュメントもご参考ください)。

ここに必要なコンポーネントを配置していきます。今回は、シンプルに

  • テキストラベル x 3(タイトル、ChatGPT からの返答の表示など)
  • エディットボックス(ChatGPT へ送信する文章の作成)
  • ボタン(送信用)

の 3 つを配置します。

こんな感じですかね。後々コードを書きやすいように、各コンポーネントには “ReplyText” や “SendButton” など、わかりやすい名前を付けておきましょう(コンポーネント名は右上のツリーから編集できます)。

 

それでは次に、ChatGPT との会話に必要なオブジェクトがアプリ起動時に自動で作成されるように、StartupFcn を作成します。

上図の通り、右上のツリーからアプリ名(今回は app1)を選び、「コールバック」タブで <StartupFcn コールバックの追加> を選ぶと……

新たに startupFcn が作成されました。ついでに、 オブジェクトを保存するために、 “chat”, “history” という 2 つのプロパティも作成しておきましょう。

プロパティを作成したら、先ほど作った startupFcn の中で openAIChat, openAIMessages オブジェクトを作成し、それぞれ chat, history プロパティに保存します。

アプリ起動時のコールバック
function startupFcn(app)
    app.chat = openAIChat();
    app.history = openAIMessages();
end

これで、アプリ起動時に自動で openAIChat, oepnAIMessages オブジェクトが作成されるようになりました!

 

最後に、ボタンのコールバックを作成しましょう。ボタンのコールバックでは、先ほど startupFcn でオブジェクトを保存した chat プロパティと history プロパティを使って ChatGPT と通信し、返ってきた文章をラベルに表示します。コードはこんな感じ。

ボタンのコールバック
function SendButtonPushed(app, event)
    prompt = app.PromptText.Value;   % エディットボックス内の文章を取得
    app.history = addUserMessage(app.history,prompt); % 取得した文章を openAIMessages オブジェクトに記録
    [text, response] = generate(app.chat,app.history); % ChatGPT からの返答を取得
    app.history = addResponseMessage(app.history,response); % 返答を openAIMessages オブジェクトに記録
    app.ReplyText.Text = text;     % 返答をラベルに表示
end

※”PromptText” や “ReplyText” といったコンポーネント名(コード中の斜体の部分)は、適宜修正してください。

 

これで会話アプリの完成です。早速動かしてみましょう!テキストボックスに文字を入力して送信ボタンを押すと……

 

ChatGPT から返信がきました!

 

今回は必要最低限の機能のみを実装したアプリを作成しましたが、

  • テキストラベルではなくテキストエリアを使い、過去の会話の履歴も表示する
  • openAIMessages オブジェクトを作り直す処理を行うようなリセットボタンを追加し、会話をリセットできるようにする
  • エディットボックスやテキストエリアで初期プロンプトを設定できるようにする

などなど、もっと色々な機能を追加できそうですね!

 

6. おわりに

ということで、今回は MATLAB 上で ChatGPT を使う方法についての紹介となりました。チャットアプリを作る場合以外にも、既に開発してあるアプリの中に ChatGPT に相談する機能を追加するときなどにもご参考いただければと思います。

また、Open AI の API を使うと Whisper などのChatGPT 以外のサービスにもアクセスすることができます。もちろん MatGPT をそのまま使うことはできないので改造は必要になりますが、エンドポイントやデータなどを正しく指定すれば他のサービスにも応用できますので、興味がある方は、 OpenAI の API のドキュメントページなどもご確認しながらぜひ挑戦してみてください!

|
  • print

Comments

To leave a comment, please click here to sign in to your MathWorks Account or create a new one.