Bu, Ollama'ya ve yerel Yüksek Lisans'lar hakkında öğrendiklerime ve bunları çıkarım tabanlı uygulamalar için nasıl kullanabileceğinize daha derinlemesine bakmanın ilk kısmı. Bu yazıda şunları öğreneceksiniz:
LLM'lerin (Yerel LLM'ler dahil) temellerini anlamak için bu konuyla ilgili önceki paylaşımıma buradan bakabilirsiniz.
Yerel Yüksek Lisans'lar alanında ilk olarak LMStudio ile karşılaştım. Uygulamanın kullanımı kolay olsa da Ollama'nın sağladığı basitlik ve manevra kabiliyeti hoşuma gitti. Ollama hakkında daha fazla bilgi edinmek için buraya gidebilirsiniz.
tl;dr: Ollama, erişebileceğiniz modellerin kendi seçilmiş listesine ev sahipliği yapıyor.
Bu modelleri yerel makinenize indirebilir ve ardından bu modellerle komut satırı istemi aracılığıyla etkileşimde bulunabilirsiniz. Alternatif olarak, modeli çalıştırdığınızda Ollama, API'ler ve Langchain gibi diğer kütüphaneler aracılığıyla etkileşimde bulunabileceğiniz, 11434 numaralı bağlantı noktasında (varsayılan olarak) barındırılan bir çıkarım sunucusunu da çalıştırır.
Bu yazı itibariyle Ollama'nın gömme modelleri gibi kategorileri de içeren 74 modeli var.
Seçtiğiniz işletim sistemi için Ollama'yı indirin . Bunu yaptıktan sonra, çalıştığını doğrulamak için ollama
komutunu çalıştırırsınız. Size yardım menüsünü göstermeli —
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.
Herhangi bir modeli kullanmak için, tıpkı Dockerhub'dan (geçmişte kullandıysanız) veya Elastic Container Registry (ECR) gibi bir şeyden bir görüntüyü indirdiğiniz gibi, önce onları Ollama'dan "çekmeniz" gerekir.
Ollama, çalıştırarak görebileceğiniz bazı varsayılan modellerle (Facebook'un açık kaynaklı LLM'si olan llama2
gibi) birlikte gelir.
ollama list
Ollama kütüphane sayfasından etkileşim kurmak istediğiniz modeli ( phi
diyelim) seçin. Artık komutu çalıştırarak bu modeli aşağı çekebilirsiniz.
ollama pull phi
İndirme işlemi tamamlandıktan sonra aşağıdaki komutu çalıştırarak modelin yerel olarak mevcut olup olmadığını kontrol edebilirsiniz:
ollama list
Artık model mevcut olduğuna göre çalıştırılmaya hazırdır. Bir modeli şu komutu kullanarak çalıştırabilirsiniz —
ollama run phi
Yanıtların doğruluğu her zaman birinci sınıf olmayabilir, ancak farklı modeller seçerek veya belki bazı ince ayarlar yaparak veya doğruluğu artırmak için RAG benzeri bir çözümü kendi başınıza uygulayarak bunu çözebilirsiniz.
Yukarıda gösterdiğim şey Ollama modellerini komut satırı istemini kullanarak nasıl kullanabileceğinizi gösteriyor. Ancak, Llama'nın çalıştırdığı çıkarım sunucusunu kontrol ederseniz, 11434 numaralı bağlantı noktasına basarak buna erişmenin programlı yolları olduğunu görebilirsiniz.
Ollama modelinize erişmek için Langchain'i kullanmak istiyorsanız şunun gibi bir şey kullanabilirsiniz:
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'daki Modelfile
konseptini kullanarak kendi model varyantınızı da oluşturabilirsiniz. Model dosyanızda yapılandırılacak daha fazla parametre için bu dokümanlara bakabilirsiniz.
Örnek Model Dosyası —
# 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. """
Model dosyasına sahip olduğunuzda, modelinizi kullanarak oluşturabilirsiniz.
ollama create arjunrao87/financellm -f Modelfile
burada financellm
, LLM modelinizin adıdır ve arjunrao87
ollama.com kullanıcı adınız (aynı zamanda çevrimiçi ollama kayıt defterinizin ad alanı olarak da işlev görür) ile değiştirilecektir. Bu noktada oluşturduğunuz modelinizi Ollama'daki diğer modeller gibi kullanabilirsiniz.
Modelinizi uzak ollama kayıt defterine göndermeyi de seçebilirsiniz. Bunu gerçekleştirmek için yapmanız gerekenler
Yerel LLM'nizi oluşturduktan sonra, şunu kullanarak onu ollama kayıt defterine gönderebilirsiniz:
ollama push arjunrao87/financellm
🦄 Şimdi gelelim işin güzel kısmına.
Ollama'yı kullanma arayışım sırasında en hoş keşiflerden biri, karşılaştığım Python tabanlı web uygulaması geliştiricilerinden oluşan ekosistemdi. Chainlit, ChatGPT gibi tam teşekküllü bir sohbet robotu oluşturmak için kullanılabilir. Sayfalarının dediği gibi,
Chainlit, üretime hazır Konuşmalı Yapay Zeka oluşturmaya yönelik açık kaynaklı bir Python paketidir
Chainlit ile neler yapabileceğinizi öğrenmek için Chainlit eğitimlerinden birkaçını inceledim; bu, görev dizileri oluşturma ("adımlar" olarak adlandırılır), düğmeleri ve eylemleri etkinleştirme, görüntü gönderme ve her türlü şeyi içerir. Yolculuğumun bu kısmını buradan takip edebilirsiniz.
Chainlit'i öğrendikten sonra, sohbet etmek için yerel bir LLM'yi (ChatGPT veya Claude demek yerine) kullanabilmek için temelde Ollama'yı kullanan basit bir sohbet robotu oluşturmak istedim.
50 satırdan az kodla bunu Chainlit + Ollama'yı kullanarak yapabilirsiniz. Bu çılgınca değil mi?
Chainlit'in bir kütüphane olarak kullanımı son derece basittir. Ollama'yı kullanmak ve onunla etkileşimde bulunmak için de Langchain'i kullandım.
from langchain_community.llms import Ollama from langchain.prompts import ChatPromptTemplate import chainlit as cl
Bir sonraki adım, Chainlit'in @cl.on_chat_start
dekoratörünü kullanarak chatbot'un yükleme ekranının nasıl görünmesini istediğinizi tanımlamaktır —
@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
arayüzü, Chainlit'in yanıtları kullanıcı arayüzüne geri göndermek için kullandığı arayüzdür. Basit content
anahtarıyla mesajlar oluşturabilir ve ardından bunu elements
gibi şeylerle süsleyebilirsiniz; benim durumumda, kullanıcı ilk kez oturum açtığında bir resim göstermek için bir Image
ekledim.
Bir sonraki adım, Ollama'yı (seçtiğiniz modelle) başlatmak için Langchain'i çağırmak ve bilgi istemi şablonunu oluşturmaktır. cl.user_session
kullanımı çoğunlukla kullanıcı bağlamları ve geçmişlerinin ayrımını korumak içindir; yalnızca hızlı bir demo çalıştırmak amacıyla kesinlikle gerekli değildir.
Zincir, özel zincirler oluşturmak için kullanılan Runnable
adlı bir Langchain arayüzüdür. Buradan daha fazlasını okuyabilirsiniz .
@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)
Artık bir chatbot kullanıcı arayüzüne sahip olmak ve kullanıcı girişlerini kabul etmek için gereken tüm parçalara sahipsiniz. Kullanıcının sağladığı istemlerle ne yaparsınız? Kullanıcının sağladığı mesajla ilgili bir şeyler yapmak için Chainlit'in @cl.on_message
işleyicisini kullanacaksınız.
@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
dokümanların önerdiği gibi "zaman uyumsuz yanıtın parçalarını geri aktar", botumuz için istediğimiz de budur.
Gerçekten bu kadar. Birkaç ithalat, birkaç işlev, biraz şeker ve işlevsel bir sohbet robotunuz var.
Kodun tamamı için GitHub adresimi görebilirsiniz.
Bu içerik ilginizi çekiyorsa 👏 düğmesine basın veya bültenime buradan abone olun → https://a1engineering.beehiiv.com/subscribe . Bana bir şeyin daha fazlasını veya daha azını yapmam gerektiğine dair geri bildirim veriyor! Teşekkürler ❤️
Burada da yayınlandı