Tool'larla multi-turn conversation'lar
Multi-turn conversations with tools
Bu modül için tahmini süre: 9 dakika
Genel bakış
Birden çok tool ile uygulamalar inşa ederken, Claude’un tek bir kullanıcı sorusunu yanıtlamak için birkaç tool’u sırayla çağırması gerekebilir. Örneğin bir kullanıcı “What day is 103 days from today?” diye sorarsa Claude önce güncel tarihi almalı, sonra ona 103 gün eklemelidir.

Bu, Claude’un final cevabı vermeden önce birden çok tool isteği yaptığı bir multi-turn conversation pattern’i yaratır. Uygulamanızın bunu otomatik olarak yönetmesi gerekir.
Multi-turn tool pattern’i
Claude’un birden çok tool’a ihtiyacı olduğunda perde arkasında olanlar:
- Kullanıcı sorar: “What day is 103 days from today?”
- Claude
get_current_datetimetalep eden bir tool use block ile yanıt verir - Server’ınız fonksiyonu çağırır ve sonucu döndürür
- Claude daha fazla bilgiye ihtiyacı olduğunu fark eder ve
add_duration_to_datetimetalep eder - Server’ınız o fonksiyonu çağırır ve sonucu döndürür
- Claude artık final cevap için yeterli bilgiye sahiptir

Bir conversation loop inşa etmek
Bu pattern’i yönetmek için, Claude tool talep etmeyi durdurana kadar devam eden bir conversation loop gereklidir:
def run_conversation(messages):
while True:
response = chat(messages)
add_assistant_message(messages, response)
# Pseudo code
if response isn't asking for a tool:
break
tool_result_blocks = run_tools(response)
add_user_message(messages, tool_result_blocks)
return messages

Helper function’ları refactor etmek
Conversation loop’u implement etmeden önce, helper function’larınızı birden çok message block’unu düzgün yönetecek şekilde güncellemeniz gerekir.
Message handler’larını güncellemek
add_user_message ve add_assistant_message fonksiyonlarınız şu anda her zaman plain text ile çalıştığınızı varsayıyor. Bunları tam message object’leri yönetecek şekilde güncelleyin:
from anthropic.types import Message
def add_user_message(messages, message):
user_message = {
"role": "user",
"content": message.content if isinstance(message, Message) else message
}
messages.append(user_message)
Bu, bir string, block listesi veya tam bir message object geçirebilmenizi sağlar.
Chat fonksiyonunu güncellemek
Chat fonksiyonunuzu bir tools listesi kabul edecek ve sadece text yerine tam message döndürecek şekilde değiştirin:
def chat(messages, system=None, temperature=1.0, stop_sequences=[], tools=None):
params = {
"model": model,
"max_tokens": 1000,
"messages": messages,
"temperature": temperature,
"stop_sequences": stop_sequences,
}
if tools:
params["tools"] = tools
if system:
params["system"] = system
message = client.messages.create(**params)
return message
Message’lardan text çıkarmak
Artık tam message object döndürdüğünüz için, gerektiğinde text çıkarmak için bir helper oluşturun:
def text_from_message(message):
return "\n".join(
[block.text for block in message.content if block.type == "text"]
)
Bu fonksiyon bir message’daki tüm text block’ları bulup birleştirir; final yanıtı kullanıcılara göstermeniz gerektiğinde kullanışlıdır.
Temel iyileştirmeler
Bu refactoring adımları kodunuzu sağlam tool yönetimi için hazırlar:
- Esnek message handling — Helper function’larınız artık farklı message format’larıyla çalışabilir
- Chat’te tool desteği — Chat fonksiyonu tool schema’ları alıp geçirebilir
- Tam message dönüşleri — Sadece text yerine tam message object’leri alırsınız, tüm block’lar korunur
- Text extraction utility — Karmaşık message’lardan okunabilir text almanın kolay yolu
Bu temeller hazır olduğunda, birden çok tool çağrısını otomatik yöneten conversation loop’u implement etmeye hazırsınız; Claude’un kullanıcı sorularını yanıtlamak için gerektiği kadar tool’u kullanabildiği sorunsuz bir deneyim yaratırsınız.
Temel çıkarımlar
- Claude tek bir kullanıcı sorusu için birden çok tool çağrısı zincirleyebilir; uygulama bunu otomatik handle etmeli
- Çekirdek desen:
whiledöngüsü → chat → eğer tool_use yoksa çık → yoksa tool’u çalıştır, sonucu user message olarak ekle add_user_message/add_assistant_messageartık string, block listesi veya tam Message object kabul etmelichatfonksiyonutoolsparametresini destekleyecek ve text yerine tam Message object döndürecektext_from_messagehelper’ı message’ın text block’larını birleştirerek kullanıcıya gösterilecek metni çıkarır- Bu refactor, sonraki derste yazılacak loop’un tek satırlık koşullarla çalışmasını mümkün kılar