これは、Ollama について深く掘り下げ、ローカル LLM と推論ベースのアプリケーションでローカル LLM を使用する方法について学んだことの最初の部分です。この投稿では、次のことを学びます — オラマの使い方 Ollama で独自のモデルを作成する方法 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 ここで、 LLM モデルの名前で、 ollama.com ユーザー名 (オンライン ollam レジストリの名前空間としても機能します) に置き換えられます。この時点で、作成したモデルを Ollama 上の他のモデルと同様に使用できます。 financellm arjunrao87 モデルをリモート ollam レジストリにプッシュすることも選択できます。これを実現するには、次のことを行う必要があります。 ollam.com でアカウントを作成します 新しいモデルを追加する リモート マシンからモデルをプッシュできるように公開キーを設定します。 ローカル llm を作成したら、次のコマンドを使用してそれを ollam レジストリにプッシュできます。 ollama push arjunrao87/financellm 🦄 さて、良いところに入りましょう。 Ollama を使用してチャットボットを構築する Ollama を使おうとしている間に、より楽しい発見の 1 つは、Python ベースの Web アプリケーション ビルダーのエコシステムに出会ったことです。 を使用すると、ChatGPT のような本格的なチャットボットを構築できます。彼らのページにあるように、 Chainlit 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() .... .... インターフェイスは、Chainlit が UI に応答を送り返すために使用するものです。シンプルな キーを使用してメッセージを構築し、それを などで装飾することができます。私の場合は、ユーザーが最初にログインしたときに画像を表示するために を追加しました。 Message content elements Image 次のステップでは、Langchain を呼び出して Ollama (選択したモデルで) をインスタンス化し、プロンプト テンプレートを構築します。 の使用は主に、ユーザー コンテキストと履歴の分離を維持するために行われますが、これは簡単なデモを実行するためだけであり、厳密に必要なわけではありません。 cl.user_session Chain は、カスタム チェーンの作成に使用される と呼ばれる Langchain インターフェイスです。詳細については ご覧ください。 Runnable 、こちらを @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 でも公開されています ここ