DeepSeek, 12 Ağustos 2026'da V4 Pro'yu ön izlemeden çıkardı ve lansman haberleri ajans iş akışlarına odaklanıyor: kodlama, araç kullanımı ve onlarca adımı sorunsuz bir şekilde birbirine bağlayan uzun süreli görevler. Bu konumlandırma, bir API özelliğini diğerlerinden daha önemli hale getiriyor, o da fonksiyon çağırma, ve lansman haftası rehberlerinin henüz değinmediği tek özellik de bu. Şimdiye kadarki her eğitim sohbet tamamlamalarında kalıyor.
Bu rehber daha da ileri gidiyor: bir araç şeması tanımlayın, ilk araç çağrınızı standart Python openai SDK ile yapın, tam aracı döngüsünü oluşturun, ardından aracınız yayına girmeden önce her şeyi Apidog'da test edin. Henüz bir DeepSeek API anahtarınız yoksa, DeepSeek V4 API'yi nasıl kullanacağınıza dair rehberimizle bir tane kurun, sonra geri gelin.
Özetle
deepseek-v4-pro(GA yapısı DeepSeek-V4-Pro-0813) OpenAI tarzı fonksiyon çağırmayı destekler: birtoolsdizisi gönderin,tool_callsalın, sonuçlarıtoolmesajları olarak döndürün. StandartopenaiSDK,https://api.deepseek.comadresine karşı çalışır.- Tam aracı döngüsü yaklaşık 30 satır Python kodundan oluşur: model araç istemeyi bırakana kadar çağırın, yürütün, ekleyin, tekrarlayın. Paralel çağrılar ve yapılandırılmış çıktılar desteklenir; düşünme modu
reasoning_contentekler. - Otomatik ön ek önbellekleme, önbellek isabeti girdi fiyatını milyon jeton başına 0.003625 dolar olarak belirler, bu da isabet kaçırmadan 120 kat daha ucuzdur. Derin aracı döngülerini uygun maliyetli yapan budur.
- Araç çağırma kalitesi, donanımınıza ve şemalarınıza göre değişir. Gerçek araçlarınızı canlı modele karşı test edin, karşılaştırma testlerine değil.
Neden araç çağırma V4 Pro'nun ana kullanım senaryosu?
DeepSeek, V4 Pro'yu aracılar için geliştirdi ve teknik özellikler sayfası bir aracı-çalışma zamanı kontrol listesi gibi okunuyor:
| Özellik | DeepSeek V4 Pro |
|---|---|
| Mimari | Seyrek MoE: Toplam 1.6T parametre, jeton başına aktif 49B |
| Bağlam penceresi | 1M jeton |
| Maksimum çıktı | 384K jeton |
| Girdi fiyatı | $0.435/M jeton (önbellek kaçırma), $0.003625/M (önbellek isabeti) |
| Çıktı fiyatı | $0.87/M jeton |
| Fonksiyon çağırma | OpenAI uyumlu tools dizisi ve tool_calls yanıtları |
| Diğer arayüzler | Anthropic Mesajlar formatı, DeepSeek Yanıtlar API'si |
Her satır bir aracı problemine karşılık gelir: 1M jetonluk pencere, uzun bir aracının tüm araç-sonuç geçmişini taşır, 384K çıktı tavanı büyük yapılandırılmış yükler için yer bırakır ve ön ek önbellekleme döngü ekonomisini çalışır hale getirir. Model, sağlayıcı karşılaştırmaları için OpenRouter'da deepseek-v4-pro-0813 olarak listelenmiştir.
Koda geçmeden önce bir uyarı. Hacker News lansman tartışmasında, geliştiriciler araç çağırma performansının donanıma karşı oldukça hassas olduğunu bildirdiler: aynı model, çerçeveye, istem iskelesine ve şema stiline bağlı olarak daha iyi veya daha kötü performans gösterdi. Karşılaştırma testleri, sizin araç şemalarınızı nasıl ele aldığını söylemeyecektir. Gerçek tanımlarınızla test edin.
DeepSeek fonksiyon çağırma nasıl çalışır
Fonksiyon çağırma, modelin herhangi bir şey yürütmesi anlamına gelmez. Düzyazı yerine, “`get_order`'ı `{"order_id": "ORD-10442"}` ile çağır” şeklinde yapılandırılmış bir istek ile yanıt verir. Kodunuz fonksiyonu çalıştırır, sonucu döndürür ve model gerçek verilerle devam eder. Döngü şöyledir:
messages'ı ve JSON Şeması'ndaki her fonksiyonu açıklayan birtoolsdizisi gönderirsiniz.- Model bir araca ihtiyaç olduğuna karar verir ve
tool_callsilefinish_reason: "tool_calls"ile yanıt verir. - Kodunuz argümanları ayrıştırır ve asıl fonksiyonu çalıştırır.
- Sonucu, çağrının kimliğine bağlı bir
role: "tool"mesajı olarak eklersiniz. - Model ya başka bir araç ister ya da nihai yanıtını üretir.
OpenAI fonksiyon çağırma ile çalıştıysanız, bu aynı iletişim protokolüdür; çoğu aracı kodu, temel URL ve model adını değiştirerek taşınır. Resmi DeepSeek belgeleri ayrıca Anthropic uyumlu bir Mesajlar uç noktasını ve bir Yanıtlar API'sini kapsar, ancak bu rehber OpenAI uyumlu yüzeye bağlı kalır.
Adım 1: İstemciyi kurun
SDK'yı kurun ve DeepSeek'e yönlendirin:
pip install openai
export DEEPSEEK_API_KEY="sk-..."
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com",
)
Kurulum bu kadar. Her örnek, GA yapısı DeepSeek-V4-Pro-0813'e çözünen model="deepseek-v4-pro" kullanır.
Adım 2: Bir araç şeması tanımlayın
Bir çevrimiçi mağaza için bir destek aracısı oluşturacağız. İlk aracı, siparişleri arar. Bir araç tanımının üç bölümü vardır: bir ad, bir açıklama ve parametreler için bir JSON Şeması.
tools = [
{
"type": "function",
"function": {
"name": "get_order",
"description": (
"Bir müşteri siparişini kimliğine göre arar. Sipariş durumunu, "
"taşıyıcıyı, takip numarasını ve tahmini teslimat tarihini döndürür. "
"Kullanıcı bir siparişin nerede olduğunu veya ne durumda olduğunu sorduğunda bunu kullanın."
),
"parameters": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "Sipariş kimliği, 'ORD-10442' gibi biçimlendirilmiş.",
}
},
"required": ["order_id"],
},
},
}
]
Açıklama bir süsleme değildir: model, onu okuyarak bir aracı ne zaman çağıracağına karar verir. Belirsiz açıklamalar, bir modelin bir aracı göz ardı etmesinin veya yanlış olanı seçmesinin başlıca nedenidir.
Şemanın tanımladığı yerel fonksiyon, gerçek bir sipariş hizmeti için yer tutucu olarak:
def get_order(order_id: str) -> dict:
"""Gerçek sipariş hizmetiniz için yer tutucu."""
fake_db = {
"ORD-10442": {
"status": "shipped",
"carrier": "DHL",
"tracking_number": "4281337005",
"estimated_delivery": "2026-08-15",
},
"ORD-10587": {
"status": "processing",
"estimated_ship_date": "2026-08-14",
},
}
return fake_db.get(order_id, {"error": f"Bilinmeyen sipariş kimliği: {order_id}"})
Adım 3: İlk araç çağrınızı yapın
Modelin araç olmadan yanıtlayamayacağı bir soru gönderin:
messages = [
{"role": "system", "content": "Sen bir çevrimiçi mağaza için destek aracısısın."},
{"role": "user", "content": "ORD-10442 siparişim nerede?"},
]
response = client.chat.completions.create(
model="deepseek-v4-pro",
messages=messages,
tools=tools,
)
message = response.choices[0].message
print(message.tool_calls[0].function.name) # get_order
print(message.tool_calls[0].function.arguments) # {"order_id": "ORD-10442"}
Model, yanıtlamak yerine get_order'ı çalıştırmanızı ister. Ham yanıt yükü şöyle görünür:
{
"id": "chatcmpl-8f3a1c",
"object": "chat.completion",
"model": "deepseek-v4-pro",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "call_0_f1c29a44",
"type": "function",
"function": {
"name": "get_order",
"arguments": "{\"order_id\": \"ORD-10442\"}"
}
}
]
},
"finish_reason": "tool_calls"
}
],
"usage": {
"prompt_tokens": 312,
"completion_tokens": 24,
"total_tokens": 336,
"prompt_cache_hit_tokens": 0,
"prompt_cache_miss_tokens": 312
}
}
Üç önemli ayrıntı vardır. finish_reason, döngünüze modelin yürütme istediğini söyleyen "tool_calls"'tır. Her çağrı, sonucuyla birlikte geri yankılanması gereken bir id taşır. Ve arguments, kendi başınıza ayrıştırdığınız bir JSON *dizgisidir*, bu nedenle zaman zaman bozuk olmasını bekleyebilirsiniz.
Adım 4: Fonksiyonu yürütün ve sonucu döndürün
Fonksiyonu çalıştırın, ardından iki mesaj ekleyin: tool_calls içeren yardımcı dönüşü ve sonucunuzu taşıyan bir tool mesajı.
import json
tool_call = message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
result = get_order(args)
messages.append(message) # tool_calls içeren yardımcı dönüşü
messages.append({
"role": "tool",
"tool_call_id": tool_call.id, # yanıttaki id ile eşleşmelidir
"content": json.dumps(result),
})
final = client.chat.completions.create(
model="deepseek-v4-pro",
messages=messages,
tools=tools,
)
print(final.choices[0].message.content)
# ORD-10442 siparişiniz DHL ile gönderildi ve tahmini olarak
# 15 Ağustos 2026'ya kadar ulaşacaktır. Takip numarası: 4281337005.
tool_call_id bağlantısı katıdır: her tool_calls girişi, bir sonraki model dönüşünden önce eşleşen bir tool mesajına ihtiyaç duyar, aksi takdirde istek başarısız olur.
Adım 5: Tam aracı döngüsü
Gerçek aracılar çağrıları zincirler: bir sipariş arar, iade politikasını kontrol eder, bir e-posta taslağı hazırlar; her adım bir öncekine bağlıdır. Desen: model normal bir yanıt döndürene kadar onu çağırmaya ve istediği her şeyi yürütmeye devam edin.
TOOLS_BY_NAME = {"get_order": get_order}
def run_agent(client, messages, tools, max_rounds=10):
"""Model nihai bir yanıt üretene veya sınıra ulaşana kadar çalıştırın."""
for _ in range(max_rounds):
response = client.chat.completions.create(
model="deepseek-v4-pro",
messages=messages,
tools=tools,
)
message = response.choices[0].message
messages.append(message)
if not message.tool_calls: # araç isteği yok: işimiz bitti
return message.content
for tool_call in message.tool_calls:
fn = TOOLS_BY_NAME.get(tool_call.function.name)
try:
if fn is None:
raise ValueError(f"Bilinmeyen araç: {tool_call.function.name}")
args = json.loads(tool_call.function.arguments)
result = fn(args)
except Exception as exc:
result = {"error": str(exc)} # hataları modele geri besleyin
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result),
})
raise RuntimeError(f"Aracı {max_rounds} tur içinde bitmedi")
Çerçeveler ve aracı SDK'ları bu döngünün detaylandırılmasıdır. max_rounds sınırı, başarısız bir aracıyı tekrar çağırmaya takılı kalan bir modeli açık uçlu bir fatura yerine temiz bir arızaya dönüştürür.
Paralel araç çağrıları
“ORD-10442 ve ORD-10587'nin durumunu karşılaştırın” şeklinde iki arama isteyin ve V4 Pro genellikle ikisini tek bir dönüşte toplu olarak işler:
"tool_calls": [
{
"id": "call_0_a7d1",
"type": "function",
"function": { "name": "get_order", "arguments": "{\"order_id\": \"ORD-10442\"}" }
},
{
"id": "call_1_b3e9",
"type": "function",
"function": { "name": "get_order", "arguments": "{\"order_id\": \"ORD-10587\"}" }
}
]
run_agent döngüsü bunu zaten ele alır: iç for döngüsü her çağrıyı kendi tool_call_id'si ile yanıtlar (bir sonraki dönüşten önce her çağrının eşleşen bir sonuca ihtiyacı vardır) ve toplu işlemi eş zamanlı olarak yürütmekte özgürsünüz. Bu, modelin bir kum havuzunda orkestrasyon kodu yazdığı GPT-5.6'nın programatik araç çağırmasından farklı bir felsefedir; DeepSeek yürütmeyi ve güven sınırını çalışma zamanınızda tutar.
Düşünme modu artı araçlar
V4 Pro, üç düşünme moduyla birlikte gelir, böylece zorlu planlama dönüşleri için muhakeme çabasını artırabilir ve rutin aramalar için atlayabilirsiniz (mod adları ve varsayılanlar için resmi belgelere bakın). Düşünme etkinleştirildiğinde, API, herhangi bir araç çağrısının yanı sıra modelin izini reasoning_content olarak döndürür:
response = client.chat.completions.create(
model="deepseek-v4-pro",
messages=messages,
tools=tools,
extra_body={"thinking": {"type": "enabled"}},
)
message = response.choices[0].message
print(message.reasoning_content) # planlama izi
print(message.tool_calls) # karar verdiği çağrılar
İz, modelin neden bir araç seçtiğini gösterir, ki bu genellikle kötü bir şemanın kendini belli ettiği yerdir. Yardımcı dönüşü geçmişe eklemeden önce reasoning_content'i çıkarın ve düşünmeyi planlama yoğun dönüşler için saklayın; muhakeme çıktı olarak 0.87$/M üzerinden faturalandırılır.
Hata yönetimi: model bir çağrıyı yanlış yaptığında
Bozuk araç çağrıları nadirdir, ancak bir aracı döngüsü her hata modunu büyütür. Temel desen: kötü bir çağrıda asla çökme, sorunu araç sonucu olarak döndürme ve modelin tekrar denemesine izin verme. Bu, json.loads'u başarısız kılan argümanların yanı sıra iş kurallarınızı bozan değerleri de kapsar:
from jsonschema import ValidationError, validate
schema = tools[0]["function"]["parameters"]
try:
args = json.loads(tool_call.function.arguments)
validate(instance=args, schema=schema)
result = get_order(**args)
except (json.JSONDecodeError, ValidationError) as exc:
result = {
"error": f"Geçersiz argümanlar: {exc}",
"hint": "get_order'ı 'ORD-10442' gibi bir order_id dizesiyle tekrar çağırın.",
}
hint alanı önemlidir: tek satırlık bir düzeltme genellikle bir sonraki turda sabit bir yeniden deneme üretir. Aracı hatalarını güvenlik olayları olarak da ele alın. Saldırgan tarafından sağlanan argümanlarla delete_order'ı çağırmaya ikna edilen bir model, arkasındaki anahtar kadar tehlikelidir; bu durum yapay zeka aracıları için en az ayrıcalıklı API anahtarları için geçerlidir. Yanlış bir çağrının bir olaya dönüşmesini önlemek için kimlik bilgilerini kapsamlandırın.
Yayınlamadan önce Apidog ile araç çağrılarını test edin ve hata ayıklayın
Her araç, bir API etrafında ince bir sarmaldır ve model artık bu API'nin bir tüketicisidir. Destekleyici uç nokta belirsiz veya kararsız ise, model bunun tamamını miras alır. Apidog'un döngüdeki yerini kazandığı nokta burasıdır:
- Önce destekleyici API'yi tasarlayın. Apidog'un görsel tasarımcısında
GET /orders/{order_id}'yi bir özellik olarak tanımlayın; aracınızın JSON Şeması doğrudan özellikten çıkar, böylece ikisi sessizce birbirinden sapamaz. - Arka uç var olmadan önce onu taklit edin. Apidog'un akıllı taklit sunucusu, şemadan gerçekçi yanıtlar sunar, böylece gerçek hizmet hala inşa edilirken aracı döngüsü
get_order'a karşı çalışır. - Ham yükleri inceleyin. Aynı
messages+toolsgövdesini Apidog'danhttps://api.deepseek.comadresine gönderin ve hamtool_callsJSON'unu doğrudan okuyun; yanlış iç içe geçmiş birpropertiesveya çift kodlanmış argümanlar tek bir incelemede ortaya çıkar. - Konuşmaları test senaryolarına dönüştürün.
finish_reasonve argüman şekilleri üzerinde iddia (assert) oluşturun ve her şema değişikliğinde süiti çalıştırın; Hacker News'te bildirilen donanım hassasiyeti göz önüne alındığında, gerçek şemalarınız üzerinde bir regresyon süiti, üretimi tahmin eden ölçüttür. Daha derin bir desen için bir yapay zeka aracısını bir Apidog test donanımına bağlamaya bakın.
Takip etmek için Apidog'u ücretsiz indirin; taklit sunucusu ve test senaryoları ücretsiz katmana dahildir.
Aracı döngülerinin maliyeti nedir (ve neden önbellekleme belirler)?
Aracı döngüleri her turda tüm konuşmayı yeniden okur: onuncu turda, sistem isteminiz, araç şemalarınız ve dokuz tur sonucunuz onuncu kez faturalandırılır. V4 Pro'nun otomatik ön ek önbelleklemesi bu eğriyi kırar; her turun girdisi bir önceki turun girdisi artı biraz daha fazladır, böylece ön ekin neredeyse tamamı 0.435$/M yerine 0.003625$/M üzerinden faturalandırılır. 100K jetonluk bir konuşmayı yeniden okumak önbelleğe alınmamış olarak yaklaşık 0.0435$ tutarken, önbelleğe alınmış olarak yaklaşık 0.0004$ tutar; kullanım bloğundaki prompt_cache_hit_tokens gerçek isabet oranınızı gösterir.
Bu oranı yüksek tutmak için, önceki mesajları asla değiştirmeyin ve tools dizisini turlar arasında bayt sabit tutun. İstem önbelleklemesinin ne olduğu hakkındaki başlangıç kılavuzumuz mekanikleri kapsar. Ve 0.14$/0.28$ olan deepseek-v4-flash cazip görünüyorsa: tek atışlık araç yönlendirmesi için iyidir, ancak 10'dan fazla çağrıyı zincirleyen döngülerde geriler, bu nedenle yeniden denemeler tasarrufları yer, Pro aracılar için daha güvenli varsayılandır.
Sıkça Sorulan Sorular
Araç tanımları jeton maliyetine neden olur mu?
Evet, tools dizisi her istekte girdi olarak gönderilir. Sabit tutun ve ilk turdan sonra önbelleğe alınmış ön eke katılır, o zamandan itibaren önbellek isabet oranı üzerinden faturalandırılır.
Fonksiyon çağırmayı yapılandırılmış çıktılarla birleştirebilir miyim?
Evet. Yaygın bir desen: araçlar ara verileri alır, yapılandırılmış bir çıktı şeması nihai yanıtı biçimlendirir, böylece alt düzey kod asla düzyazıyı ayrıştırmaz.
Özet
DeepSeek V4 Pro'daki fonksiyon çağırma, uygulaması kasıtlı olarak heyecansızdır: OpenAI uyumlu şemalar, bir tool_calls dizisi, kimliği olan bir tool mesajı. Adım 5'teki döngü tüm mimaridir ve önbellek isabetli fiyatlandırma çoğu ekibin beklediğinden daha ucuz hale getirir. Karşılaştırma testlerinin size söyleyemeyeceği şey, modelin sizin şemalarınıza karşı nasıl davrandığıdır; destekleyici API'leri bilinçli olarak tasarlayın, erken taklit edin ve Apidog'da araç çağrısı senaryolarından oluşan bir regresyon süiti tutun, böylece şema değişiklikleri aracınızı sessizce bozamaz.
