1 puan yazan GN⁺ 2024-02-09 | 1 yorum | WhatsApp'ta paylaş
  • Ollama, OpenAI Chat Completions API için başlangıç düzeyinde uyumluluğu yerleşik olarak sunarak OpenAI araçlarının ve uygulamalarının yerel modellere olduğu gibi bağlanabilmesini sağladı
  • Kurulumdan sonra llama2 veya mistral gibi bir modeli indirip OpenAI istek biçimini koruyarak yalnızca host’u değiştirerek çağrı yapılabilir
  • OpenAI Python ve JavaScript kütüphaneleri, base_url/baseURL değerini belirleyip zorunlu olsa da kullanılmayan bir api_key değeri girilerek çalışır
  • Vercel AI SDK ile streaming sohbet uygulamasını ve Microsoft Autogen çoklu ajan framework’ünü Ollama’ya bağlayan örnekler sunuluyor
  • Mevcut destek erken deneysel destek aşamasında; Embeddings API, fonksiyon çağırma, vision desteği ve Logprobs iyileştirmeleri ileride değerlendirilecek konular arasında

OpenAI API biçimiyle Ollama çağırma

  • Ollama, OpenAI Chat Completions API ile uyumlu bir endpoint sağlayarak yerel modellerin mevcut OpenAI tabanlı araçlarda kullanılmasını mümkün kılar
  • Başlamak için Ollama’yı kurup Llama 2 veya Mistral gibi bir modeli indirin
ollama pull llama2
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
  • OpenAI Python kütüphanesinde base_url, Ollama’nın yerel endpoint’i olarak belirtilir
    • api_key='ollama' zorunludur ancak kullanılmaz
from openai import OpenAI
client = OpenAI(
base_url = 'http://localhost:11434/v1',
api_key='ollama',
)
response = client.chat.completions.create(
model="llama2",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The LA Dodgers won in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
print(response.choices[0].message.content)
  • OpenAI JavaScript kütüphanesinde baseURL, http://localhost:11434/v1 olarak ayarlanır
    • apiKey: 'ollama' da zorunludur ancak kullanılmaz
import OpenAI from 'openai'
const openai = new OpenAI({
baseURL: 'http://localhost:11434/v1',
apiKey: 'ollama',
})
const completion = await openai.chat.completions.create({
model: 'llama2',
messages: [{ role: 'user', content: 'Why is the sky blue?' }],
})
console.log(completion.choices[0].message.content)

Örnek entegrasyonlar ve gelecek planları

  • Vercel AI SDK, etkileşimli streaming uygulamaları oluşturmak için açık kaynaklı bir kütüphanedir; Next.js OpenAI örneği Ollama’ya uyarlanarak kullanılabilir
npx create-next-app --example https://github.com/vercel/ai/tree/main/examples/next-openai example
cd example
  • app/api/chat/route.ts içinde OpenAI istemci ayarı Ollama’nın yerel endpoint’iyle değiştirilir
const openai = new OpenAI({
baseURL: 'http://localhost:11434/v1',
apiKey: 'ollama',
});
  • Chat completions isteği llama2 modeli ve stream: true kullanır
const response = await openai.chat.completions.create({
model: 'llama2',
stream: true,
messages,
});
  • Uygulama npm run dev ile çalıştırılır ve tarayıcıda http://localhost:3000 açılarak kontrol edilir
npm run dev
  • Autogen, Microsoft’un çoklu ajan uygulamaları için açık kaynaklı framework’üdür; örnek Code Llama kullanır
ollama pull codellama
pip install pyautogen
from autogen import AssistantAgent, UserProxyAgent
config_list = [
{
"model": "codellama",
"base_url": "http://localhost:11434/v1";,
"api_key": "ollama",
}
]
assistant = AssistantAgent("assistant", llm_config={"config_list": config_list})
user_proxy = UserProxyAgent("user_proxy", code_execution_config={"work_dir": "coding", "use_docker": False})
user_proxy.initiate_chat(assistant, message="Plot a chart of NVDA and TESLA stock price change YTD.")
  • Örnek python example.py ile çalıştırılır ve asistanın grafiği çizecek kodu yazması sağlanır
python example.py
  • OpenAI API desteği erken deneysel destek aşamasındadır
    • Gelecekte iyileştirme için değerlendirilecek başlıklar Embeddings API, fonksiyon çağırma, vision desteği ve Logprobs’tur
    • GitHub issue’ları kabul edilebilir; daha fazla bilgi OpenAI uyumluluk belgesinde bulunabilir

1 yorum

 
GN⁺ 2024-02-09
Hacker News yorumları
  • Son birkaç ayda yerel LLM barındırma kullanımının kolaylaşma hızı şaşırtıcı. Daha birkaç saat önce https://github.com/Mozilla-Ocho/llamafile'ın ne kadar kolay olduğundan bahsediyordum[1], şimdi ise ne kullanmam gerektiğini düşünür oldum
    [1] Kelimenin tam anlamıyla birkaç saat önce: https://euri.ca/blog/2024-llm-self-hosting-is-easy-now/

    • Artık bir şirketin temel RAG destekli çıkarım sunucusunu kendi bünyesinde barındırmasının daha kolaylaştığını düşünüyorum. Bir Mac Mini ya da Mac Studio alın, ollama serve çalıştırın, Docker'da ollama web-ui ayağa kaldırın, web UI üzerinden OllamaHub'dan bir kodlama yardım modeli ekleyin ve belgeleri yükleyin, hepsi bu
      Kod yazmadan, belgeleri bağlam olarak kullanıp yanıt veren, kendi barındırdığınız bir LLM'iniz oluyor. Bizim tarafta 64GB RAM'li Mac Studio'da deepseek coder 33b yeterince hızlı çalışıyor ve dahili kodlama dokümanlarına dayanarak oldukça iyi öneriler veriyor
    • Şahsen Ollama'yı öneririm. Model yönetimi Docker'a benzer şekilde iyi oturmuş ve API desteği de daha geniş
      Tek bir model dosyası içinde birden fazla modeli karıştırmak da mümkün; bu, şu sıralar denenen bir özellik. Mutlaka Ollama'nın model kütüphanesine bağlı kalmanız gerekmiyor, kendi oluşturduğunuz modelleri de kullanabilirsiniz. Yeni model desteği llama.cpp binding'leri üzerinden geliyor
    • Bu alandaki gelişim hızı gerçekten şaşırtıcı. llamafile'ı ayağa kaldırmanın kolay olması hoşuma gitmişti, ama yeterli özelliklere sahip bir sohbet arayüzü eksik geldiği için onun üzerine https://recurse.chat/'i yaptım
      Bazı işler için hâlâ GPT-4 gerekiyor, ancak günlük kullanımda ChatGPT kullanımımın önemli bir kısmının yerini aldı; özellikle de tüm ChatGPT sohbet geçmişini içe aktarabilmesi hoşuma gidiyor. İnsanların yerel yapay zekayla ne yapmak istediğini de merak ediyorum
    • MBP'de yerel geliştirme için Ollama ve Mixtral-7B kullanıyorum ve çok memnunum
    • Hep sadece llamacpp -m -p kullandım; MacBook'ta Mixtral 8x7b + CodeLlama 70b'yi günlük araç gibi rahatça kullanıyorum. Llama.cpp alternatiflerinin sahip olduğu belirleyici bir özellik var mı merak ediyorum; yeni ve havalı akımları kaçırmak istemiyorum
  • İşletme profesörüyüm; öğrencilerimin Ollama ve web-ui'yi denemesi için Google Cloud üzerinde çalıştırmaya yönelik bir rehber hazırladım[1]. Spot instance kullanırsanız saati 18 sente çalıştırabilirsiniz
    [1] https://docs.google.com/document/d/1OpZl4P3d0WKH9XtErUZib5_2...

    • Bu şekilde yapılandırınca öğrencilerin yönetici yetkileri ele geçirilip instance'ları çalınabilir. Hiç güvenli değil. git-bash içinde SSH anahtarı kullandırmanızı şiddetle öneririm. Zaten anlattıklarınızdan teknik olarak daha zor da değil
    • Google Colab üzerinde de pek çok şeyi ücretsiz çalıştırabilirsiniz. KoboldCPP'nin web sitesinde önceden hazırlanmış çalışma ortamları gayet iyi ve başka modeller de yükleyebiliyor
  • OpenAI API uyumluluğunun topluluk standardı hâline gelmesinden içten içe rahatsız olan birkaç kişi tanıyorum. data.choices.text.response gibi tuhaflıklar ya da şemanın gereksiz derecede savunmacı iç içe yapısı dışında pek şikâyetim yok
    API'nin standart hâline gelme sürecinde hangi sıkıntı noktaları var, değerlendirmeye değer alternatif standartları deneyen oldu mu merak ediyorum

    • Dokümantasyon gerekiyor
      Topluluk standardı hâline gelmesi sorun değil, ama topluluğun OpenAI API uyumlu derken neyi kastettiğine dair çok sağlam bir spesifikasyon olmalı. Özellikle OpenAI bu sabah yeni bir özellik çıkarmış olsa bile o standart istikrarlı kalmalı
      İstediğim şey, hata koşullarını da içeren sağlam bir API spesifikasyonu, yeni bir implementasyonun spesifikasyona uyup uymadığını doğrulayacak bir test seti ve bir isim. Örneğin bir yazılımın OpenAI-API-Spec v3 ile uyumlu olduğu söylendiğinde bunun ne anlama geldiğini bilmek isterim. Şu anki gibi sadece “OpenAI API uyumlu” denmesi yeterli bilgi vermiyor. API'nin hangi kısmı, API'nin hangi zamandaki hâliyle uyumlu, belli değil
    • Açıkçası bunu eklemeden önce içeride çok tartıştık. Başkasının API'sine bağlanıp bizim projeye hangi özellikleri koymamız ya da koymamamız gerektiğini o API'nin belirleyebilmesi garip
      Ollama'ya havalı, yeni ve farklı özellikler eklesek bile OpenAI API tarafında karşılığı yoksa insanların bunu kullanıp kullanamayacağını bilmiyorum
    • Bu yüzden seçenek olarak sunulması iyi. Sürtünmeyi azaltır ve OpenAI'nin hendeğine bağımlılığı düşürebilir
    • Hiç standart olmamasındansa kusurlu bir standardın her zaman daha iyi olduğunu düşünüyorum
    • İstediğiniz dilin binding'leriyle llama.cpp fonksiyonlarını doğrudan çağıran bir web sunucusu yapmak çok kolay, bu yüzden çok da önemli değil. Daha fazla kontrol gerekiyorsa biraz daha çalışmak yeterli; böyle tak-çalıştır araçlara illa ihtiyaç yok
  • İş yerinde Copilot'tan daha iyi bir sürüm geliştiriyoruz ve kullanıcının kendi LLM'ini getirmesi modelini de destekliyoruz. Son zamanlarda OpenAI uyumlu bir backend ekliyoruz; OpenAI uyumlu API endpoint'ini ve hangi model gibi ele alınacağını belirtmeniz yeterli, o modelin semantiğine göre prompt'u, durdurma sekanslarını, maksimum token sayısını vb. biçimlendirebiliyoruz
    Yerel geliştirme ortamında test etmek için tam olarak böyle bir şeye ihtiyacımız vardı. Ollama bunu desteklerse, desteklememiz gereken çok sayıdaki LLM için test yapmak çok daha kolaylaşır. OpenLLM gibi çeşitli araçların da aynı API'yi uyguladığını görünce herkesin OpenAI API uyumluluğuna yöneldiği anlaşılıyor

  • Şu anda bir yapay zeka startup’ı kuruyor olmak gerçekten iyi hissettiriyor
    Başta token sınırlarıyla uğraşıyorduk ama çözüldü; tutarlı JSON çıktısı sorunu da çözüldü; büyük üçüncü taraf modellerde hız sınırı ve performans sorunları da çözüldü; küçük ve orta karmaşıklıktaki işler için açık kaynak modelleri kendi altyapımızda barındırıp maliyeti düşürme isteği de çözüldü
    Her büyük LLM ilerlemesinde ürün otomatik olarak daha ucuz, daha kararlı ve daha ölçeklenebilir hâle geliyor gibi. Elbette savunulabilirlik inşa etmeye ve “yapay zeka olmayan” her şeyde farklılaşmaya odaklanmak gerekiyor

    • Token sınırlarının çözüldüğüyle ne kastedildiğini merak ediyorum. Son sürümlerdeki bağlam limitlerinin çok daha büyüdüğünü, ama maliyetin de çok daha pahalı hâle geldiğini mi söylüyorsun?
  • OpenAI ile uyumlu dendiğinde function calling veya tool calling de bekleniyor; bu yüzden biraz yanlış anlaşılmaya açık olduğunu düşünüyorum
    Rol ve içerik yapısının olması güzel, ama zaten bunun uygulaması oldukça basitti. Ajanlara gelince gerçek eylemlerin yürütülmesi gerekiyor. Başlattığım ajan barındırma sistemine bir betik motoru koymuştum; bu yüzden güvenlik ve izinleri hallettikten sonra ajanın doğrudan kod çalıştırmasına izin vermek mi gerekir diye düşünmüştüm. Gerçekten de öyle başlamıştım
    Bu nedenle function/tool calling’in mutlaka gerekli olduğundan emin değilim. Ama birçok kişi tool calling’i standartlaştırıyorsa, keyfi betik çalıştırma olsa bile bunu kendi framework’üme eklemem gerekebilir

    • Dokümantasyonda kapsam dışı bırakılan özellikleri açıkça belirtiyorlar: https://github.com/ollama/ollama/blob/main/docs/openai.md
      Function calling/tool seçimi uygulama seviyesinde ele alınıyor ve şu anda standart bir biçimi yok. Yaygın kullanılanlar bile aslında verimsiz, özel sistem prompt’larına oldukça yakın: https://github.com/langchain-ai/langchain/blob/master/libs/l...
    • Gemini Pro function/tool calling’i desteklediği için ilgimi çekmişti, ama pratikte berbat çalışıyor. Gemini Ultra’yı henüz denemedim ve API ile mümkün olup olmadığı da belirsiz
      Her hâlükârda çalışmayan bir desteği sunmamak daha iyi olabilir
    • OpenAI API’yi kullanmış biri için bu gayet anlaşılır bir tercih
  • Bu arada Ollama’nın Linux kurulum betiği, günümüz araçlarında yaygın olan “standart” şekilde çalışıyor:
    curl https://ollama.ai/install.sh | sh
    Ancak son kontrol ettiğimde bu betik sudo ile root yetkisi istiyordu. Aracı kullanmak istiyorsanız betiği indirip incelemek veya ihtiyacınıza göre düzenlemek iyi olur

    • Manuel kurulum talimatları var[0]. Ona bakınca başlangıçta otomatik çalışan bir SystemD servisi ayarlıyor gibi görünüyor. Sadece denemek içinse [1]’i indirip çalıştırılabilir yapmak (chmod +x ollama-linux-amd64) ve çalıştırmak yeterli olmuştu. Root yetkisi gerekmemişti
      [0] https://github.com/ollama/ollama/blob/main/docs/linux.md#man...
      [1] https://ollama.ai/download/ollama-linux-amd64
    • ollama ikili dosyası /usr/bin içine konuyor; bunu yapmak şart değil ama kullanışlı. Bunun dışında neyin root erişimi gerektirdiğini kontrol etmedim
    • Günümüzde paket yöneticileri var
  • Uyumluluk katmanı kütüphanenin içine de yapılabilir. Örneğin LangChain’in llm() fonksiyonu birden çok LLM backend’iyle çalışabiliyor. Hangisini tercih ettiğinizi merak ediyorum

    • Kütüphanenin içinde olmasını tercih ederim, ama şu anda epey sorun var. En büyük sorun, ekosistemin o kadar hızlı hareket etmesi ki kütüphane wrapper’ları yetişemiyor
      Bir diğeri de, dünya LangChain gibi berbat bir kütüphane üzerinde standartlaşırsa, tek tip olmayan backend’lerin bakım maliyeti yüzünden sonradan gelenlerin ölmesi ve uzun süre kilitli kalması. Bu yüzden şu anda tek tip bir API, pratiklik açısından daha iyi bir seçenek gibi görünüyor
    • Böyle olursa her kütüphanenin her LLM’i desteklemesi gerekir. Bunu, nesne depolamada sonunda neredeyse herkesin S3 uyumlu API desteklemesine benzer bir sorun olarak görüyorum
      Kusursuz olmasa da standart bir API’nin olması iyi. Aynı zamanda Backblaze’in B2’si gibi tüm potansiyeli kullanmayı sağlayan ikinci bir API’nin olması da sorun değil. Tüm modellere uyan tek bir yaklaşım yok; modellerin farklı yetenekleri varsa iki seçeneği de sunmanın iyi olduğunu düşünüyorum
    • OpenAI uygulamasını çıkarmadan önce kendi yaptığım sistemde LangChain kullanıyordum. LLM’e bağladığım çok basit bir SMS arayüzüydü ve GPT-4 API ile doğrudan uğraşmaktansa LangChain’in soyutlamasıyla çalışmayı tercih ediyordum
  • Python’da açık kaynak modeller (HF, VLLM üzerinden) ile ticari modeller (OpenAI, Google, Anthropic, Together) arasında kolayca geçiş yapmayı sağlayan bir proje geliştiriyorum: https://github.com/datadreamer-dev/DataDreamer
    HTTP API olmadan doğrudan Python içinde kullanmak istiyorsanız biraz daha kolay bir yol

  • Ollama’nın kullanım alanının ne olduğunu merak ediyorum. Neden doğrudan llama.cpp kullanılmasın?

    • LLM’ler için Docker/paket yöneticisi gibi bir şey. Standartlaştırılmış ve basit bir CLI ile kolayca kurulum yapabilir, yeni modeller bulabilir ve güncelleyebilirsiniz. Otomatik güncellemeler de zahmetsiz
    • Ben de aynı şeyi merak ediyorum. Ollama çok tanıtılıyor ve iyi tepki alıyor gibi görünüyor; ama bugünlerde OpenAI uyumlu yerleşik sunucusu da olan llama.cpp’yi doğrudan kullanmaya kıyasla tam olarak ne avantajı var, merak ediyorum