この動画では、Ollamaを使ってゼロからChatGPTを構築する方法について詳しく説明しています。Ollamaは、簡単に大規模な言語モデルをコンピュータ上で実行し、複数のモデルを並行して動かすことができるツールです。このプラットフォームには多様なオープンソースモデルが含まれており、Webやデスクトップ統合など様々な機能が提供されています。動画では、Ollamaを用いてChatGPTの構築プロセスと、さらに進んだアプリケーション開発方法についても触れています。
公開日:2023年11月11日
※動画を再生してから読むのがオススメです。
オープンソースのモデルを使って、ChatGPTをゼロから構築する方法を紹介します。
Ollamaは、コンピュータ上で大規模な言語モデルを実行し、その上に素晴らしいアプリケーションを構築する最も簡単な方法です。
Ollamaは複数のモデルを並列に実行することができます。
それは私が最初に見たときに完全に私を驚かせましたので、それもお見せします。
では行こう。
これがOllamaのホームページ、Ol LLaMA doaiで、今すぐダウンロードをクリックするだけです。
今はMac OSとLinux用だけだけど、Windows版も作っていて、もうすぐリリースされるよ。
でも、今すぐ使いたいなら、WSL for Windowsを使えばWindowsでも使えるようになるだろう。
ダウンロードをクリックして、それを開けばいい。
それだけです、終わりです。
そして一度開くと、タスクバーにこの小さなアイコンが表示されます。
それだけです、それがどれだけ軽量かです。
あとはすべて、コマンドラインやコードそのものを使って行う。
この小さなモデルのリンクをクリックすると、利用可能なモデルが表示されます。
現在最も人気のあるオープンソースのモデルがすべて揃っている。
ここにはCode LLaMA、LLaMA 2、Mistralなど、たくさんのモデルがあります。
さあ、見てみてください。
Zephyr、Falcon。
ドルフィン2.2 Mistralもある。
というわけで、本当にたくさんの素晴らしいモデルがあり、常に追加されているんだ。
コマンドラインから実行する方法をお見せしましょう。
そして、複数のモデルを同時に立ち上げ、実行できるようにする方法をお見せします。
そして、それを使って何かを作ります。
タスクバーでOllamaを起動させ、Ollama runと実行したいモデル名を入力するだけです。
そしてNralを実行する。
私はすでにNralをダウンロードしているが、もしダウンロードしていなければ、ダウンロードしてくれるだろう。
Enterを押せば完了です。
これでNralは起動した。
テストしてみましょう。
ジョークを言ってみてください。
見てください、この速さ。
どうして算数の本は悲しかったの?
それは多くの問題を抱えていたからです。
だから完璧なんだ。
それは非常に高速で、それはOllamaとMistralの両方の機能です。
でも、驚かせてやろう。
つ目のウィンドウを開けよう。
このウィンドウを横に並べてみる。
そしてMistralを起動させたまま、OllamaでLLaMA LLaMA 2を実行する。
そして今度はLLaMA 2を同時に走らせる。
私のMacはかなりハイエンドだが、その処理速度は驚くほど速い。
だから、左側にMistralがあり、右側にL2があります。
私は彼らに、長い応答を書く必要があるプロンプトを与え、それを同時に行うようにします。
どうなるか見てみよう。
左側には、AIについて1000字のエッセイを書いてください。
そして右側には、LLaMA 2を使って、AIについて千字のエッセイを書いてください。
まず最初に、mistlを起動します。
そして同時にLLaMA 2を起動させる。
どうなるか見てみよう。
よし、左側のLLaMA 2が最初に動き出した。
AIについてのエッセイを書いているところだ。
右側ではLLaMA 2が待機していて、それが終わるとすぐにLLaMA 2で書き始める。
なんてすごいんだろう。
だから、モデルを交換するのはわずか1秒から1.5秒です。
どうやってそんなことができるのか、本当に驚かされる。
だから、左側でMistralを実行し、右側でLLaMAを実行し、それらは順番に実行されました。
4台、8台、10台......同時に走らせたいモデルをいくつでも走らせることができ、それらがキューに並んで順次走る。
モデル間の切り替えは、非常に高速です。
おそらく、これは本当にクールだが、どんなときに役に立つのだろうかと自問していることだろう。
まあ、2つのユースケースが考えられる。
ひとつは、適切なタスクに適切なモデルを用意できることだ。
これによって、ほぼディスパッチ・モデルとして機能する一元化されたモデルを持つことができ、さまざまなタスクをそのタスクに最も適したモデルにディスパッチすることができる。
それで思い出すのは何だろう?
オートジェンだ。
LLaMAを搭載した同じコンピューター上で、オートジェンを使ってさまざまなモデルを走らせることができる。
オートジェンはシーケンシャルに動作するので、この種の作業には最適なんだ。
そして、これで2つあります。
好きなだけ開くことができることがお分かりいただけたと思うので、LLaMA 2を閉じようと思う。
システムメッセージのプロンプトを調整したいとしよう。
それは簡単にできます。
その方法をお見せしましょう。
では、Visual Studio Codeに切り替えてみましょう。
そして、私たちが必要とするのは、モデルファイルと呼ばれるものを作成することです。
モデル・ファイルを開始するには、fromとLLaMA toを記述します。
そしてmistlに変更します。これが今使っているモデルだからです。
保存をクリックすると、Pythonとして認識されるため、その下に下線が表示されます。
でもこれはPythonではありません。
今はプレーンテキストのままにしておきます。
そして、ここで温度を設定できます。
温度を0.5に設定しよう。
そしてシステム・プロンプトを設定する。
例のプロンプトは「あなたはスーパーマリオブラザーズのマリオです。
マリオとして答えてください。
では、そうしてみましょう。
うまくいくか見てみましょう。
モデルファイルができたので、ターミナルに戻ります。
そして、モデルファイルを作成する必要があります。
これはモデルファイルを使ってモデルAのプロファイルを作成することです。
oama create Mario DFと表示されるので、モデルファイルを指定してエンターキーを押します。
モデルファイルを解析し、モデルを探します。
すべて正しく行われました。
次にo LLaMA Run Marioを実行し、エンターキーを押す。
そうすると、マリオが起動する。
あなたは誰ですか?
アシスタントのマリオです。
お会いできてうれしいです。
今日はどのようなご用件でしょうか?
お住まいを教えてください。
では、今度はMarioとして回答するようになります、それだけです。
そして、必要であれば、複雑なシステムプロンプトを与えることもできますし、そのモデルファイルでやりたい他のすべてのカスタマイズを行うことができます。
そしてもうひとつ、Ollamaにはたくさんの統合機能がある。
ウェブとデスクトップのインテグレーションです。
HTMLのUIやチャットボットのUIもあります。
これらすべての異なるUIがあります。
ターミナル・インテグレーションもあります。
LangChainやLlamaIndexなどのライブラリもあります。
拡張機能やプラグインもたくさんあります。
例えば、DiscordのAIボットを使うことができます。
これらはすべて本当に、本当に使いやすいです。
でも、僕は全部自分でやりたいんだ。
AMAの上に構築していきましょう。
まず最初に、このプロジェクト用に新しいフォルダを作成します。
右クリックして新しいフォルダを作り、オープンソースのモデルを使ったChatGPTクローンを作るので、open chatと呼ぶことにします。
次に、Visual Studio Codeを開いて、Open chatフォルダを開きます。
まだ何も入っていませんが、これから何かを入れます。
新しいPythonファイルを作成します。
保存します。
main.pyと名付け、チャットを開きます。
さて、まずは本当に簡単なことをやってみましょう。
私たちは単に応答を生成するだけで、つまり応答を得ることです。
Pythonでやっているので、2つのものが必要です。
import requestsとimport JSONだ。
この2つのライブラリだ。
そしてURLと、ローカルホスト。これはすべて私のローカルコンピューターで実行されるからで、ポート11434を使う。
APIにアクセスして、Endoを生成する。
ここにヘッダーがあり、次にデータがあります。
LLaMA 2は使用しません、実際にはMistral 7Bを使用する予定です、そしてそれが正しい構文だと思います。
試してみよう。
そして、プロンプトはテストとして「なぜ空は青いのか」となります。
そして、ヘッダーとデータを含むURLへの投稿をリクエストします。
応答を収集する予定です。
もし200が返ってきたら、それを表示します。
そうでなければ、エラーを表示します。
うまくいくか見てみましょう。
保存して、再生をクリックして、実行してみよう。
ミスタル7Bが見つかりません。
この部分を削除してもう一度やってみよう。
見てみよう。
よし、面白い。
応答がストリーミングされたようですね、なぜなら小さなピースがたくさん得られたからです。
では、それをどうまとめるかやってみよう。
ドキュメントを見ると、ここにJSONオブジェクトのストリームが返されると書いてある。
では、ストリームの最終的なレスポンスには、生成に関する追加データも含まれます。
では、たくさんの情報が得られますが、ストリーミングしない場合は、単にstream falseにします。
では、ここでそれをやってみよう。
stream falseを追加して、もう一度やってみよう。
どうなるか見てみよう。
falseは文字列ではありません。
オーケー、修正してもう一度実行してみよう。
falseは大文字にする必要があるようだ。
再生ボタンを押して、今回は動作したようです。
さあ、始めよう。
空が青く見えるのは、光線散乱と呼ばれる現象のためです。
これは光線散乱と呼ばれる現象です。
完璧にできました。
というわけで、私はこのような付加的な情報はあまり欲しくありません。
私が本当に欲しいのは答えだけなのです。
では、調整してみましょう。
さて、ここでいくつか変更を加えました。
まず、レスポンス・テキストを取得します。
次にJSONを読み込みます。
次にJSONをパースします。
そして、このJSONから実際のレスポンス(モデルからのレスポンス)を取得します。
そしてそれを表示します。
もう一回やってみましょう。
それです、完璧です。
これでレスポンスが得られました。
さて、基本的なことはできたので、実際にブラウザで使えるようにグラディオのフロントエンドを追加してみましょう。
そして、ユーザーが行き来して実際に会話をすることができるようにします。
面白いことに、このコードを書くのにmistroモデルを使っている。
これが私のやったことだ。
基本的には、持っていたコードを貼り付けて、Gradioを追加し、ユーザーとモデルの間でのやり取りも許可しましょう、と言った感じです。
すると、このgenerate responseメソッドが生成された。
この生成レスポンス・メソッドに、このデータ・オブジェクトを含むたくさんのものを移動させました。
ですから、今後はすべてこのgenerate responseメソッドを通して実行することになります。
それから、実際にGradioを開きます。
gradioのdoインターフェイスを用意し、この関数にレスポンスを生成させます。
入力は誰かが入力するプロンプトであり、出力は関数の応答です。
実行してみよう。
何が起こるか見てみよう。
そして起動します。
さあ、始めましょう。
ローカルのURLで実行されています。
クリックしてみましょう。
それを開いて、ここにあります。
gradioのインターフェイスができました。
動作することを確認しましょう。
では、ジョークを言ってください。
それです、ここにあります。
なぜ数学の本は悲しかったのか?
問題が多すぎたからです。
ほんの数分で、私たちはMistralを使った独自のChatGPTを作ることができた。
これは本当に信じられない。
しかし、そこで立ち止まってはいけない。
というのも、Mistralは私たちが以前に交わした会話の記憶を持っていないと思うからです。
では、もう1つ言ってみよう。
実際にここで動作するか見てみましょう。
そうすると、今度はまったく違うものが返ってくる。
前のメッセージの履歴を、そこに入るだけの数だけ持っていることを確認しよう。
オーケー、ではそのために会話の履歴を保存することにしましょう。できる限り多くの履歴を保存し、モデルに収まるようにしましょう。
もっといい方法があると思うが、ここではシンプルに、好きなだけメモリーを保存できることにしておこう。
もちろん、トークンの上限に達したらカットされる。
そこで、会話履歴を配列としてここに追加しよう。
そして、生成された応答に移るときに、会話履歴を追加する最初のことをします。
会話履歴を追加します。
そしてプロンプトを追加します。
そして次にすることは、新しい行を追加して、この新しい行で会話履歴を結合することです。
そして、それをフルプロンプトに追加します。
つまり、基本的に会話履歴全体をこのフル・プロンプトに入れます。
このように、フルプロンプトを入力します。
そして、最後に必要なのは、完全な応答が返ってきたら、それを履歴に追加することです。
だから、ここで、私たちは応答を取得する直前に、会話履歴を追加するつもりです。
そして実際のレスポンス。
そして、保存します。
gradioを終了して、クリアして、再生ボタンを押してください。
そうです。
さあ、開きましょう。
では、ジョークを言ってくれ。
なぜ科学者はアダムスを信用しないのか?
彼らはすべてをでっち上げるからだ
面白い。
もう1つ。
そして、私が何を言っているのかを知っているかどうか見てみましょう。
では、塩と熱い水を混ぜると何が得られるか、試してみましょう。
沸騰した溶液だ。
それです。
今までのメッセージの履歴があり、オープンソースのモデルによって動かされ、私自身かあなた自身によってゼロから書かれたものだ。
これでOllamaの作り方はわかっただろう。
もっと深く掘り下げて、もっと洗練されたものを作り続けてほしいなら、コメントで教えてほしい。
この動画が気に入ったら、いいねと登録を考えていただけると嬉しいです。次の動画でお会いしましょう。