TR ▾
API anahtarı al

Python ile Ollama API'si, Sonra Barındırılan Uç Nokta

ollama api python istemcisini kullanmak yaklaşık on satır sürer: paketi kurun, sunucuyu başlatın ve chat'i çağırın. Bu rehber bunu kapsar, ardından ortam değişkenlerini değiştirerek aynı programı barındırılan bir OpenAI uyumlu uç noktada nasıl çalıştıracağınızı gösterir.

Güncellendi

Masaüstü kutusundan sunucu bulutuna doğru kıvrılan ışık yılanı, Python'un yerel kodunu barındırılan alana taşıdığını gösterir
Yerel bilgisayar ve bulut sunucusuna ışık kablolarıyla bağlı sohbet penceresi

Kart gerekmez. Kayıt olduktan sonra, tek tıkla (kişi başı bir kez) $0,50 ücretsiz deneme kredisi talep edebilirsiniz.

API anahtarı al

Temel noktalar

  • pip install ollama çalıştırın, Ollama sunucusunu 11434 portunda başlatın ve indirdiğiniz bir modelle ollama.chat'i çağırın.
  • Akış için stream=True kullanın; bu, message.content içeren parçalar üretir.
  • Eksik modeller için ResponseError ve durdurulan sunucu için ConnectionError'ı işleyin.
  • Barındırılan alana geçmek için OpenAI SDK'sına geçin ve temel URL, anahtar ve modeli ortam değişkenleri aracılığıyla ayarlayın.

Python istemcisini kurun

Öncelikle Ollama'yı kurun, başlatın ve bir terminalden model indirin: ollama pull llama3. Sunucu http://localhost:11434 adresinde dinler. Ardından Python paketini sanal ortamda kurun:

python -m venv .venv
source .venv/bin/activate
pip install ollama openai

ollama paketi, /api altındaki Ollama'nın yerel yollarına bağlanır. openai paketi, bu rehberin ikinci yarısı için, hedef bir barındırılan uç nokta olduğunda kullanılır. Kodlamadan önce görsel bir araç tercih ediyorsanız, Ollama'yı GUI ile kullanma notlarına bakın.

Kurulumu terminalde ollama list çalıştırarak kontrol edin. Modeliniz burada görünüyorsa Python onu bulacaktır. Daha sonra bağlantı hatası alırsanız, sunucu muhtemelen çalışmıyordur.

İlk sohbet çağrınız

Bu, ollama api python temellerini tek bir kod parçasında içerir: bir sistem mesajı, bir kullanıcı mesajı ve iki seçenek.

import ollama

resp = ollama.chat(
    model="llama3",
    messages=[
        {"role": "system", "content": "Answer in one short paragraph."},
        {"role": "user", "content": "What is a context window?"},
    ],
    options={"temperature": 0.4, "num_ctx": 8192},
)
print(resp["message"]["content"])

Yanıt, sözlük benzeri bir nesnedir; metin message.content içinde yer alır. options içinde oluşturma parametrelerini ayarlayabilirsiniz. temperature rastgeleliği kontrol eder ve num_ctx bu çağrı için bağlam uzunluğunu belirler. Ollama, bağlamı yükseltmezseniz oldukça küçük bir bağlam varsayılanını kullanır; bu durum uzun belgeler yapıştıran ve metnin başını göz ardı eden yanıtlar alan kişileri şaşırtabilir.

Çok adımlı sohbet için mesaj listesini tutun ve her yanıtı kendiniz ekleyin. Ollama, diğer sohbet API'lerinin çoğu gibi, çağrılar arasında durum bilgisi tutmaz.

Akış yanıtları

Akış olmadan tam yanıtı beklersiniz. stream=True ile fonksiyon bir jeneratör döndürür ve parçalar geldikçe yazdırırsınız:

import ollama

for part in ollama.chat(
    model="llama3",
    messages=[{"role": "user", "content": "Explain recursion with a cooking analogy."}],
    stream=True,
):
    print(part["message"]["content"], end="", flush=True)

Her parça küçük bir message.content taşır. Son parçada done true olarak ayarlanmıştır ve zamanlama ile token sayılarını içerir. Web uygulamaları için bu parçaları sunucu tarafından gönderilen olaylar veya bir web soketi üzerinden tarayıcıya iletin.

Karşınıza çıkacak hatalar

İki hata çoğu başlangıç sorununu kapsar.

import ollama

try:
    ollama.chat(model="llama3", messages=[{"role": "user", "content": "hi"}])
except ollama.ResponseError as exc:
    if exc.status_code == 404:
        print("Model missing. Run: ollama pull llama3")
    else:
        raise
except ConnectionError:
    print("Cannot reach Ollama. Is the server running on port 11434?")

ResponseError ile 404 hatası, model adının indirdiklerinizle eşleşmediğini gösterir. Adlar etiketler içerir, bu nedenle llama3 ve llama3:70b farklı modellerdir. Bir bağlantı hatası, sunucunun çalışmadığını veya bir konteyner içinde olduğunuzu ve localhost'un ana makine yerine konteynere işaret ettiğini gösterir. Bu durumda doğru ana makine ile bir istemci geçirin: ollama.Client(host="http://host.docker.internal:11434").

Daha fazla desen common Ollama API mistakes içinde toplanmaktadır.

Aynı program, barındırılan uç nokta

Yerel modeller bellek ve hız sınırlamalarına sahiptir. Bir betiğin bir sunucuda çalışması, çoklu paralel işleri yönetmesi veya daha büyük bir pencere kullanması gerektiğinde, barındırılan bir uç nokta daha kolaydır. Püf noktası, programı OpenAI SDK'sına göre yazmak ve temel URL, anahtar ve modeli yapılandırma olarak işlemektir:

