Kılavuzlara dön
Sorun giderme·23 Eylül 2026·6 dk okuma

“This model does not support assistant message prefill” — hangi Claude modelleri prefill özelliğini kaldırdı ve bunun yerine ne kullanılır

messages diziniz bir assistant dönüşüyle bitiyor ve Claude 4.6 ile sonraki modeller bunu prefill olarak okuyup reddediyor. Konuşmayı bir user mesajıyla bitirin; ardından prefill'in yaptığı işi — JSON'u zorlamak, başlangıç metnini atlamak, persona'yı korumak veya yarıda kesilmiş bir yanıtı sürdürmek — Anthropic'in bunun için belgelediği alternatif yönteme taşıyın.

Son inceleme tarihi: .

messages diziniz bir assistant dönüşüyle bitiyor ve Claude 4.6 ile sonraki modeller bunu prefill olarak okuyup reddediyor. Konuşmayı bir user mesajıyla bitirin; ardından prefill'in yaptığı işi — JSON'u zorlamak, başlangıç metnini atlamak, persona'yı korumak veya yarıda kesilmiş bir yanıtı sürdürmek — Anthropic'in bunun için belgelediği alternatif yönteme taşıyın.

Hata

Anthropic API yanıtı (HTTP 400)
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "This model does not support assistant message prefill. The conversation must end with a user message."
  },
  "request_id": "req_..."
}

Nedenler ve çözümler özeti

NedenÇözüm
messages içindeki son girdinin role değeri: "assistant"Bu bir prefill'dir ve Claude 4.6 ile sonraki modeller bunu reddeder. User mesajıyla bitirin.
Bir framework son sırada boş bir assistant mesajı bıraktıGöndermeden önce içeriği olmayan son assistant mesajını kaldırın.
JSON'u zorlamak için “{” ile prefill yaptınızBunun yerine yapılandırılmış çıktıları (output_config.format) kullanın.
Başlangıç metnini atlamak, persona'yı korumak veya yarıda kesilmiş bir yanıtı sürdürmek için prefill yaptınızBir system-prompt talimatı, system prompt içindeki bir rol veya bir user dönüşü devamı kullanın.
Bir bellek yöneticisi, agent döngüsü veya devir mekanizması son sırada bir assistant dönüşü bıraktıHer kod yolunda yapmak yerine, isteğin hemen öncesinde kuyruğu bir kez normalleştirin.

Hangi Claude modelleri prefill'i reddediyor (Eylül 2026 itibarıyla)

Anthropic'in hata referansı açıkça belirtir: Claude 4.6 ve sonraki modeller son assistant mesajının prefill edilmesini desteklemez ve bunu yapan bir istek tam olarak bu 400 hatasını alır (https://platform.claude.com/docs/en/api/errors#prefill-not-supported). Adlarıyla bunlar Claude Opus 4.6 ve sonraki tüm Opus modelleridir; buna Claude Opus 5.5 de dahildir (https://platform.claude.com/docs/en/models/opus-5-5/migration-guide); Claude Sonnet 4.6 ve Claude Sonnet 5 (https://platform.claude.com/docs/en/models/sonnet-5/migration-guide); ayrıca Claude Fable 5 ve Fable 5.1 (https://platform.claude.com/docs/en/models/fable-5-1/migration-guide). Claude Haiku 4.5 hâlâ prefill'i kabul eder; Claude Sonnet 4.5 ve Claude Opus 4.5 de öyle — bu nedenle hata genellikle kod değişikliğinden ziyade model-ID değişikliğiyle ortaya çıkar. Konuşmanın önceki assistant mesajları, few-shot örnekleri dahil, etkilenmez.

Bir user dönüşüyle bitirin — tek satırlık düzeltme dahil

