0Pricing
AI Engineering Academy · Ders

LangSmith ile İzleme

Her zincir adımını, LLM çağrısını, belirteç sayısını ve gecikmeyi aranabilir bir iz gezginine kaydetmek için LangChain uygulamanızı LangSmith izlemeyle donatın.

LangSmith ile İzleme, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.

LangSmith Nedir?

LangSmith, özellikle LLM uygulamaları için geliştirilmiş bir gözlemlenebilirlik platformudur. Her LangChain çalıştırmasının izlerini (her zincir adımını, LLM çağrısını, araç yürütmesini, getirme işlemini ve çıktı ayrıştırıcısını) otomatik olarak yakalar ve bunları aranabilir, hiyerarşik bir iz gezgininde görüntüler. İzleri gecikme, maliyet, hata durumu veya özel üst verilerle filtreleyebilir ve başarısızlıkları hata ayıklamak için herhangi bir izi yeniden oynatabilirsiniz.

# Install: pip install langsmith
import os

# Set environment variables to enable automatic tracing
os.environ['LANGCHAIN_TRACING_V2'] = 'true'
os.environ['LANGCHAIN_API_KEY'] = 'lsv2_...your_key_here...'
os.environ['LANGCHAIN_PROJECT'] = 'my-rag-app'  # project name in LangSmith UI

# That's all - LangChain now sends traces to LangSmith automatically
# No code changes needed to your chain or agent

Sıfır Kod Değişikliğiyle Otomatik İzleme

LangSmith'in en etkileyici özelliği, üç ortam değişkenini ayarladığınızda her LangChain işleminin ek kod olmadan otomatik olarak izlenmesidir. Her LCEL zinciri, her ChatOpenAI çağrısı, her getirici çağrısı ve her araç yürütmesi; girdiler, çıktılar, zaman ölçümleri ve belirteç sayılarıyla birlikte yakalanır. LangSmith izlemeyi tek bir ortam değişikliğiyle üretime alabilirsiniz.

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# This chain is automatically traced - no extra code needed
llm = ChatOpenAI(model='gpt-4o')
prompt = ChatPromptTemplate.from_template('Answer this question: {question}')
chain = prompt | llm | StrOutputParser()

# This call creates a trace in LangSmith showing:
# - The formatted prompt (with question substituted)
# - The LLM call with model, temperature, token counts
# - The parsed output
# - End-to-end latency and cost
result = chain.invoke({'question': 'What is RAG?'})
print(result)

RAG İşlem Hatlarını İzleme

RAG uygulamalarında LangSmith izleri özellikle değerlidir; çünkü alma ve ardından üretme işlem hattının tamamını yakalar. Şunları görebilirsiniz: hangi belgelerin getirildiğini, benzerlik puanlarının ne olduğunu, bağlamın istem içinde nasıl biçimlendirildiğini ve LLM'nin ne ürettiğini. Böylece yanlış yanıtın kötü getirmeden mi yoksa yetersiz üretimden mi kaynaklandığı hemen anlaşılır.

from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain_core.runnables import RunnablePassthrough

embeddings = OpenAIEmbeddings()
vectorstore = Chroma(embedding_function=embeddings)
retriever = vectorstore.as_retriever(search_kwargs={'k': 5})

rag_chain = (
    {'context': retriever, 'question': RunnablePassthrough()}
    | ChatPromptTemplate.from_template('Context: {context}\n\nQuestion: {question}\n\nAnswer:')
    | ChatOpenAI(model='gpt-4o')
    | StrOutputParser()
)

# LangSmith traces EVERY step:
# 1. Retriever: query embedding + vector search + returned documents (with scores)
# 2. Prompt: formatted template with context injected
# 3. LLM: full prompt, response, tokens, latency, cost
# 4. Parser: final string output
answer = rag_chain.invoke('What is the capital of France?')

İzlere Üst Veri Ekleme

Varsayılan olarak LangSmith izleri her adımın girdilerini ve çıktılarını içerir. İzleri özel üst veri etiketleriyle zenginleştirebilirsiniz: kullanıcı kimliği, oturum kimliği, özellik bayrağı değerleri, A/B sınaması varyantı veya kullanıcı arayüzünde izleri filtreleyip analiz etmenize yardımcı olan diğer bağlamlar. Her istekten gelen tüm izlerde görünecek üst verileri aktarmak için RunnableConfig kullanın.

from langchain_core.runnables import RunnableConfig

def handle_user_request(user_id: str, query: str, ab_variant: str):
    config = RunnableConfig(
        tags=['production', ab_variant],
        metadata={
            'user_id': user_id,
            'ab_variant': ab_variant,
            'feature': 'rag_qa'
        }
    )
    
    result = rag_chain.invoke(query, config=config)
    return result

# In LangSmith UI you can now:
# - Filter traces by user_id to debug a specific user's issue
# - Compare latency between ab_variant='A' and ab_variant='B'
# - See all traces tagged 'production' vs 'staging'

El İle Aralık Oluşturma

