list_altİçindekilerexpand_more
- 01Mistral AI API’ye Giriş
- 02Hangi Mistral Modelini Seçmeli?
- 03La Plateforme’dan API Anahtarı Alma
- 04Python Ortamını Kurma
- 05İlk API Çağrısı: Temel Kullanım
- 06Multi-Turn Chatbot: Konuşma Geçmişi
- 07Streaming ile Gerçek Zamanlı Yanıt
- 08Function Calling: Dış Araçlara Bağlanma
- 09JSON Modu: Yapılandırılmış Çıktı
- 10Maliyet Optimizasyonu
- 11Le Chat vs Mistral API
- 12Sonraki Adımlar

Mistral AI API’yi birkaç satır Python ile kullanmaya başlayabilirsiniz. Bu rehber La Plateforme’da hesap açmaktan başlayıp multi-turn chatbot, streaming, function calling ve JSON moduna kadar tüm temel konuları kod örnekleriyle geçiyor.
Mistral AI API’ye Giriş
Mistral AI, 2023’te Paris’te kurulan ve hızla açık kaynak LLM alanındaki güçlü oyunculardan biri hâline gelen bir Avrupa yapay zeka şirketi. Mistral’ı öne çıkaran şey, hem Apache 2.0 lisansıyla tamamen açık modeller sunması hem de bu modelleri yönetilen bir API üzerinden erişilebilir kılması.
Mistral API neden tercih edilir? Birkaç somut neden var: Avrupa veri merkezlerinde çalışması GDPR uyumluluğunu kolaylaştırıyor. Codestral gibi özel kod modelleri yazılım geliştirme iş akışlarına doğrudan giriyor. Fiyat/performans dengesi rakiplerine kıyasla sık sık avantajlı çıkıyor.
Modelleri karşılaştırmalı görmek isteyenler için Mistral vs Llama 4 vs Gemma 3 açık kaynak LLM karşılaştırma yazımız iyi bir başlangıç noktası.
Hangi Mistral Modelini Seçmeli?
Mistral’ın model ailesi birkaç farklı kullanım senaryosuna göre şekilleniyor. API üzerinden erişilebilen başlıca seçenekler şunlar:
| Model | Kullanım Alanı | Giriş ($/MTok) | Çıkış ($/MTok) |
|---|---|---|---|
| Mistral Small 3.2 | Sınıflandırma, kısa yanıt, yüksek hacim | $0,10 | $0,30 |
| Mistral Medium 3 | Genel sohbet, belge analizi | $0,40 | $2,00 |
| Mistral Large 2 | Karmaşık akıl yürütme, uzun bağlam | $2,00 | $6,00 |
| Codestral | Kod tamamlama, açıklama, test | $0,30 | $0,90 |
| Pixtral Large | Görsel + metin, multimodal görevler | $2,00 | $6,00 |
Kaynak: Mistral AI resmi fiyatlandırma sayfası
Hızlı ve ucuz bir sınıflandırıcı kuruyorsanız Mistral Small yeterli. Karmaşık çok adımlı bir iş akışı üzerinde çalışıyorsanız Mistral Large 2’nin kapasitesine ihtiyaç duyabilirsiniz. Kod ağırlıklı projelerde Codestral ayrı bir seçenek olarak değerlendirin.
La Plateforme’dan API Anahtarı Alma
Mistral’ın yönetilen API servisi La Plateforme üzerinden çalışıyor. Hesap açmak için şu adımları izleyin:
- console.mistral.ai adresine gidin
- E-posta ile kayıt olun veya Google hesabınızla giriş yapın
- Ödeme yöntemi ekleyin (kredi kartı zorunlu, ücretsiz deneme kredisi başlangıçta verilir)
- Sol menüden API Keys bölümüne geçin
- Create new key ile yeni anahtar üretin
Anahtarı kopyaladıktan sonra doğrudan koda gömmeyin. Bunun yerine .env dosyasına yazın:
# .env
MISTRAL_API_KEY=your_api_key_here
Anahtarınızı bir kez görürsünüz; kaydetmeyi unutursanız yeni bir tane üretmeniz gerekir.
Python Ortamını Kurma
Mistral’ın resmi Python SDK’sını pip ile yükleyin:
pip install mistralai python-dotenv
Bağımlılıklarınızı requirements.txt ile kayıt altına alın:
mistralai>=1.0.0
python-dotenv>=1.0.0
Temel import yapısı şöyle:
import os
from dotenv import load_dotenv
from mistralai import Mistral
load_dotenv()
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
Mistral() sınıfı, MISTRAL_API_KEY ortam değişkenini otomatik olarak okur. load_dotenv() çağrısı bu değişkeni .env dosyasından yükler.
İlk API Çağrısı: Temel Kullanım
İlk çağrıyı yapmak için birkaç satır yeterli:
import os
from dotenv import load_dotenv
from mistralai import Mistral
load_dotenv()
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
response = client.chat.complete(
model="mistral-small-latest",
messages=[
{"role": "user", "content": "Python'da liste ve tuple arasındaki fark nedir?"}
]
)
print(response.choices[0].message.content)
Yanıt nesnesinden iki şeyi sık kullanacaksınız:
# Yanıt metni
metin = response.choices[0].message.content
# Token kullanımı
print(f"Giriş: {response.usage.prompt_tokens} token")
print(f"Çıkış: {response.usage.completion_tokens} token")
client.chat.complete() senkron çalışır; tüm yanıt hazır olana kadar bekler. Asenkron ihtiyaç için client.chat.complete_async() kullanılır.
Multi-Turn Chatbot: Konuşma Geçmişi
Mistral API durumsuz çalışır: her çağrıda tüm konuşma geçmişini göndermeniz gerekir. Geçmişi bir liste olarak yönetmek en temiz yol:
import os
from dotenv import load_dotenv
from mistralai import Mistral
load_dotenv()
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
gecmis = []
def konuş(kullanici_mesaji: str) -> str:
gecmis.append({"role": "user", "content": kullanici_mesaji})
yanit = client.chat.complete(
model="mistral-small-latest",
messages=gecmis
)
asistan_mesaji = yanit.choices[0].message.content
gecmis.append({"role": "assistant", "content": asistan_mesaji})
return asistan_mesaji
print(konuş("Python'da decorator nedir?"))
print(konuş("Bir örnek göster"))
print(konuş("Bu örneği nasıl genişletebilirim?"))
Uzun konuşmalarda bellek yönetimi önemli. Bağlam penceresi şişmesin diye son N mesajı tutabilirsiniz:
MAKS_GECMIS = 20
def gecmisi_kisalt(gecmis: list) -> list:
if len(gecmis) > MAKS_GECMIS:
return gecmis[-MAKS_GECMIS:]
return gecmis
Sistem talimatı eklemek isterseniz system rolünü geçmiş listesinin başına koyun ya da doğrudan messages parametresine verin:
messages = [
{"role": "system", "content": "Sen yardımcı bir Python asistanısın. Yanıtlarını kısa ve net tut."},
{"role": "user", "content": kullanici_mesaji}
]
Streaming ile Gerçek Zamanlı Yanıt
Normal çağrı tüm yanıtı bekler; kullanıcı uzun bir cevap için saniyeler boyunca boş ekrana bakabilir. Streaming bu beklemeyi ortadan kaldırıyor: yanıt token token geliyor ve anında ekrana yansıyor.
import os
from dotenv import load_dotenv
from mistralai import Mistral
load_dotenv()
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
def streaming_yanit(mesaj: str) -> str:
tam_yanit = ""
with client.chat.stream(
model="mistral-small-latest",
messages=[{"role": "user", "content": mesaj}]
) as stream:
for olay in stream:
if olay.data.choices[0].delta.content:
parca = olay.data.choices[0].delta.content
print(parca, end="", flush=True)
tam_yanit += parca
print()
return tam_yanit
streaming_yanit("Python'da asenkron programlamayı açıkla")
flush=True çıktı tamponlamasını devre dışı bırakır; her token anında terminale yazılır. Web uygulamalarında Server-Sent Events (SSE) ile aynı mantığı kullanabilirsiniz.
Function Calling: Dış Araçlara Bağlanma
Function calling, modelin bir dış API veya fonksiyon çağırması gerektiğinde ne yapması gerektiğini bildirmesini sağlıyor. Model fonksiyonu kendisi çalıştırmaz; hangi fonksiyonu hangi parametrelerle çağırmanız gerektiğini söyler.
Hava durumu örneği üzerinden adım adım:
import os
import json
from dotenv import load_dotenv
from mistralai import Mistral
load_dotenv()
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
# Araç tanımı
araclar = [
{
"type": "function",
"function": {
"name": "hava_durumu_al",
"description": "Belirtilen şehir için güncel hava durumu bilgisini döndürür",
"parameters": {
"type": "object",
"properties": {
"sehir": {
"type": "string",
"description": "Hava durumu sorgulanacak şehir adı"
}
},
"required": ["sehir"]
}
}
}
]
def hava_durumu_al(sehir: str) -> dict:
# Gerçek uygulamada bir hava durumu API'si çağırırsınız
return {"sehir": sehir, "sicaklik": 22, "durum": "güneşli"}
# İlk çağrı: model araç kullanmaya karar verir
yanit = client.chat.complete(
model="mistral-large-latest",
messages=[{"role": "user", "content": "İstanbul'da hava nasıl?"}],
tools=araclar,
tool_choice="auto"
)
mesaj = yanit.choices[0].message
# Model araç çağırdı mı?
if mesaj.tool_calls:
arac_cagrisi = mesaj.tool_calls[0]
fonksiyon_adi = arac_cagrisi.function.name
parametreler = json.loads(arac_cagrisi.function.arguments)
# Fonksiyonu çalıştır
sonuc = hava_durumu_al(**parametreler)
# Sonucu modele geri gönder
mesajlar = [
{"role": "user", "content": "İstanbul'da hava nasıl?"},
mesaj,
{
"role": "tool",
"tool_call_id": arac_cagrisi.id,
"content": json.dumps(sonuc)
}
]
son_yanit = client.chat.complete(
model="mistral-large-latest",
messages=mesajlar
)
print(son_yanit.choices[0].message.content)
Önemli bir nokta: model fonksiyonu çalıştırmaz. Hangi fonksiyona hangi argümanların gideceğini söyler; onu çağırmak sizin kodunuzun işi. Yanıt döndükten sonra sonucu tool rolüyle geri gönderirsiniz ve model nihai cevabı oluşturur.
JSON Modu: Yapılandırılmış Çıktı
Veri çıkarma, sınıflandırma veya form doldurma gibi görevlerde model çıktısını doğrudan JSON olarak almak kodu basitleştiriyor. Bunun için response_format parametresini kullanın:
import os
import json
from dotenv import load_dotenv
from mistralai import Mistral
load_dotenv()
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
kullanici_metni = """
Ad: Ahmet Yılmaz
E-posta: ahmet@example.com
Şehir: Ankara
İlgi Alanı: Python, makine öğrenmesi
"""
yanit = client.chat.complete(
model="mistral-small-latest",
messages=[
{
"role": "system",
"content": "Kullanıcı bilgilerini JSON formatında çıkar. ad, email, sehir ve ilgi_alanlari alanlarını doldur."
},
{
"role": "user",
"content": kullanici_metni
}
],
response_format={"type": "json_object"}
)
veri = json.loads(yanit.choices[0].message.content)
print(veri["ad"]) # Ahmet Yılmaz
print(veri["email"]) # ahmet@example.com
JSON modunda model, yanıtını mutlaka geçerli bir JSON nesnesi olarak döndürür. json.loads() her zaman başarılı olur; ek doğrulama katmanına gerek kalmaz.
Maliyet Optimizasyonu
En çok fark yaratan adım model seçimi. Gereksiz yere büyük model çalıştırmak, aynı kalite için 20 kat daha pahalıya işlem yapmak anlamına gelebilir.
Model bazında maliyet karşılaştırması:
| Model | Giriş ($/MTok) | Çıkış ($/MTok) | 1M token / günlük iş yükü |
|---|---|---|---|
| Mistral Small 3.2 | $0,10 | $0,30 | ~$0,30 |
| Mistral Medium 3 | $0,40 | $2,00 | ~$1,60 |
| Mistral Large 2 | $2,00 | $6,00 | ~$6,00 |
| Codestral | $0,30 | $0,90 | ~$0,70 |
Kaynak: Mistral AI resmi fiyatlandırma sayfası
Görev türüne göre model seçimini otomatikleştirmek istiyorsanız:
def model_sec(gorev_turu: str) -> str:
model_haritasi = {
"siniflandirma": "mistral-small-latest",
"ozet": "mistral-small-latest",
"sohbet": "mistral-medium-latest",
"kod": "codestral-latest",
"analiz": "mistral-large-latest",
"multimodal": "pixtral-large-latest"
}
return model_haritasi.get(gorev_turu, "mistral-small-latest")
Token sayımı: Gerçek maliyeti ölçmek için her çağrıdan sonra response.usage alanını loglayın:
def maliyetli_cagri_yap(mesajlar: list, model: str) -> str:
yanit = client.chat.complete(model=model, messages=mesajlar)
giris_token = yanit.usage.prompt_tokens
cikis_token = yanit.usage.completion_tokens
print(f"[{model}] giriş={giris_token} çıkış={cikis_token}")
return yanit.choices[0].message.content
Sistem promptu sabit kalıyorsa (her çağrıda aynı içerik), prompt önbellekleme token maliyetini önemli ölçüde azaltır. Prompt mühendisliği tekniklerimizde sistem talimatını minimize etme konusunu derinlemesine ele aldık.
Le Chat vs Mistral API
Le Chat, Mistral’ın kullanıcıya yönelik sohbet uygulaması. API ise geliştiriciye yönelik programatik erişim. Hangisini ne zaman kullanacağınıza karar vermeyi kolaylaştırmak için:
| Kriter | Le Chat | Mistral API |
|---|---|---|
| Hedef kullanıcı | Son kullanıcı, bireysel | Geliştirici, sistem entegratörü |
| Arayüz | Tarayıcı, mobil | Python, REST, SDK |
| Otomasyon | Yok | Tam |
| Maliyet kontrolü | Abonelik | Token başına ödeme |
| Özelleştirme | Sınırlı | Tam (sistem prompt, araçlar, format) |
| Büyük hacim işlem | Uygun değil | Uygun |
Kendi uygulamanıza Mistral entegre edecekseniz API; bireysel araştırma veya hızlı içerik üretimi için Le Chat doğru seçim.
Sonraki Adımlar
Temel yapıyı kavradıktan sonra ilerleyebileceğiniz birkaç yön:
RAG ile bilgi tabanı kurma: Mistral API’yi kendi belgelerinizle birleştirerek belgeye dayalı soru-cevap sistemi oluşturabilirsiniz. Başlangıç noktası için RAG ve yerel chatbot rehberimize bakın.
LangChain entegrasyonu: LangChain, Mistral API’yi zincirleme ve ajan iş akışlarına kolayca bağlıyor. langchain-mistralai paketi bu entegrasyonu birkaç satıra indiriyor.
Benzer API rehberleri: Claude API kullanmayı öğrenmek isteyenler için Claude API Python chatbot rehberimiz aynı yapıyı Anthropic SDK üzerinden ele alıyor.
Kod örneklerinin tamamı çalışır durumda; doğrudan kopyalayıp kendi projenize uyarlayabilirsiniz. İlk işe yarayan çağrıyı yaptıktan sonra gerisini ihtiyacınıza göre katmanlayabilirsiniz.



