Büyük Dil Modellerini (LLM'ler) prototipten üretime taşımak, özellikle oluşturucu yapay zekayı deterministik yazılım mantığıyla birleştirmek için fonksiyon çağırma özelliğini kullanırken yeni bir dizi zorluk getirir. API çağrıları aracılığıyla yapılandırılmış veri çıkarımının vaatleri etkileyici olsa da, gerçeklik genellikle hatalı JSON, halüsinasyonla üretilmiş argümanlar ve şema uyumsuzluklarıyla uğraşmayı içerir. Bu yazı, üretim ortamlarındaki en yaygın hata modlarını incelemekte ve bunları azaltmaya yönelik uygulanabilir stratejiler sunmaktadır.
Sessiz Katil: Hatalı JSON Çıktısı
Fonksiyon çağırma hatlarında en sık karşılaşılan başarısızlık noktası, modelin sözdizimsel olarak doğru JSON üretememesidir. LLM'ler birer JSON derleyicisi değil, sonraki token tahmincisilerdir. Eksik virgüller, sondaki virgüller veya kaçırılmamış özel karakterler gibi küçük sapmalar bile, herhangi bir iş mantığı yürütülmeden önce aşağı akıştaki ayrıştırıcıların çökmesine neden olabilir.
Buna çözüm olarak, sağlam bir son işleme katmanı uygulayın. Sadece modelin ham çıktısına güvenmek yerine, yaygın sözdizimi hatalarını "düzeltmeye" çalışabilecek hafif bir JSON ayrıştırıcısı kullanın. Ancak, en etkili strateji, daha iyi yönlendirme (prompting) ve şema kısıtlamaları aracılığıyla hatayı kaynağında önlemektir.
// JSON doğrulaması ile yeniden deneme mekanizması için sahte kod
def call_llm_with_retry(prompt, functions, max_retries=3):
for attempt in range(max_retries):
response = llm.chat(prompt, functions=functions)
# Ham metni çıkar
raw_json = response.choices[0].message.tool_calls[0].function.arguments
try:
# JSON'u ayrıştırmayı dene
parsed_args = json.loads(raw_json)
return execute_function(response.tool_calls[0].name, parsed_args)
except json.JSONDecodeError as e:
# Yeniden deneme için belirli bir hata yönlendirmesi oluştur
error_prompt = f"Önceki JSON geçersizdi: {str(e)}. Lütfen formatı düzeltin. Ham çıktı: {raw_json}"
prompt += "\n" + error_prompt
raise Exception("JSON ayrıştırma için maksimum yeniden deneme aşımına uğradı")
Şema Uyumsuzlukları ve Tür Kaymaları
JSON geçerli olsa bile, veri türleri genellikle fonksiyon şemanızda sağlanan sıkı tanımlarla eşleşmeyebilir. Örneğin, bir LLM tamsayı bir alan için bir dize döndürebilir veya gerekli bir alanı tamamen atlayabilir. Bu durum, LLM veri formatı konusunda emin olmadığında özellikle yaygındır.
Çözüm, sıkı şema zorlaması ve savunmacı kodlamada yatar. Gelen argümanları, alındıkları anda beklenen türlerle doğrulamak için Python'da pydantic veya Node.js'de zod gibi araçları kullanın. Doğrulama başarısız olursa, fonksiyonu yürütme; bunun yerine, LLM'e hangi alanın neden doğrulama başarısız olduğunu açıklayan yapılandırılmış bir hata mesajı döndürün.
Bağlamsal Halüsinasyonlar ve İlgisiz Parametreler
Bazen JSON yapısı mükemmeldir, ancak değerler anlamsızdır. Bir LLM, sisteminizin veritabanında mevcut olmayan bir parametre değeri çıkarabilir ve bu da "404 Bulunamadı" veya iş sürecinizde mantıksal bir hataya yol açabilir. Bu durum, yönlendirmenin (prompt) yeterli bağlam içermemesi veya fonksiyon açıklamasının çok belirsiz olması durumunda ortaya çıkar.
Fonksiyon açıklamalarınızı geçerli değerlerin örneklerini ve net kısıtlamaları içerecek şekilde geliştirin. Karmaşık numaralandırmalar (enums) için, JSON şemanızın açıklama alanında izin verilen değerleri açıkça listeleyin. Bu, modelin bilişsel yükünü azaltır ve çıktısını gerçek veri alanınızla hizalar.
Sonuç
Üretimdeki fonksiyon çağırma hatalarını gidermek, "doğruluk için yönlendirme yapma" yaklaşımından "sağlamlık için mühendislik yapma" yaklaşımına bir zihniyet değişikliği gerektirir. Sıkı şema doğrulaması, yeniden deneme mantığına sahip sağlam JSON ayrıştırma ve detaylı fonksiyon açıklamaları uygulayarak, LLM hatlarınızdaki gürültüyü önemli ölçüde azaltabilirsiniz. Unutmayın ki LLM olasılıksal bir motordur; kodunuz kaçınılmaz hataları yakalayan deterministik bir güvenlik ağı olmalıdır.