Modül 5 · Tool Use with Claude · ⏱ 9 dakika

Tool sonuçlarını göndermek

Sending tool results

Orijinal İngilizce video — Anthropic Academy / JWPlayer. Aşağıdaki Türkçe metin dersi birebir özetler.

Bu modül için tahmini süre: 9 dakika

Genel bakış

Claude bir tool çağrısı talep ettikten sonra, fonksiyonu çalıştırıp sonuçları geri göndermeniz gerekir. Bu, talep edilen bilgiyi Claude’a sağlayarak tool use workflow’unu tamamlar. Bu derste tool sonuçlarının nasıl iletildiğini, tool_result block’unun yapısını ve birden fazla paralel tool çağrısının nasıl yönetildiğini göreceksiniz.

Tool function’ı çalıştırmak

Claude bir tool use block ile yanıt verdiğinde, input parametrelerini çıkarıp fonksiyonunuzu çağırırsınız. Tool parametrelerine şöyle erişirsiniz:

response.content[1].input

Bu size Claude’un fonksiyonunuza geçirmek istediği argümanların bir dictionary’sini verir. Fonksiyonunuz dictionary yerine keyword argument’lar beklediğinden Python’un unpacking syntax’ını kullanırsınız:

get_current_datetime(**response.content[1].input)

Tool result block

Tool function’ı çalıştırdıktan sonra sonuçları bir tool result block kullanarak Claude’a geri göndermeniz gerekir. Bu block bir user message içine yerleşir ve tool’u çalıştırdığınızda ne olduğunu Claude’a söyler.

Tool result block’un birkaç önemli property’si vardır:

  • tool_use_id — Bu ToolResult’un karşılık geldiği ToolUse block’unun id’siyle eşleşmeli
  • content — Tool’unuzu çalıştırmaktan elde edilen çıktı, string olarak serialize edilmiş
  • is_error — Bir hata oluştuysa True

Birden çok tool çağrısını yönetmek

Claude tek bir yanıtta birden çok tool çağrısı talep edebilir. Örneğin kullanıcı “What’s 10 + 10 and what’s 30 + 30?” diye sorarsa Claude iki ayrı ToolUse block ile yanıt verebilir.

Her tool çağrısı benzersiz bir ID alır ve sonuçları geri gönderirken bu ID’leri eşleştirmelisiniz. Bu, sonuçlar farklı sırada gelse bile Claude’un hangi sonucun hangi isteğe karşılık geldiğini bilmesini sağlar.

Follow-up isteğini inşa etmek

Claude’a göndereceğiniz follow-up isteği, tam conversation history’i ve yeni tool result’u içermelidir. Yapı şudur:

messages.append({
    "role": "user",
    "content": [{
        "type": "tool_result",
        "tool_use_id": response.content[1].id,
        "content": "15:04:22",
        "is_error": False
    }]
})

Tam message history artık şunları içerir:

  • Orijinal user message
  • Tool use block içeren assistant message
  • Tool result block içeren user message

Final isteği yapmak

Follow-up isteğini gönderirken, Claude’dan başka bir tool çağrısı beklemiyor olsanız bile tool schema’sını dahil etmelisiniz. Claude, conversation history’deki tool referanslarını anlamak için schema’ya ihtiyaç duyar.

client.messages.create(
    model=model,
    max_tokens=1000,
    messages=messages,
    tools=[get_current_datetime_schema]
)

Claude bunun ardından tool sonuçlarını kullanıcı için doğal bir yanıta dönüştüren final bir message ile yanıt verecektir. Tool use workflow’u artık tamamlandı — custom fonksiyonunuz aracılığıyla Claude’a real-time bilgiye erişim sağlamayı başardınız.

Temel çıkarımlar

  • Tool çıktısını Claude’a geri vermek için tool_result tipinde block bir user message içine konur
  • tool_use_id ile orijinal ToolUse block’unun id’si birebir eşleşmelidir
  • **response.content[1].input kalıbı dictionary’i keyword argument’lara açar
  • Paralel tool çağrılarında her sonuç doğru tool_use_id ile eşleştirilerek aynı user message içinde gönderilebilir
  • Follow-up çağrısında tools schema listesi yine geçirilmelidir; Claude history’deki referansları çözümler
  • is_error: True ile hata bildirilince Claude düzeltilmiş bir tool çağrısını deneyebilir