import os
from openai import OpenAI

client = OpenAI(
    base_url=os.environ.get("LLM_BASE_URL", "https://api.ollamansfw.com/v1"),
    api_key=os.environ["LLM_API_KEY"],
)
MODEL = os.environ.get("LLM_MODEL", "uncensored")

def ask(prompt, history=None):
    messages = (history or []) + [{"role": "user", "content": prompt}]
    out = ""
    for chunk in client.chat.completions.create(model=MODEL, messages=messages, stream=True):
        if chunk.choices and chunk.choices[0].delta.content:
            piece = chunk.choices[0].delta.content
            out += piece
            print(piece, end="", flush=True)
    return out

ask("Explain recursion with a cooking analogy.")

Yerel Ollama için LLM_BASE_URL=http://localhost:11434/v1, LLM_API_KEY=ollama (burada boş olmayan bir dize kabul edilir) ve LLM_MODEL=llama3 ayarlayın. Barındırılan API için yukarıdaki varsayılanları, gerçek anahtarınızı ve uncensored modelinizi kullanın. Kodda başka bir değişiklik gerekmez.

Bir anahtarı API anahtarı sayfasından alın. Yeni hesaplar, ödeme yapmadan ve 7 gün geçerli olacak şekilde tek tıkla $0,50 deneme kredisi talep edebilir. Model, bağımsız bir sağlayıcıdan gelen bir açık ağırlıklı modeldir ve yasal yetişkin kullanım için içerik reddi olmadan yanıt verecek şekilde ayarlanmıştır. Sadece metin içerir ve büyük bir laboratuvarın resmi API'si değildir.

Paralel çoklu istem gönderme

Tek bir makinedeki yerel model genellikle bir seferde bir istek işler, bu nedenle döngüler sıralıdır. Barındırılan uç nokta eşzamanlılığı destekler, bu da toplu işleri çok daha hızlı hale getirir. İşçi sayısını anahtarınızın limitinin altında tutun: tam anahtar için 8 eşzamanlı istek, deneme anahtarı için 2.

from concurrent.futures import ThreadPoolExecutor
from openai import OpenAI

client = OpenAI(base_url="https://api.ollamansfw.com/v1", api_key="YOUR_KEY")

def summarize(text):
    r = client.chat.completions.create(
        model="uncensored",
        messages=[{"role": "user", "content": "Summarize in one line: " + text}],
        max_tokens=60,
    )
    return r.choices[0].message.content

docs = ["first text", "second text", "third text"]
with ThreadPoolExecutor(max_workers=6) as pool:
    results = list(pool.map(summarize, docs))
print(results)

Altı işçi, 8 limitinin altında pay bırakır. Bir işçi 429 hatası alırsa, OpenAI SDK'sı varsayılan olarak birkaç kez yeniden dener, ancak uzun çalıştırmalar için kendi geri çekilme mekanizmanızı ekleyin. Ayrıca, her akışlı istek, akış bitene kadar slotunu tuttuğunu unutmayın, bu nedenle aynı deneme anahtarı üzerinde uzun bir akışlı sohbet ile büyük bir toplu işi karıştırmayın.

Planlamanız gereken farklılıklar

  • Yalnızca yerel seçenekler yok. num_ctx ve keep_alive barındırılan tarafta hiçbir anlama sahip değildir. Pencere 100.000 token kapasitesindedir; istem ve tamamlama birlikte.
  • Hız limitleri. Tam anahtar 8 eşzamanlı istek ve dakikada 300 istek izni verir; deneme anahtarı 2 ve 60 izin verir. Bunun ötesinde 429 hatası alırsınız rate_limited veya concurrency ile. Bir duraksamadan sonra yeniden deneyin; geçici aşırı yüklenme durumunda yanıt Retry-After: 5 taşır.
  • Maliyet. Giriş 1M token başına $0,15 ve çıktı 1M token başına $0,50'dir. 600 giriş ve 400 çıktı token içeren 2.000 istem gönderen bir betik, 2.000 x (600 x $0,15 + 400 x $0,50) / 1M = 2.000 x $0,00029 = $0,58 harcar.
  • Faturalandırma. Ön ödemeli kredi, $20 ile $500 arasında, kripto ile (TRC20 üzerinde USDT veya Base üzerinde USDC) ödenir. Başarısız veya reddedilen istekler için ücret alınmaz.

Uç noktaları karşılaştırmalı olarak görmek için API fiyatlandırma notumuzu veya dokümantasyonu okuyun.

Sorular ve cevaplar

Python'dan Ollama'ya nasıl çağrı yapılır?

ollama paketini kurun, sunucuyu başlatın, bir model çekin ve ardından model adı ile mesaj listesi kullanarak ollama.chat'i çağırın.

Ollama ile OpenAI Python SDK'sını kullanabilir miyim?

Evet. base_url değerini http://localhost:11434/v1 olarak ayarlayın ve herhangi bir boş olmayan API anahtarı kullanın; Ollama burada OpenAI uyumlu bir katman sunar.

Python'da Ollama çıktısını nasıl akış olarak alırım?

ollama.chat çağrısına stream=True parametresini geçirin ve döndürülen parçalar üzerinde döngü kurarak her birinin message.content içeriğini yazdırın.

Barındırılan bir uç noktaya geçtiğimde neler değişir?

Temel URL, API anahtarı ve model adı. num_ctx gibi yerel seçenekler geçerli değildir ve 429 hız limiti yanıtlarını işlemeniz gerekir.