Çoğu zaman hiç kimse bilerek prefill yazmamıştır: yığındaki bir şey son sıraya assistant mesajı koymuştur. Herkese açık raporlar bunu, bir tane ekleyen bir bellek yöneticisine (Strands issue #1694), yanlışlıkla tamamlanmamış sandığı bir dönüşten sonra yeniden istek yapan bir agent döngüsüne (opencode issue #46415), art arda yanıtlara ve agent devirlerine (LiveKit issue #4907) ve sonda bırakılmış boş bir assistant mesajına (AutoGen PR #7931) bağlar. Sondaki mesaj boşsa kaldırın — düzeltme tek satırdır. Devam ettirmek istediğiniz metni içeriyorsa Anthropic'in devamlar için geçiş kılavuzunda söylediğini uygulayın: yanıtın nerede durduğunu alıntılayan bir user mesajına devamı koyun. Değiştirmeden bırakılması gereken belgelenmiş bir istisna vardır: web araması gibi sunucu araçlarından gelen pause_turn, duraklatılmış assistant içeriğinin olduğu gibi yeniden gönderilmesiyle sürdürülür (https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools).

end_on_user.py
from openai import OpenAI

client = OpenAI(base_url="https://api.kunavo.com/v1", api_key="sk-kn-...")

def end_on_user(messages: list[dict]) -> list[dict]:
    """Claude 4.6 and later reject a conversation whose last turn is the assistant's."""
    last = messages[-1] if messages else None
    if not last or last["role"] != "assistant" or last.get("tool_calls"):
        return messages               # tool_calls are owed tool results instead
    content = last.get("content")
    if not content or (isinstance(content, str) and not content.strip()):
        return messages[:-1]          # the one line: drop an empty tail
    tail = content[-200:] if isinstance(content, str) else "..."
    return messages + [{
        "role": "user",
        "content": f"Your previous response was interrupted and ended with {tail!r}. "
                   "Continue from where you left off.",
    }]

messages = [
    {"role": "user", "content": "Explain HTTP caching in three bullets."},
    {"role": "assistant", "content": ""},  # the empty tail a framework left behind
]

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=end_on_user(messages),
)
print(resp.choices[0].message.content)

Prefill'in yaptığı şeyin yerine ne kullanılır

Anthropic'in istem kılavuzu, prefill'in her eski kullanımını bir alternatifle eşleştirir (https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices#migrating-away-from-prefilled-responses). JSON'u zorunlu kılma: yanıtı şemanızla sınırlandıran ve Claude Haiku 4.5, Sonnet 4.5, Opus 4.5 ile bunlardan sonraki tüm modellerde kullanılabilen yapılandırılmış çıktılar (https://platform.claude.com/docs/en/build-with-claude/structured-outputs); YAML veya başka bir format için kılavuzun önerisi, yapıyı istemek ve eksik olduğunda yeniden denemektir. Sınıflandırma: geçerli etiketlerinizden oluşan bir enum'a sahip araç veya yapılandırılmış çıktılar. Önsözü atlama: “Önsöz olmadan doğrudan yanıt ver.” gibi bir sistem istemi talimatı. Persona'yı koruma: rolü sistem isteminde ayarlayın (https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices#give-claude-a-role) ve önceden doldurulmuş bir assistant mesajı yerine kullanıcı dönüşüne periyodik hatırlatıcılar ekleyin. Yarım kalan yanıt: yukarıdaki kullanıcı dönüşüyle devam etme. Araç çağrısını zorlamak her yerde doğrudan kullanılabilir bir alternatif değildir — Claude Fable 5.1 ve Claude Opus 5.5, tool_choice any ve tool kullanımını kendi 400 hatalarıyla reddeder (https://platform.claude.com/docs/en/api/errors#forced-tool-use-not-supported).

structured-output.sh
# Before: messages ended with {"role": "assistant", "content": "{"}
# Kunavo forwards output_config as sent; the reply is constrained to the schema.
curl https://api.kunavo.com/v1/messages \
  -H "x-api-key: sk-kn-..." \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "Extract the name and email: John Smith <john@example.com>"}
    ],
    "output_config": {
      "format": {
        "type": "json_schema",
        "schema": {
          "type": "object",
          "properties": {
            "name": {"type": "string"},
            "email": {"type": "string"}
          },
          "required": ["name", "email"],
          "additionalProperties": false
        }
      }
    }
  }'

Kunavo üzerinden çağrı yapıyorsanız

