AI Agents

Aralığı Kapatmak: AI Ajanlarında Etkili Fonksiyon Çağırma İçin Geliştirici Rehberi

Büyük Dil Modelleri (LLM'ler), statik metin üreticilerinden karmaşık görevleri yerine getirebilen dinamik motorlara evrildi. Ancak, sağlam AI ajanları oluşturmadaki gerçek güçleri, Fonksiyon Çağırma (Araç Kullanımı veya Eylem Çağırma olarak da bilinir) adı verilen bir mekanizma aracılığıyla ortaya çıkar. Bu özellik, modellerin dış dünyayla etkileşime girmesini sağlayarak onları pasif yanıtlayıcılardan aktif problem çözümlerine dönüştürür.

Fonksiyon Çağırma Nedir?

Temelinde fonksiyon çağırma, LLM ile uygulamanızın arka uç mantığı arasında yapılandırılmış bir arayüzdür. Modeli cevapları uydurmaya zorlamak veya yapılandırılmamış metni ayrıştırmak yerine, mevcut fonksiyonları tanımlayan bir şema modeline sağlarsınız. Model ardından hangi fonksiyonu çağırması gerektiğine karar verir ve gerekli argümanları kullanıcının isteminden çıkarır.

Örneğin, bir kullanıcı "London'da hava durumu nasıl?" diye sorduğunda, model gerçek zamanlı veriye sahip olmadığını anlayabilir. Tahmin yapmak yerine, bir get_weather fonksiyonunu çağırmak için yapılandırılmış bir istek oluşturabilir. Uygulamanız bu fonksiyonu çalıştırır, gerçek zamanlı JSON yanıtını alır ve doğal dil özetlemesi için modeli bu yanıtla besler.

Şemanın Tanımlanması

Etkili bir fonksiyon çağırmanın temeli, hassas bir JSON şema tanımına dayanır. Bu şema, modelin gerekli girdileri ve çıktı türlerini anlamasını sağlayan bir sözleşme görevi görür. Burada hassasiyet kritiktir; belirsiz şemalar başarısız çağrılara veya hatalı argüman çıkarılmasına yol açar.

Basit bir para birimi dönüştürücü için bir şema örneği:

{
  "name": "convert_currency",
  "description": "Bir miktarı bir para biriminden diğerine dönüştürür.",
  "parameters": {
    "type": "object",
    "properties": {
      "amount": {
        "type": "number",
        "description": "Dönüştürülecek sayısal değer."
      },
      "from_currency": {
        "type": "string",
        "description": "Kaynak para birimi kodu (örn. USD, EUR)."
      },
      "to_currency": {
        "type": "string",
        "description": "Hedef para birimi kodu."
      }
    },
    "required": ["amount", "from_currency", "to_currency"]
  }
}

Sohbet Döngüsü

Fonksiyon çağırma uygulaması, belirli bir sohbet akışı gerektirir. Kullanıcı istemini gönderip tek bir adımda nihai bir cevap bekleyemezsiniz. Süç genellikle üç ayrı aşamadan oluşur:

  1. Başlangıç İsteği: Kullanıcı bir istem gönderir. LLM bunu analiz eder ve bir fonksiyon çağrılması gerekip gerekmediğine karar verir. Gerekirse, fonksiyon adını ve argümanlarını belirten yapılandırılmış bir yanıt döndürür.
  2. Yürütme: Arka uç kodunuz fonksiyon çağrısını algılar, gerçek mantığı (örn. veritabanı sorgulama veya harici API çağrısı) çalıştırır ve sonucu yakalar.
  3. Bağlam Besleme: Fonksiyon yürütme sonucunu, sohbet geçmişine bir "araç çıktısı" mesajı olarak eklersiniz ve LLM'ye gönderirsiniz.

Bu döngüyü gösteren kavramsal bir kod parçacığı (sahte bir kütüphane yapısı kullanarak):

def handle_llm_interaction(user_prompt, history):
    # Adım 1: Fonksiyon tanımlarıyla birlikte istemi LLM'ye gönder
    response = llm.chat(messages=history, functions=weather_functions)
    
    if response.has_function_calls():
        for call in response.function_calls:
            # Adım 2: Fonksiyonu arka uçta çalıştır
            result = execute_function(call.name, call.arguments)
            
            # Adım 3: Fonksiyon sonucunu geçmişe ekle
            history.append({
                "role": "function",
                "name": call.name,
                "content": str(result)
            })
        
        # Adım 4: Nihai cevap için güncellenmiş geçmişi LLM'ye geri gönder
        final_response = llm.chat(messages=history)
        return final_response.text
    
    return response.text

Üretim İçin En İyi Uygulamalar

Fonksiyon çağırma, ajan geliştirme sürecini basitleştirse de yeni karmaşıklıklar getirir. İlk olarak, hataları her zaman zarifçe (gracefully) yönetin. Bir fonksiyon, ağ sorunları veya geçersiz veriler nedeniyle başarısız olursa, LLM'nin kullanıcıya uygun şekilde bilgi verebilmesi için "content" alanında bir hata mesajı döndürün. İkinci olarak, çok fazla fonksiyon açığa çıkarmaktan kaçının. Her ek araç, modelin bilişsel yükünü artırarak daha yavaş yanıt sürelerine veya "dikkat dağılmasına" neden olabilir. Son olarak, argümanları sunucu tarafında doğrulayın. LLM'nin çıkarımına körü körüne güvenmeyin; veri türlerinin şemanızla sıkı bir şekilde eşleştiğinden emin olun.

Sonuç

Fonksiyon çağırma, LLM ağırlıklarında gömülü olan statik bilgi ile API'ler aracılığıyla erişilebilen dinamik, gerçek dünya verileri arasındaki köprüdür. Bu deseni ustalaşarak geliştiriciler, niyeti sadece anlamakla kalmayıp, üzerine de hareket edebilen ajanlar oluşturabilir. Ekosistem olgunlaştıkça, LangChain ve LlamaIndex gibi araçlar, mühendislerin gerçek kullanıcı sorunlarını çözen zeki ve güvenilir iş akışları tasarlamasına odaklanmalarını sağlayarak, tekrarlayan kod (boilerplate) kısımlarının çoğunu soyutlamaya devam edecektir.

Share: