paint-brush
Ollama の使用方法: ローカル LLM の実践とチャットボットの構築@arjunrao1987
34,310 測定値
34,310 測定値

Ollama の使用方法: ローカル LLM の実践とチャットボットの構築

Arjun 7m2024/03/14
Read on Terminal Reader

長すぎる; 読むには

ローカル LLM の領域で、私は最初に LMStudio に出会いました。アプリ自体は使いやすいですが、Ollama のシンプルさと操作性が気に入りました。 Ollama について詳しく知りたい場合は、ここをご覧ください。 tl;dr: Ollama は、アクセスできる独自の厳選されたモデルのリストをホストしています。 これらのモデルをローカル マシンにダウンロードし、コマンド ライン プロンプトを介してこれらのモデルを操作できます。あるいは、モデルを実行すると、Ollama はポート 11434 (デフォルト) でホストされる推論サーバーも実行し、API や Langchain などの他のライブラリを介して対話できます。
featured image - Ollama の使用方法: ローカル LLM の実践とチャットボットの構築
Arjun  HackerNoon profile picture

これは、Ollama について深く掘り下げ、ローカル LLM と推論ベースのアプリケーションでローカル LLM を使用する方法について学んだことの最初の部分です。この投稿では、次のことを学びます —


  1. オラマの使い方
  2. Ollama で独自のモデルを作成する方法
  3. Ollama を使用してチャットボットを構築する


LLM (ローカル LLM を含む) の基本を理解するには、このトピックに関する私の以前の投稿を参照してください。

まず背景について

ローカル LLM の領域で、私は最初に LMStudio に出会いました。アプリ自体は使いやすいですが、Ollama のシンプルさと操作性が気に入りました。 Ollama について詳しく知りたい場合は、ここを参照してください。

tl;dr: Ollama は、アクセスできる独自の厳選されたモデルのリストをホストしています。


これらのモデルをローカル マシンにダウンロードし、コマンド ライン プロンプトを介してこれらのモデルを操作できます。あるいは、モデルを実行すると、Ollama はポート 11434 (デフォルト) でホストされる推論サーバーも実行し、API や Langchain などの他のライブラリを介して対話できます。


この投稿の時点で、Ollama には 74 のモデルがあり、これには埋め込みモデルなどのカテゴリも含まれています。

オラマの使い方

選択した OS 用の Ollamaをダウンロードします。それが完了したら、コマンドollama実行して、機能していることを確認します。ヘルプメニューが表示されるはずです —

 Usage: ollama [flags] ollama [command] Available Commands: serve Start ollama create Create a model from a Modelfile show Show information for a model run Run a model pull Pull a model from a registry push Push a model to a registry list List models cp Copy a model rm Remove a model help Help about any command Flags: -h, --help help for ollama -v, --version Show version information Use "ollama [command] --help" for more information about a command.


モデルを使用するには、まず、Dockerhub (過去に使用したことがある場合) や Elastic Container Registry (ECR) などからイメージをプルダウンするのと同じように、Ollama からモデルを「プル」する必要があります。


Ollama には、実行すると確認できるいくつかのデフォルト モデル (Facebook のオープンソース LLM であるllama2など) が付属しています。


 ollama list 


Ollama ライブラリ ページから操作したいモデル (たとえばphi ) を選択します。コマンドを実行して、このモデルをプルダウンできるようになりました。

 ollama pull phi 


ダウンロードが完了したら、次のコマンドを実行して、モデルがローカルで利用可能かどうかを確認できます。

 ollama list


モデルが利用可能になったので、実行する準備が整いました。次のコマンドを使用してモデルを実行できます。

 ollama run phi


回答の精度は必ずしも最高であるとは限りませんが、別のモデルを選択したり、微調整を行ったり、RAG のようなソリューションを独自に実装したりして精度を向上させることで、この問題に対処できます。


上記で示したのは、コマンド ライン プロンプトを使用して Ollama モデルを使用する方法です。ただし、Llama が実行している推論サーバーを確認すると、ポート 11434 にアクセスすることでプログラム的にアクセスする方法があることがわかります。

Langchain を使用して Ollama モデルにアクセスしたい場合は、次のようなものを使用できます。

 from langchain_community.llms import Ollama from langchain.chains import RetrievalQA prompt = "What is the difference between an adverb and an adjective?" llm = Ollama(model="mistral") qa = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True, ) response = qa(prompt)

Ollama で独自のモデルを作成する方法

Ollama のModelfileの概念を使用して、独自のモデル バリアントを作成することもできます。 Modelfile で設定するパラメータの詳細については、これらのドキュメントを参照してください。


モデルファイルの例 —

 # Downloaded from Hugging Face https://huggingface.co/TheBloke/finance-LLM-GGUF/tree/main FROM "./finance-llm-13b.Q4_K_M.gguf" PARAMETER temperature 0.001 PARAMETER top_k 20 TEMPLATE """ {{.Prompt}} """ # set the system message SYSTEM """ You are Warren Buffet. Answer as Buffet only, and do so in short sentences. """


