---
title: "LangChain agent'ında gecikmenin yüzde 92'si üç model çağrısında"
description: "OpenTelemetry GenAI span'leriyle LangChain agent'ında yavaş model çağrısını bulma, istek başına maliyeti trace'e yazma ve ucuz model denemesinin sonucu."
image: "https://sezer.in/wp-content/uploads/2026/11/image2.png"
url: "https://sezer.in/haberler/opentelemetry-genai-ai-agent-maliyet-gecikme/"
date: "2026-11-06T10:46:26+03:00"
updated: "2026-11-06T10:46:26+03:00"
author: "Sezer Şanlıkan"
lang: "tr"
source: "https://sezer.in/haberler/opentelemetry-genai-ai-agent-maliyet-gecikme/"
---

# LangChain agent'ında gecikmenin yüzde 92'si üç model çağrısında

Bir LangChain alışveriş asistanı OpenTelemetry GenAI semantic convention'larıyla izlendiğinde, 10,10 saniyelik bir isteğin yaklaşık yüzde 92'sinin üç model çağrısında geçtiği görüldü. Karşılaştırma adımı daha ucuz bir modele taşınınca soru başına model harcaması yüzde 76-83 düştü. Beş test sorusunun dördünde ise yanıt süresi uzadı.

## OpenTelemetry nedir, ne işe yarar?

OpenTelemetry, uygulamalardan trace, metric ve log verisi üretip taşımak için kullanılan açık kaynak ve üreticiden bağımsız bir observability standardıdır. SDK'ları, instrumentation kütüphanelerini ve OTLP protokolünü içerir. Toplanan veri Elastic, Grafana veya Datadog gibi farklı backend'lere gönderilebilir. GenAI semantic convention'ları, model çağrılarını ve agent adımlarını ortak alan adlarıyla kaydetmek için tanımlanmıştır.

## Klasik APM model çağrısının içini görmüyor

Bir agent isteğinin toplam süresi, darboğazın nerede olduğunu söylemiyor. Klasik APM, model sağlayıcısına giden HTTPS çağrısını görüyor. Hangi modelin cevap verdiğini, kaç token harcandığını ve çağrıyı hangi tool'un yaptığını görmüyor.

LLM çağıran bir servisi production'da işletiyorsanız gecikme ile fatura aynı noktada büyüyor. İkisini ayırmak için model bilgisi span seviyesinde olmalı.

Örnekte 10,10 saniyenin 4,20 saniyesi Sol karşılaştırma çağrısına, 1,91 saniyesi tool seçimine, 3,15 saniyesi son yanıta gidiyor. Elasticsearch'ten ürünleri çekmek 690 ms sürüyor. Vektör aramasını optimize etmeye başlamadan önce trace'e bakın.

Trace'te ikinci bir aday daha var. Son çağrı, tool'un ürettiği cevabı müşteriye aktarıyor ve yalnız bu adım 3,15 saniye sürüyor. Tool çıktısının yeniden modelden geçmesi gerçekten gerekli mi, bunu sorgulamak model değiştirmekten fazla kazandırabilir. Deney bunu denemiyor; bu, waterfall'dan çıkardığım bir sonuç.

## OpenTelemetry GenAI span'leri neyi kaydediyor

Upstream instrumentor agent'ı, tool'ları ve model çağrılarını birbirine bağlı span'ler olarak yazıyor: `invoke_agent`, `execute_tool`, `chat`. `chat` span'lerinde `gen_ai.response.model`, `gen_ai.usage.input_tokens` ve `gen_ai.usage.output_tokens` geliyor.

Alan adları OpenTelemetry GenAI standardından geldiği için sorgularınız backend'e bağlı kalmıyor. Daha önce OpenLLMetry, OpenLIT veya Langtrace ile trace topladıysanız alan adları farklı olabilir; dashboard ve sorguları upstream adlara göre yeniden yazmanız gerekir.

Prompt ve yanıtlar müşteri verisi taşıyabilir. İçerik kaydını kapalı tutun; model adı, token sayısı ve süre yine kaydediliyor:

```
export OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT="NO_CONTENT"
```

## Kurulumda üç tuzak

- OpenLLMetry'nin `opentelemetry-instrumentation-langchain` paketi de `langchain` adını kaydediyor. Upstream `opentelemetry-instrumentation-genai-langchain` ile aynı ortama kurmayın.
- `edot-bootstrap` LangChain instrumentation paketini henüz kurmuyor; EDOT Python ile zero-code kurulumda paketi elle ekleyin.
- Instrumentor 1.1b1, `create_agent` çıktısını metadata'da agent adı yoksa `invoke_workflow` olarak kaydediyor. `agent.invoke` çağrısına `metadata` içinde `agent_name` geçin; yoksa `invoke_agent` span'i oluşmuyor ve agent'a göre filtreleyen sorgular boş dönüyor.

Instrumentor beta sürümde. Paket sürümlerini sabitleyin, yükseltmeden önce span adlarını tekrar kontrol edin.

```
pip install elastic-opentelemetry opentelemetry-instrumentation-genai-langchain
```

Elastic'te GenAI sekmesi 9.6'da ve Serverless'ta technical preview olarak sunuluyor. 9.5 kullanıyorsanız span'in Metadata sekmesinde `gen_ai` ile filtreleyin.

## Token sayısı fatura değil

OpenTelemetry GenAI span'leri token sayısını taşıyor, ödenen tutarı taşımıyor. OpenRouter tutarı `response_metadata["cost"]` alanına koyuyor, fakat instrumentor bunu trace'e yazmıyor. Örnek uygulama bir LangChain callback ile üç çağrının tutarını toplayıp root span'e `app.model_cost.usd` olarak ekliyor.

Bu küçük ek, maliyeti istek seviyesinde süreyle yan yana sorgulamanızı mümkün hale getiriyor. Rakam yalnızca model kullanımını kapsıyor; Elasticsearch, retrieval inference ve altyapı ayrı faturalanıyor.

Maliyeti token'dan tahmin edecekseniz cache'e dikkat edin. `gen_ai.usage.input_tokens` değeri cache okuma ve yazma token'larını zaten içeriyor. Cache token'larını ayrı fiyatlandırın, aksi halde tahmininiz faturadan sapar.

Süre toplarken de benzer bir hata var. Tool span'i çocuklarının süresini içeriyor; ikisini toplarsanız aynı işi iki kez sayarsınız. Müşterinin beklediği süre için root span'i kullanın.

## Ucuz model, uzun bekleme

Karşılaştırma modeli değişince model harcaması soru başına yüzde 76-83 düştü. Beş sorunun dördünde yanıt süresi kötüleşti. Daha ucuz model daha hızlı cevap vermiyor; model değişikliğini iki metriği birlikte ölçmeden yayına almayın.

Deneyde retrieval sabit tutulmuş: altı ürünlük katalogda `size=6` tüm kayıtları döndürüyor. Fark bu sayede yalnızca modelden geliyor. Kendi A/B testinizde de retrieval'ı sabitleyin, aynı soru setini iki varyantla çalıştırın.

Sonra ES|QL ile `chat` span'lerini `gen_ai.response.model` alanına göre gruplayıp ortalama süre ve toplam token'ı çıkarın. Root span'deki `app.model_cost.usd` değerini aynı zaman aralığında yanına koyun. Hangi tarafın ağır bastığına ürün kararı veriyor: maliyet hassas bir iç araçta yüzde 80 tasarruf yeterli gerekçe olabilir, müşteriye dönük bir sohbet ekranında birkaç saniyelik ek bekleme olmayabilir.
