ChatGPTから独自のプライベートなフランス語チューターを作成する方法

ChatGPTで独自のフランス語チューターを作成する方法

最新のAIサービスを使って新しい言語を学ぶためのステップバイステップガイド、アーキテクチャからプロンプトエンジニアリングまで

議論された外国語のチューターのコードは、私のGitHubページのcompanionリポジトリで見つけることができ、非商用利用には自由に使用できます。

Made with Dall-E

長い間延期していた後、フランス語の勉強を再開することにしました。クラスに登録したとき、私はこの考えが浮かびました-ChatGPTをプログラムして私の個人的なフランス語のチューターにすることができたらどうでしょうか?私が話しかけると、それが私に話しかけることができたらどうでしょうか?データサイエンティストとしてLLMと一緒に働いているので、これは構築する価値があると思われました。もちろん、フランス人の妻に話しかけることもできますが、ChatGPTを使用して独自の個人チューターを設計することほどクールではありません。愛してるよ、ハニー❤️。

しかし、真剣に話すと、このプロジェクトはただの「もう一つのクールなコードのおもちゃ」以上のものです。生成AIは私たちの生活のあらゆる分野に向かって進んでおり、大規模言語モデル(LLM)がここで主導権を握っているようです。これらのモデルにアクセスできるようになった個人がこれらの日の動きをすることができる可能性は驚くべきものであり、私はこのプロジェクトが私の時間の価値があると考えました-そして、あなたもそう思うと信じています-2つの主な理由のためです:

  • ChatGPTを使用することは、よく知られたオンラインツールとして強力ですが、LLMをコードに統合することはまったく別のことです。LLMはまだ予測不可能な要素があり、製品がLLM(または他のGenAIモデル)に依存している場合は、GenAIを本当に制御する方法を学ぶ必要があります。それは思っているほど簡単ではありません。
  • 最初の動作バージョンを作成するのにわずか数日かかりました。GenAIとLLMがなかった場合、これには数か月かかり、おそらく1人だけでは不十分でした。これらのツールを使用して迅速な強力なアプリケーションを作成する力は、自分自身で試してみる価値があるものです-それが私の見る未来です。戻ることはありません。

さらに、このプロジェクトは実際に役立つことができます。母親は英語の練習相手が欲しいと本当に望んでいます。今やそれが可能で、月額3ドル以下で利用できます。妻の母親は韓国語の勉強を始めたいと思っています。同じこと、同じ費用です。もちろん、私自身も使用しています!このプロジェクトは本当に人々を助けてくれますし、それは小さなコーヒーカップよりも安価です。それが私にとっての本当のGenAI革命です。

ゼロから始める

このプロジェクトを高レベルで見ると、必要なのは4つの要素でした:

  • 音声からテキストへ、自分の声を文字に変換するため
  • 大規模言語モデル、できればチャットLLM、質問をすることができて回答を得ることができるもの
  • テキストから音声へ、LLMの回答を音声に変換するため
  • 翻訳、理解しきれないフランス語のテキストを英語(または私の母国語であるヘブライ語)に変換するため

幸いなことに、2023年になり、上記のすべてが非常にアクセスしやすくなりました。また、ローカルで実行する代わりに、管理されたサービスとAPIを使用することにしました。推論がはるかに速くなります。また、これらのAPIの個人利用の低価格は、この決定を自動的にしました。

いくつかの代替案を試した後、Speech-to-textとしてOpenAIのWhisperとChatGPT、Text-to-speechとTranslateとしてGoogleのツールを選びました。APIキーを作成し、これらのサービスを設定することは非常に簡単であり、ネイティブのPythonライブラリを介してすべてとコミュニケーションすることができました。

これらのサービスをすべてテストした後、構築しているチューターは単なる英語からフランス語の教師ではないことが本当に印象的でした。Whisper、ChatGPT、Google Translate&TTSは数十の言語をサポートしているため、ほぼすべての言語を学びながらほかの言語で話すことができます。それは狂気です!

Dall-Eで作成

アーキテクチャとスレッディング

まず、全体のフローが理解されていることを確認しましょう: (1) ユーザーの音声を記録します。これは (2) Whisper API に送信され、テキストとして返されます。 (3) テキストはチャット履歴に追加され、ChatGPTに送信されます。ChatGPTは (4) 書かれた応答を返します。その応答は (5) Googleテキスト読み上げに送信され、音声として再生されます (6)

ハイレベルアーキテクチャ

最初の実際のステップは、コンポーネントを分解して全体のアーキテクチャを設計することでした。UIが必要であり、可能であればWeb UIが望ましいです。ブラウザ経由でアプリを起動することは、単独の実行可能ファイルを使用するよりも簡単です。また、「バックエンド」も必要です。これは実際のPythonコードで、さまざまなサービスと通信します。しかし、リアルタイムな流れるような体験を提供するためには、異なるスレッドに分割する必要があると気付きました。