Modelfile を取得したら、次を使用してモデルを作成できます。

 ollama create arjunrao87/financellm -f Modelfile

ここで、 financellm LLM モデルの名前で、 arjunrao87 ollama.com ユーザー名 (オンライン ollam レジストリの名前空間としても機能します) に置き換えられます。この時点で、作成したモデルを Ollama 上の他のモデルと同様に使用できます。


モデルをリモート ollam レジストリにプッシュすることも選択できます。これを実現するには、次のことを行う必要があります。


  • ollam.com でアカウントを作成します
  • 新しいモデルを追加する
  • リモート マシンからモデルをプッシュできるように公開キーを設定します。


ローカル llm を作成したら、次のコマンドを使用してそれを ollam レジストリにプッシュできます。

 ollama push arjunrao87/financellm

🦄 さて、良いところに入りましょう。

Ollama を使用してチャットボットを構築する

Ollama を使おうとしている間に、より楽しい発見の 1 つは、Python ベースの Web アプリケーション ビルダーのエコシステムに出会ったことです。 Chainlitを使用すると、ChatGPT のような本格的なチャットボットを構築できます。彼らのページにあるように、


Chainlit は、本番環境に対応した会話型 AI を構築するためのオープンソース Python パッケージです


私は、Chainlit で何ができるかを理解するために、Chainlit のチュートリアルをいくつか見ていきました。これには、一連のタスク (「ステップ」と呼ばれます) の作成、ボタンとアクションの有効化、画像の送信、その他あらゆる種類のことが含まれます。私の旅のこの部分は ここからご覧いただけます。


Chainlit のコツを理解したら、基本的に Ollama を使用する単純なチャットボットを組み立てて、(ChatGPT や Claude の代わりに) ローカル LLM を使用してチャットできるようにしたいと思いました。


Chainlit + Ollama を使用すると、50 行未満のコードでそれを行うことができます。それはクレイジーではないですか?

ライブラリとしての Chainlit は非常に簡単に使用できます。 Ollama の使用と操作には Langchain も使用しました。


 from langchain_community.llms import Ollama from langchain.prompts import ChatPromptTemplate import chainlit as cl


次のステップは、chainlit の@cl.on_chat_startデコレーターを使用して、チャットボットの読み込み画面をどのように表示するかを定義することです。

 @cl.on_chat_start async def on_chat_start(): elements = [cl.Image(name="image1", display="inline", path="assets/gemma.jpeg")] await cl.Message( content="Hello there, I am Gemma. How can I help you?", elements=elements ).send() .... ....


Messageインターフェイスは、Chainlit が UI に応答を送り返すために使用するものです。シンプルなcontentキーを使用してメッセージを構築し、それをelementsなどで装飾することができます。私の場合は、ユーザーが最初にログインしたときに画像を表示するためにImageを追加しました。


次のステップでは、Langchain を呼び出して Ollama (選択したモデルで) をインスタンス化し、プロンプト テンプレートを構築します。 cl.user_sessionの使用は主に、ユーザー コンテキストと履歴の分離を維持するために行われますが、これは簡単なデモを実行するためだけであり、厳密に必要なわけではありません。


Chain は、カスタム チェーンの作成に使用されるRunnableと呼ばれる Langchain インターフェイスです。詳細については、こちらをご覧ください。


 @cl.on_chat_start async def on_chat_start(): .... .... model = Ollama(model="mistral") prompt = ChatPromptTemplate.from_messages( [ ( "system", "You are a knowledgeable historian who answers super concisely", ), ("human", "{question}"), ] ) chain = prompt | model cl.user_session.set("chain", chain)


これで、チャットボット UI を構築し、ユーザー入力を受け入れるためのすべての要素が揃いました。ユーザーが提供するプロンプトに対して何をしますか? Chainlit の@cl.on_messageハンドラーを使用して、ユーザーが提供したメッセージに対して何らかの処理を行います。


 @cl.on_message async def on_message(message: cl.Message): chain = cl.user_session.get("chain") msg = cl.Message(content="") async for chunk in chain.astream( {"question": message.content}, ): await msg.stream_token(chunk) await msg.send()


ドキュメントでは「応答のチャンクを非同期でストリームバックする」ことが示唆されているように、 chain.astreamはボットに必要なものです。


本当にそうです。いくつかのインポート、いくつかの関数、少しの砂糖を加えれば、機能的なチャットボットが完成します。

歴史家の良い反応


(当然のことながら)数学が苦手な生意気な歴史家;)


完全なコードについては、私のGitHubを参照してください。


このコンテンツに興味がある場合は、 👏ボタンをクリックするか、こちらからニュースレターを購読してください → https://a1engineering.beehiiv.com/subscribe 。多かれ少なかれ何かをする必要があるというフィードバックが得られます。ありがとう❤️


ここでも公開されています