Kunavo sondaki asistan turunu iletir; onu düzeltmez. /v1/messages, messages dizinizi üst akışa değiştirmeden gönderir; /v1/chat/completions üzerinde çevirici, son role: "assistant" mesajını Claude isteğinde son asistan turu olarak taşır — boş olan da buna dahildir; bu nedenle boş mesajları kendiniz kaldırın. Anthropic, sunduğumuz claude-* modellerinin tümünde, claude-haiku-4-5 hariç, önceden doldurulmuş son turu reddeder ve bu 400 hatası mesaj metni değiştirilmeden, ardından üst akışın istek kimliğiyle size ulaşır: /v1/messages üzerinde Anthropic biçiminde, Anthropic API'sindeki gibi invalid_request_error türünde (24 Eylül 2026'ya kadar api_error olarak görünüyordu) ve /v1/chat/completions üzerinde OpenAI biçiminde (type upstream_error, code upstream_400). 400 hatası başka bir kanalda asla yeniden denenmez ve başarısız çağrı sıfır maliyetle kaydedilir. JSON için ön doldurma yerine şema gönderin: /v1/messages, output_config alanını gönderdiğiniz şekilde iletir; /v1/chat/completions üzerinde json_schema türündeki bir response_format, output_config.format'a çevrilir. 2026-09-24 tarihinde bu alan, sunduğumuz her claude-* modelinde yanıtı şemayla sınırlandırıyordu. json_object türündeki response_format'ın Claude karşılığı yoktur ve uygulanmaz; ayrıca bir şemanın önceden doldurulmuş son turla birlikte gönderilmesi, claude-haiku-4-5 dahil, başlı başına 400 hatasına yol açar: "When using output format, pre-filling the `assistant` response is not supported." Anthropic'e özgü uç nokta ve ilettiği istek biçimi şu belgede açıklanmıştır: Messages API belgeleri.

Sık sorulan sorular

Hangi Claude modelleri assistant mesajı prefill'ini desteklemiyor?

Eylül 2026 itibarıyla Anthropic belgelerine göre 4.6'dan sonraki tüm Claude modelleri: Claude Opus 4.6 ve sonraki tüm Opus modelleri, Claude Sonnet 4.6 ve Sonnet 5, Claude Fable 5 ve 5.1 ile Mythos modelleri. Claude Haiku 4.5, Sonnet 4.5 ve Opus 4.5 hâlâ bir tane kabul eder.

Claude'dan prefill olmadan JSON çıktısını nasıl zorunlu kılarım?

Yapılandırılmış çıktıları kullanın: output_config.format içine bir JSON şeması geçin; yanıt bu şemayla sınırlandırılır. OpenAI uyumlu bir uç nokta üzerinden bunu type json_schema ile response_format olarak gönderin; Kunavo bunu output_config.format'a çevirir. Anthropic, mesaj önceden doldurmayı her durumda JSON çıktılarıyla uyumsuz olarak listeler.

Hiç prefill yapmadığım hâlde neden bu hatayı alıyorum?

Yığınınızdaki bir şey son sıraya bir assistant mesajı bırakmış olabilir — bellek veya oturum yöneticisi, bir dönüşten sonra yeniden istek gönderen bir agent döngüsü, bir agent aktarımı ya da kimsenin kaldırmadığı boş bir assistant mesajı. messages dizisini gönderildiği hâliyle aynen kaydedin; son öğenin role: "assistant" olduğunu göreceksiniz.

Konuşmaya assistant mesajlarını yine de ekleyebilir miyim?

Evet. Yalnızca son dönüş kısıtlanır; birkaç örnekli örnekler de dahil olmak üzere önceki assistant mesajları etkilenmez.

OpenAI uyumlu bir uç nokta üzerinden de neden gerçekleşiyor?

Çünkü ağ geçidi, son role: "assistant" mesajınızı son Claude assistant dönüşü olarak taşır — yeniden biçimlendirilmiş aynı prefill. Kunavo'nun chat çeviricisi tam olarak bunu yapar ve aynı mesajın diğer OpenAI uyumlu ağ geçitleri üzerinden de iletildiği bildirilmiştir (opencode issue #13768). Çözüm aynıdır: son mesaj bir user mesajı olsun.

İlgili kılavuzlar

Hata anlamlarına ilişkin daha fazla bilgi hata referansı bölümünde; anahtar almak kayıt ve kimlik doğrulama kılavuzu üzerinden bir dakika sürer.