メインスレッドは、ほとんどのコードを実行します:録音をテキストに変換(Whisperを介して)、このテキストをチャットの一部として画面に表示し、チャット画面にチューターの書かれた応答も表示します(ChatGPTから受け取ったもの)。しかし、チューターのテキスト読み上げを別のスレッドに移動する必要があります。そうしないと、以下のような状況になります:

  • チューターの声は、ChatGPTからのメッセージが完全に受信されてからのみ聞こえ、その応答は長いかもしれません
  • チューターが話している間は、ユーザーが応答することができなくなります

これは私が望む「流れる」動作ではありません。チューターがメッセージを画面に書いている最中に話し始め、音声が再生されている間にユーザーをブロックしないようにしたいのです。

そのために、プロジェクトのテキスト読み上げ部分を2つの追加のスレッドに分割しました。チューターの応答がChatGPTからトークンごとに受け取られる間、作成された完全な文は別のスレッドに渡され、テキスト読み上げサービスに送信され、音声ファイルに変換されました。ここで「ファイル」という単語を強調したいと思います。文ごとにテキストをTTSサービスに送信しているため、正しい順序で再生するために複数のオーディオファイルがあります。これらの音声ファイルは別のスレッドから再生され、音声再生がプログラムの他の部分の実行をブロックしないようにします。

これをすべて動作させることと、UI-サーバー間の相互作用から生じる他の問題も、このプロジェクトの複雑な部分でした。驚いたことに、ソフトウェアエンジニアリングは難しいものですね。

UIの設計

プロジェクトのUI

UIが必要だとわかっていましたし、どのような見た目にしたいかもほぼ分かっていました。ただし、UIのコーディングは私の知識の範囲外です。そこで、新しいアプローチを試してみることにしました:ChatGPTにUIを書いてもらうようにお願いしました。

これには、実際のChatGPTサービス(APIではない)を使用し、GPT-4(はい、私は誇らしげなお金を払う顧客です!)を使用しました。驚くべきことに、最初のプロンプト:

チャットボットアプリケーションのためのPythonウェブUIを作成してください。ユーザーがプロンプトを入力するテキストボックスは画面の下部にあり、以前のメッセージは画面上に保持されます

は、素晴らしい最初の結果をもたらし、Python-Flaskバックエンド、jQueryコード、HTML、および対応するCSSで終わりました。しかし、これは期待していた機能の約80%に過ぎなかったため、私は約10時間かけてGPT-4と行ったり来たりし、UIを最適化し、アップグレードしました。

シンプルに見せるようにしても、それが実際に簡単ではなかったことを明確に言わなければなりません。リクエストを追加するにつれて、GPT-4は混乱し、正常に機能しないコードを提供しました。そのため、手動で修正する方が頼んで修正してもらうよりも簡単でした。そして、私はたくさんのリクエストをしました:

  • 各メッセージの横にプロフィール画像を追加
  • 各メッセージに再生ボタンを追加して、その音声を再生する
  • フランス語のメッセージごとに、元のテキストの下に翻訳を追加するボタンを追加
  • セッションの保存と読み込みのボタンを追加
  • ダークモードのオプションを追加し、適切なモードを自動的に選択する
  • サービスからの応答を待つときに「動作中」のアイコンを追加
  • その他、多くのリクエスト

それでも、通常GPTのコードはそのままではうまく動作しなかったにもかかわらず、フロントエンドの分野にほとんど知識がないことを考慮すると、結果は驚くほど素晴らしいものです。自分でグーグルやスタックオーバーフローで調べても到底できなかったことを遥かに超えています。また、より良いプロンプトの作成方法についても多くの進歩を遂げました。考えてみると、おそらくLLMと一緒に製品をゼロから構築する経験から学んだ教訓について別のブログ記事を書くべきかもしれません…お楽しみに!

プロンプトエンジニアリング

この記事のこの部分では、ChatGPTなどのチャットLLMとのAPI経由の通信方法についての基本的な知識を持っていることを前提にします。持っていない場合、少し迷うかもしれません。

Made with Dall-E

最後になりますが、最も重要なことは、GPTに個別の指導者の役割を果たさせる必要があったことです。

出発点として、チャットの最初にシステムプロンプトを追加しました。チャットLLMとのチャットは基本的にユーザーとボットがお互いに送り合うメッセージのリストです。システムプロンプトは通常、チャットの最初のメッセージであり、ボットに対してどのように振る舞い、何を期待しているかを説明します。私の場合、それは以下のようなものでした(波括弧で囲まれたパラメータは実行時の値に置き換えられます):

{language}の教師である{teacher_name}です。あなたは{user_name}との1対1のセッションに参加しています。{user_name}の{language}レベルは:{level}です。あなたのタスクは、{language}のスキルを向上させるために学生をサポートすることです。* セッションが始まると、{user_name}に適したセッションを提供します(別のものを要求されない限り)* {user_name}の母国語は{user_language}です。{user_name}は{language}が十分に理解できないと感じたとき、自分の言語であなたに話しかけるかもしれません。その場合は、まず彼らのメッセージを{language}に翻訳し、それから返信してください。* 重要:生徒がミスをした場合、タイプミスでも文法的なミスでも、まず生徒を訂正し、それから返信してください。* あなたは{language}で話すことしか許されていません。