LangChain üzerinden geçmeyen kodlar (özel API çağrıları, veritabanı sorguları ve ön işleme adımları) için doğrudan LangSmith istemcisini kullanarak el ile aralıklar oluşturabilirsiniz. Bu, LangChain dışındaki adımlarınızın LangChain adımlarıyla aynı iz içinde yakalanmasını ve her isteğin yürütme yolunun eksiksiz bir görünümünü elde etmenizi sağlar.

from langsmith import Client, traceable

client = Client()

# Decorate functions to auto-trace them
@traceable(name='preprocess_query')
def preprocess_query(raw_query: str) -> str:
    # This step is now traced even though it doesn't use LangChain
    cleaned = raw_query.strip().lower()
    cleaned = ' '.join(cleaned.split())  # normalize whitespace
    return cleaned

@traceable(name='fetch_user_history')
def fetch_user_history(user_id: str) -> list[str]:
    # Database call - also traced
    return db.query('SELECT message FROM chat_history WHERE user_id = ? ORDER BY timestamp DESC LIMIT 5', user_id)

# All three steps appear in the same trace
def handle_request(user_id: str, raw_query: str):
    query = preprocess_query(raw_query)         # traced
    history = fetch_user_history(user_id)       # traced
    result = rag_chain.invoke({'query': query, 'history': history})  # traced by LangChain
    return result

LangSmith'te İzleri Değerlendirme

LangSmith, iz veri kümeniz üzerinde değerlendiriciler çalıştırmanızı sağlayan bir değerlendirme çerçevesi içerir. İzlenmiş örneklerden oluşan bir küme seçebilir, otomatik değerlendiriciler (doğruluk ve uygunluk için LLM değerlendirici puanlayıcıları dahil) çalıştırabilir ve sonuçları farklı işlem hattı sürümleri arasında karşılaştırabilirsiniz. Böylece üretim izlerinizi uygulamanızı geliştirmek için bir geri bildirim döngüsüne dönüştürürsünüz.

from langsmith.evaluation import evaluate, LangChainStringEvaluator

# Create an evaluator that uses an LLM to judge correctness
correctness_evaluator = LangChainStringEvaluator(
    'qa',
    config={'llm': ChatOpenAI(model='gpt-4o')}
)

# Run evaluation against a dataset of traced examples
results = evaluate(
    rag_chain,
    data='my-rag-test-set',      # name of dataset in LangSmith
    evaluators=[correctness_evaluator],
    experiment_prefix='rag-v2-chunking-test'
)

print('Evaluation results:')
print(f'Correctness: {results.results["correctness"].mean():.2f}')
print(f'Average latency: {results.results["latency"].mean():.2f}s')

İzlerden Sınama Veri Kümeleri Oluşturma

LangSmith'in en güçlü özelliklerinden biri, sınama veri kümelerini doğrudan üretim izlerinden oluşturabilmenizdir. İlginç bir iz (bir başarısızlık, uç durum veya başarılı bir örnek) fark ettiğinizde tek tıklamayla bunu bir veri kümesine ekleyebilirsiniz. Zamanla yapay örnekler yerine gerçek kullanıcı sorgularından kapsamlı bir gerileme sınama paketi oluşturursunuz.

from langsmith import Client

client = Client()

# Create a dataset from existing traces
dataset = client.create_dataset('rag-regression-tests')

# Add examples from production traces (by trace ID)
for trace_id in failed_trace_ids:
    run = client.read_run(trace_id)
    client.create_example(
        inputs=run.inputs,
        outputs={'answer': run.outputs.get('output', '')},
        dataset_id=dataset.id,
        metadata={'source': 'production_failure', 'date': run.start_time.isoformat()}
    )

print(f'Added {len(failed_trace_ids)} examples to regression test dataset')

İzleri Filtreleme ve Arama

Üretimde binlerce iziniz olacaktır. LangSmith'in kullanıcı arayüzü ve API'si kapsamlı filtreleme ve aramayı destekler: eşik değerinin üzerinde gecikmeye sahip, belirli bir hata türü içeren, belirli bir kullanıcıdan gelen, çıktısında belirli bir anahtar kelime bulunan veya tamamlama belirteci sayısı bir sınırın üzerinde olan izleri bulabilirsiniz. Bu, belirli başarısızlık kategorilerini araştırmayı veya belirli kullanıcıların davranışını izlemeyi pratik hâle getirir.

from langsmith import Client

client = Client()

# Find slow traces (useful for performance investigation)
slow_runs = client.list_runs(
    project_name='my-rag-app',
    filter='gt(latency, 5)',  # latency > 5 seconds
    limit=20
)

# Find error traces
error_runs = client.list_runs(
    project_name='my-rag-app',
    filter='eq(error, true)',
    limit=50
)

# Find traces from a specific user
user_runs = client.list_runs(
    project_name='my-rag-app',
    filter='has(metadata, user_id="user_abc123")',
    limit=100
)

for run in slow_runs:
    print(f'Slow run: {run.id}, latency: {run.end_time - run.start_time}')

