Prompt Engineering

Metinden Öte: LLM Uygulamalarında Fonksiyon Çağrılarını Ustalaşmak

Büyük Dil Modelleri (LLM'ler) verilerle etkileşim şeklimizi devrim niteliğinde değiştirdi, ancak statik doğaları önemli bir darboğaz oluşturuyor. Bir LLM hava durumu hakkında ikna edici metinler üretebilir, ancak mevcut sıcaklığı aslında kontrol edemez. Üretken yetenek ile gerçek dünya eylemi arasındaki bu boşluk fonksiyon çağrılarını (function calling) ile kapatılır. Bu teknik, LLM'lerin dış araçlarla, API'lerle ve veritabanlarıyla etkileşime girmesini sağlayarak onları pasif metin üreticilerinden, uygulama ekosisteminizde görevler gerçekleştirebilen aktif ajanlara dönüştürür.

Fonksiyon Çağrısı Döngüsünü Anlama

Fonksiyon çağrısı, modelin kodu doğrudan çalıştırdığı sihirli bir hile değildir. Bunun yerine, yapılandırılmış bir iletişim protokolüdür. Süreç genellikle kapalı döngülü bir etkileşimi izler:

  1. Araç Tanımı: LLM'e mevcut fonksiyonları, adlarını, açıklamalarını ve parametrelerini tanımlayan bir şema (genellikle JSON) sağlarsınız.
  2. Kullanıcı Sorgusu: Kullanıcı bir soru sorar veya bir komut verir.
  3. Model Kararı: LLM isteği analiz eder ve bir fonksiyonun gerekli olup olmadığını belirler. Hangi fonksiyonun çağrılacağını ve hangi argümanların kullanılacağını belirten yapılandırılmış bir çıktı döndürür.
  4. Çalıştırma: Uygulama kodunuz bu yapılandırılmış çıktıyı alır, ayrıştırır ve fonksiyonu fiilen çalıştırır (ör. bir HTTP isteği yapar).
  5. Yanıt Tamamlama: Fonksiyon çalıştırmasının sonucu LLM'e geri gönderilir; LLM de ardından kullanıcı için nihai doğal dil yanıtını sentezler.

Araçları Tanımlama: Şemaların Sanatı

Fonksiyon çağrılarının kalitesi, büyük ölçüde araç tanımlarınızın kalitesine bağlıdır. LLM, araçları ne zaman ve nasıl kullanacağına karar vermek için açıklamaları kullanır. Belirsiz açıklamalar, halüsinasyonlara veya hatalı parametre kullanımına yol açar.

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "Get the current weather in a given location",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city and state, e.g. San Francisco, CA"
                    },
                    "unit": {
                        "type": "string",
                        "enum": ["celsius", "fahrenheit"],
                        "description": "The temperature unit to use. Infer this from the user's location."
                    }
                },
                "required": ["location"]
            }
        }
    }
]

unit parametresinin açık tanımına dikkat edin. Modele "bunu kullanıcının konumundan çıkarım yapın" diyerek, kullanıcılardan gereksiz bilgi istemek yerine mantıksal varsayımlar yapmasını yönlendirirsiniz.

Python'da Pratik Uygulama

Fonksiyon çağrısı döngüsünü varsayımsal bir API istemcisi kullanarak nasıl ele alacağınızın basitleştirilmiş bir örneği aşağıdadır. LLM'in Python fonksiyonunu asla çalıştırmadığını, sadece çağırmaya karar verdiğini unutmayın.

import json
from openai import OpenAI

client = OpenAI()

def get_weather(location, unit="fahrenheit"):
    # Placeholder for actual API call
    return f"The weather in {location} is sunny and {72 if unit == 'fahrenheit' else 22} degrees."

# Initial chat
response = client.chat.completions.create(
    model="gpt-4o",
    tools=tools,
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What's the weather like in Boston?"}
    ]
)

# Check if the model wants to call a function
if response.choices[0].message.tool_calls:
    tool_call = response.choices[0].message.tool_calls[0]
    
    # Parse arguments
    function_name = tool_call.function.name
    arguments = json.loads(tool_call.function.arguments)
    
    # Execute the actual function
    if function_name == "get_current_weather":
        result = get_weather(**arguments)
    else:
        result = "Unknown function"
    
    # Send result back to the model
    final_response = client.chat.completions.create(
        model="gpt-4o",
        tools=tools,
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "What's the weather like in Boston?"},
            {"role": "assistant", "content": response.choices[0].message.content},
            {"role": "tool", "tool_call_id": tool_call.id, "content": result}
        ]
    )
    print(final_response.choices[0].message.content)

Üretim Sistemleri İçin En İyi Uygulamalar

  1. Açıklamaları Net ve Öz Tutun: LLM bu açıklamaları okur. Belirsizlikten kaçının. Parametreler karmaşıksa örnekler kullanın.
  2. Araç Sayısını Sınırlayın: Çok fazla seçenek modeli karıştırabilir. İlgili araçları gruplayın veya doğru araç setini seçmek için bir "yönlendirici" (router) model kullanın.
  3. Hataları Zarifçe Yönetin: Bir fonksiyon başarısız olursa (ör. ağ zaman aşımı), hata mesajını LLM'e geri besleyin. Model genellikle özür dileyebilir veya bir alternatif önerebilir.
  4. Girdileri Doğrulayın: LLM'in çıktısına körü körüne güvenmeyin. Hassas işlemleri çalıştırmadan önce türleri ve aralıkları doğrulayın.

Sonuç

Fonksiyon çağrısı, zeki yapay zeka ajanları oluşturmanın temel taşıdır. Araç tanımlama sanatını ve çalıştırma döngüsünü yönetmeyi ustalaşarak, LLM'lerin gerçek dünya ile etkileşime girmesinin tam potansiyelini açığa çıkarabilirsiniz. Tek bir, iyi tanımlanmış araçla küçük başlayın, açıklamalar üzerinde iterasyon yapın ve ajanınızın yeteneklerini kademeli olarak genişletin. Yapay zekanın geleceği sadece sohbet etmekle ilgili değil; eylemde bulunmakla ilgili.

Share: