- 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,
});
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
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/
ollama serveçalıştırın, Docker'daollama web-uiayağa kaldırın, web UI üzerinden OllamaHub'dan bir kodlama yardım modeli ekleyin ve belgeleri yükleyin, hepsi buKod 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
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.cppbinding'leri üzerinden geliyorllamafile'ı 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ımBazı 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
llamacpp -m -pkullandı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...
git-bashiçinde SSH anahtarı kullandırmanızı şiddetle öneririm. Zaten anlattıklarınızdan teknik olarak daha zor da değilOpenAI API uyumluluğunun topluluk standardı hâline gelmesinden içten içe rahatsız olan birkaç kişi tanıyorum.
data.choices.text.responsegibi tuhaflıklar ya da şemanın gereksiz derecede savunmacı iç içe yapısı dışında pek şikâyetim yokAPI'nin standart hâline gelme sürecinde hangi sıkıntı noktaları var, değerlendirmeye değer alternatif standartları deneyen oldu mu merak ediyorum
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 v3ile 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ğilOllama'ya havalı, yeni ve farklı özellikler eklesek bile OpenAI API tarafında karşılığı yoksa insanların bunu kullanıp kullanamayacağını bilmiyorum
llama.cppfonksiyonları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
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
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...
Her hâlükârda çalışmayan bir desteği sunmamak daha iyi olabilir
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 | shAncak son kontrol ettiğimde bu betik
sudoile root yetkisi istiyordu. Aracı kullanmak istiyorsanız betiği indirip incelemek veya ihtiyacınıza göre düzenlemek iyi olurchmod +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
ollamaikili dosyası/usr/biniçine konuyor; bunu yapmak şart değil ama kullanışlı. Bunun dışında neyin root erişimi gerektirdiğini kontrol etmedimUyumluluk 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 ediyorumBir 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
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
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.cppkullanılmasın?llama.cpp’yi doğrudan kullanmaya kıyasla tam olarak ne avantajı var, merak ediyorum