これは実際に非常に良い結果をもたらしましたが、振る舞いの指示の効果(「間違っているときに訂正してください」、「常にフランス語で返信してください」など)は、チャットが進むにつれて低下する傾向がありました。

この消失する振る舞いに対抗するために、私は興味深い解決策を考え出しました。GPTに送る前に、ユーザーのメッセージを操作しました。ユーザーのメッセージが何であれ、追加のテキストを追加しました:

[ユーザーメッセージがここに入ります]---重要:* 私が{language}で返信し、ミス(文法、タイプミスなど)があった場合は、返信する前に訂正してください* セッションの流れを保つ必要があります。あなたの返答はセッションを終了させてはいけません。 "何をしたいですか"のような広範な質問を避け、関連する質問と練習を提供するようにしてください。* 必ず{language}で返信してください。

これをユーザーのメッセージの末尾に追加することで、LLMが私が望むように正確に応答することを保証しました。長い接尾辞は英語で書かれており、ユーザーのメッセージはそうでないかもしれません。そのため、元のメッセージと追加部分の間に明示的なセパレータ(---)を追加し、元のメッセージの文脈を終了し、新しい文脈を開始しました。また、この接尾辞はユーザーのメッセージに追加されるため、一人称で書かれています(「私」、「私に」など)。この小さなトリックは結果と振る舞いを劇的に改善しました。言うまでもないことかもしれませんが、この接尾辞はチャットのUIに表示されず、ユーザーは自分のメッセージに追加されていることを知りません。それは裏で挿入され、チャットの履歴の残りと一緒にChatGPTに送信される直前に挿入されます。

もう一つの振る舞いを追加したかったのは、チューターが最初に話すことです。つまり、ChatGPTがセッションが始まると同時に最初のメッセージを送信し、ユーザーがセッションを開始するのを待たないようにすることです。しかし、ChatGPTはそのようなことをするために設計されていないようです。

システムプロンプトのみを含むメッセージ履歴でChatGPTに応答させようとしたところ、「それ」を失い、ユーザーとボットの両方とのチャットを作成し始めました。試したことは何でも、ユーザーが最初に何か言わない限り、正しくセッションを開始することができませんでした。

そして、私はアイデアを思いつきました。セッションが初期化されたとき、ユーザーの代わりにChatGPTに以下のメッセージを送信します:

挨拶し、私のレベルに合った3つのオプションの教科を提案してください。{language}で返信してください。

このリクエストは、ボットによるセッションの適切な初期化の見た目をまさに私が考えるようにするために設計されました。その後、チャットから私のメッセージを削除し、ボット自体がセッションを開始したかのように見せました。

概要

Dall-Eで作成、編集済み

面白い気まぐれから始まったものが、たった一人の忙しい人の余暇中に完全に実現しました。こうしたタスクが今では非常に簡単に作成できるという事実は、私を驚かせ続けています。たった1年前、ChatGPTのようなものが利用可能だったこと自体がSFのようであり、今では自分のパソコンから形を作り出すことができます。

これが未来の始まりであり、何が起ころうとも、少なくとももう1つの外国語でそれに備えていることを知っています。さようなら!

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

「コーネリスネットワークスのソフトウェアエンジニアリング担当副社長、ダグ・フラーラー氏 - インタビューシリーズ」

ソフトウェアエンジニアリングの副社長として、DougはCornelis Networksのソフトウェアスタック全体、Omni-Path Architecture...

人工知能

ジョナサン・ダムブロット、Cranium AIのCEO兼共同創設者- インタビューシリーズ

ジョナサン・ダムブロットは、Cranium AIのCEO兼共同創業者ですCranium AIは、サイバーセキュリティおよびデータサイエンスチ...

機械学習

「Prolificの機械学習エンジニア兼AIコンサルタント、ノラ・ペトロヴァ – インタビューシリーズ」

『Nora Petrovaは、Prolificの機械学習エンジニア兼AIコンサルタントですProlificは2014年に設立され、既にGoogle、スタンフ...

人工知能

ファイデムのチーフ・プロダクト・オフィサー、アルパー・テキン-インタビューシリーズ

アルパー・テキンは、FindemというAI人材の獲得と管理プラットフォームの最高製品責任者(CPO)ですFindemのTalent Data Clou...

人工知能

『DeepHowのCEO兼共同創業者、サム・ジェン氏によるインタビューシリーズ』

ディープハウのCEO兼共同創設者であるサム・ジェンは、著名な投資家から支持される急速に進化するスタートアップを率いていま...

人工知能

「マーシャンの共同創設者であるイータン・ギンスバーグについてのインタビューシリーズ」

エタン・ギンズバーグは、マーシャンの共同創業者であり、すべてのプロンプトを最適なLLMに動的にルーティングするプラットフ...