LangSmith'te Deneyleri Karşılaştırma

LangSmith deney karşılaştırmasını destekler: aynı sınama veri kümesini işlem hattınızın iki sürümünde çalıştırın (örneğin, parça boyutu 500'e karşı 1000) ve bunları gecikme, maliyet ve kalite ölçümleri açısından yan yana karşılaştırın. Böylece bir işlem hattı değişikliğini üretime almadan önce, bunun gerileme yerine bir iyileştirme olduğunu doğrulamak kolaylaşır.

from langsmith.evaluation import evaluate

test_dataset = 'my-rag-eval-set'

# Run experiment A: chunk size 500
results_a = evaluate(
    rag_pipeline_v1,
    data=test_dataset,
    evaluators=[correctness_evaluator, relevance_evaluator],
    experiment_prefix='chunk-500'
)

# Run experiment B: chunk size 1000
results_b = evaluate(
    rag_pipeline_v2,
    data=test_dataset,
    evaluators=[correctness_evaluator, relevance_evaluator],
    experiment_prefix='chunk-1000'
)

# Compare in LangSmith UI: Experiments tab shows A vs B side by side
# Or compare programmatically:
print(f'Correctness - v1: {results_a.results["correctness"].mean():.2f}, v2: {results_b.results["correctness"].mean():.2f}')

Üretimde LangSmith

LangSmith, smith.langchain.com adresinde barındırılan SaaS olarak ve kendi sunucunuzda barındırabileceğiniz bir seçenek olarak sunulur. Üretimde izleme, kritik yolunuza gecikme eklenmesini önlemek için eşzamansız (engellemeyen) hâle getirilebilir. Maliyeti kontrol ederken görünürlüğü korumak için izlerden örneklem de alabilirsiniz (örneğin, yoğun trafikli üretimde isteklerin yalnızca %10'unu izlemek). Gösterge paneli, istek hacmi, gecikme, maliyet ve hata oranına ilişkin gerçek zamanlı grafikler sunar.

import os

# Production configuration
os.environ['LANGCHAIN_TRACING_V2'] = 'true'
os.environ['LANGCHAIN_ENDPOINT'] = 'https://api.smith.langchain.com'
os.environ['LANGCHAIN_PROJECT'] = 'production'

# Enable async tracing (non-blocking - does not add latency to requests)
os.environ['LANGCHAIN_CALLBACKS_BACKGROUND'] = 'true'

# Optional: sample 10% of traces to reduce cost in high-traffic scenarios
import random

def should_trace() -> bool:
    return random.random() < 0.10  # 10% sampling rate

def handle_request(query):
    config = RunnableConfig()
    if not should_trace():
        config = RunnableConfig(callbacks=[])  # disable tracing for this request
    return rag_chain.invoke(query, config=config)

LangSmith ve Özel Günlüğe Kaydetme

Kendi iz günlükleme sisteminizi oluşturabilirsiniz ve bazı kullanım durumlarında bu doğru seçimdir. LangSmith'in özel günlüklemeye göre avantajları şunlardır: LangChain ile kod değişikliği gerektirmeyen entegrasyon, LLM izlerini keşfetmek için özel olarak tasarlanmış bir arayüz (genel amaçlı Kibana/Grafana panoları değil), değerlendirme ve deney karşılaştırması için yerleşik destek ve belirteç sayısı ile maliyetin otomatik olarak izlenmesi. Bunun karşılığında, sağlayıcı bağımlılığı ve ölçek büyüdükçe artan maliyet söz konusudur.

Hızlı Kontrol

Bu derste LangSmith ile izleme konusundaki anlayışınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: LangSmith, hiçbir kod değişikliği yapmadan üç ortam değişkeni ayarlayarak LangChain uygulamalarının uçtan uca otomatik izlenmesini sağlar; @traceable dekoratörü, veritabanı çağrıları ve ön işleme gibi LangChain dışındaki adımlara da izleme ekler; deney karşılaştırması ise dağıtımdan önce bir test veri kümesine karşı işlem hattı iyileştirmelerini doğrulamanıza olanak tanır. Sırada, modelden bağımsız bir gözlemlenebilirlik alternatifi olarak Langfuse'u inceleyeceğiz.

Sıkça Sorulan Sorular

“LangSmith ile İzleme” dersi ücretsiz mi?

Evet — “LangSmith ile İzleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.

“LangSmith ile İzleme” dersinde ne öğreneceğim?

Her zincir adımını, LLM çağrısını, belirteç sayısını ve gecikmeyi aranabilir bir iz gezginine kaydetmek için LangChain uygulamanızı LangSmith izlemeyle donatın. AI Engineering Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“LangSmith ile İzleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Engineering Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Engineering Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. LLM Uygulamalarında Hata Ayıklamanın Neden Zor Olduğu
  2. LangSmith ile İzleme
  3. Modelden Bağımsız Gözlemlenebilirlik İçin Langfuse
  4. Gecikme, Maliyet ve Kalite Düşüşleri İçin Uyarı
← AI Engineering Academy Sayfasına Dön