0Pricing
AI Agents · Ders

LangSmith ve Langfuse ile İz Analizi

İzleri okuma: yavaş araçları, yanlış kararları ve hata örüntülerini belirleme.

LangSmith ve Langfuse ile İz Analizi, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 1. 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 Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.

Ajanınızı Neden İzlemelisiniz?

Ajanlar her çalıştırmada birden çok LLM çağrısı ve araç çağrısı gerçekleştirir. İzleme olmadan hata ayıklama tahminden ibaret kalır. İzleme her adımı kaydeder: girdileri, çıktıları, belirteç kullanımını, gecikmeyi ve hataları — böylece her çalıştırmanın eksiksiz bir görünümünü sunar.

LangSmith Kurulumu

LangSmith, LangChain için Anthropic'in izleme platformudur. İki ortam değişkeni ayarlayarak etkinleştirin. Her LangChain çağrısı otomatik olarak izlenir ve LangSmith kullanıcı arayüzünde görünür.

import os
from dotenv import load_dotenv

load_dotenv()

# LangSmith tracing configuration
os.environ['LANGCHAIN_TRACING_V2'] = 'true'
os.environ['LANGCHAIN_API_KEY'] = os.environ.get('LANGSMITH_API_KEY', 'ls__...')
os.environ['LANGCHAIN_PROJECT'] = 'my-agent-project'

# Now any LangChain code is automatically traced
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

llm = ChatOpenAI(model='gpt-4o-mini', api_key=os.environ.get('OPENAI_API_KEY', 'sk-...'))

# This call is traced automatically
response = llm.invoke([HumanMessage(content='What is 2+2?')])
print(response.content)
# Check trace at: https://smith.langchain.com

Çalıştırma Üst Verilerini Ekleme

LangSmith kullanıcı arayüzünde filtreleme ve arama yapabilmek için izlere etiketler ve üst veriler ekleyin. Bu, farklı ajan sürümlerini, kullanıcı kimliklerini veya deneme etiketlerini izlemek için kullanışlıdır.

import os
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
from langsmith import traceable

os.environ['LANGCHAIN_TRACING_V2'] = 'true'
os.environ['LANGCHAIN_API_KEY'] = 'ls__your-key'
os.environ['LANGCHAIN_PROJECT'] = 'my-agent-project'

llm = ChatOpenAI(model='gpt-4o-mini', api_key='sk-...')

@traceable(name='my-agent-run', tags=['production', 'v2'], metadata={'user_id': '42'})
def run_agent(question: str) -> str:
    response = llm.invoke(
        [HumanMessage(content=question)],
        config={
            'run_name': f'agent-{question[:20]}',
            'tags': ['production'],
            'metadata': {'user_id': '42', 'version': 'v2.1'}
        }
    )
    return response.content

result = run_agent('Explain LangChain tracing')
print(result)

LangSmith Kullanıcı Arayüzünde İzleri Görüntüleme

LangSmith kontrol panelinde, her çalıştırmayı tam iz ağacıyla birlikte görebilirsiniz. Her düğüm şunları gösterir: girdiler, çıktılar, belirteç sayıları, gecikme ve varsa hatalar. Çalıştırmaları karşılaştırabilir ve etiketlere ya da projeye göre filtreleyebilirsiniz.

  • Başarısız çalıştırmaları bulmak için hata durumuna göre filtreleyin
  • Yavaş adımları belirlemek için gecikmeye göre sıralayın
  • Gerilemeleri hata ayıklamak için iki çalıştırmayı yan yana karşılaştırın
# Programmatically query LangSmith for run data
from langsmith import Client

client = Client(api_key='ls__your-key')

# List recent runs for a project
runs = list(client.list_runs(
    project_name='my-agent-project',
    execution_order=1,      # Top-level runs only
    error=True,             # Only failed runs
    limit=10
))

for run in runs:
    print(f'Run: {run.name}')
    print(f'  Status: {run.status}')
    print(f'  Latency: {run.end_time - run.start_time if run.end_time else "running"}')
    print(f'  Error: {run.error}')
    print()

Özel İzleme için Langfuse

Langfuse, LangSmith'e açık kaynaklı bir alternatiftir. Herhangi bir LLM çatısıyla veya özel kodla çalışır. İzleri ve aralıkları manuel olarak oluşturmak için Langfuse SDK'sini kullanın.

from langfuse import Langfuse

lf = Langfuse(
    public_key='pk-lf-...',
    secret_key='sk-lf-...',
    host='https://cloud.langfuse.com'  # Or your self-hosted URL
)

# Create a trace
trace = lf.trace(
    name='email-agent-run',
    user_id='user-42',
    metadata={'environment': 'production'}
)

# Create a span for entity extraction
span = trace.span(
    name='entity-extraction',
    input={'text': 'Meeting with Alice from Google tomorrow'}
)

# Simulate work
extracted = ['Alice', 'Google']

# End the span with output
span.end(output={'entities': extracted})

print('Trace created in Langfuse')
print(f'View at: https://cloud.langfuse.com/trace/{trace.id}')

Langfuse'da LLM Çağrılarını İzleme

Her LLM çağrısı için bir generation aralığı oluşturun. Bu, kullanılan modeli, istemi, tamamlamayı ve belirteç sayılarını yakalar — maliyet analizi için en önemli verileri.

from langfuse import Langfuse
import openai

lf = Langfuse(public_key='pk-lf-...', secret_key='sk-lf-...')
client = openai.OpenAI(api_key='sk-...')

def traced_llm_call(trace, prompt: str, model: str = 'gpt-4o-mini') -> str:
    generation = trace.generation(
        name='llm-call',
        model=model,
        input=[{'role': 'user', 'content': prompt}]
    )
    
    response = client.chat.completions.create(
        model=model,
        messages=[{'role': 'user', 'content': prompt}]
    )
    content = response.choices[0].message.content
    
    generation.end(
        output=content,
        usage={
            'prompt_tokens': response.usage.prompt_tokens,
            'completion_tokens': response.usage.completion_tokens,
            'total_tokens': response.usage.total_tokens
        }
    )
    return content

trace = lf.trace(name='test-trace')
result = traced_llm_call(trace, 'What is the capital of France?')
print('Result:', result)

Çalıştırmaları Hataya ve Gecikmeye Göre Filtreleme

Sorunlu çalıştırmaları program aracılığıyla bulmak için LangSmith istemcisini kullanın. Hata durumuna, gecikme eşiğine veya belirli etiketlere göre filtreleyerek hata ayıklama çalışmalarınızı belirli bir alana odaklayın.

from langsmith import Client
from datetime import datetime, timedelta

client = Client(api_key='ls__your-key')

def find_slow_runs(project: str, latency_threshold_ms: int = 10000):
    runs = list(client.list_runs(
        project_name=project,
        execution_order=1,
        start_time=datetime.utcnow() - timedelta(hours=24)
    ))
    
    slow_runs = []
    for run in runs:
        if run.end_time and run.start_time:
            duration_ms = (run.end_time - run.start_time).total_seconds() * 1000
            if duration_ms > latency_threshold_ms:
                slow_runs.append({
                    'id': str(run.id),
                    'name': run.name,
                    'duration_ms': round(duration_ms),
                    'tags': run.tags
                })
    
    slow_runs.sort(key=lambda x: x['duration_ms'], reverse=True)
    return slow_runs

print('Find slow runs function defined')
print('Usage: find_slow_runs("my-agent-project", latency_threshold_ms=5000)')

Çalıştırmaları Karşılaştırma

LangSmith, neyin değiştiğini görmek için kullanıcı arayüzünde iki çalıştırmayı karşılaştırmanıza olanak tanır. Program aracılığıyla çalıştırma çıktılarını, belirteç kullanımını ve gecikmeyi karşılaştırarak model veya istem değişikliklerinden sonraki gerilemeleri tespit edebilirsiniz.

from langsmith import Client

client = Client(api_key='ls__your-key')

def compare_runs(run_id_1: str, run_id_2: str) -> dict:
    run1 = client.read_run(run_id_1)
    run2 = client.read_run(run_id_2)
    
    def get_tokens(run):
        if run.total_tokens:
            return run.total_tokens
        return 0
    
    def get_latency_ms(run):
        if run.end_time and run.start_time:
            return (run.end_time - run.start_time).total_seconds() * 1000
        return 0
    
    return {
        'run1': {'id': run_id_1, 'tokens': get_tokens(run1), 'latency_ms': get_latency_ms(run1), 'status': run1.status},
        'run2': {'id': run_id_2, 'tokens': get_tokens(run2), 'latency_ms': get_latency_ms(run2), 'status': run2.status},
        'token_delta': get_tokens(run2) - get_tokens(run1),
        'latency_delta_ms': get_latency_ms(run2) - get_latency_ms(run1)
    }

print('Run comparison function defined')

Puan ve Geri Bildirim Ekleme

Bir ajan çalıştırmasını manuel veya otomatik olarak değerlendirdikten sonra ize bir puan ya da geri bildirim ekleyin. Bu işlem, ince ayar yapmak veya istem değişikliklerini değerlendirmek için bir veri kümesi oluşturur.

from langsmith import Client

client = Client(api_key='ls__your-key')

def score_run(run_id: str, score: float, reasoning: str = ''):
    # score: 0.0 (bad) to 1.0 (perfect)
    client.create_feedback(
        run_id=run_id,
        key='quality',
        score=score,
        comment=reasoning
    )

def auto_evaluate_run(run_id: str, expected_output: str, actual_output: str) -> float:
    # Simple heuristic: check if key terms from expected output are present
    expected_terms = set(expected_output.lower().split())
    actual_terms = set(actual_output.lower().split())
    overlap = len(expected_terms & actual_terms) / max(len(expected_terms), 1)
    score = min(1.0, overlap * 1.5)  # Normalize
    score_run(run_id, score, f'Term overlap: {overlap:.2f}')
    return score

print('Scoring functions defined')
print('Example: score_run("run-id-abc", 0.85, "Good answer but missing one detail")')

Yapılandırılmış İz Bağlamı

İzlere anlamlı bağlam ekleyin: oturum kimliği, kullanıcı kimliği, ajan sürümü ve özellik bayrakları. Bu, izleri bölümlere ayırmayı ve farklı yapılandırmalar arasındaki performansı karşılaştırmayı kolaylaştırır.

import os
from langsmith import traceable
from langchain_core.runnables import RunnableConfig

def build_trace_config(user_id: str, session_id: str, version: str) -> dict:
    return {
        'metadata': {
            'user_id': user_id,
            'session_id': session_id,
            'agent_version': version,
            'environment': os.environ.get('ENV', 'development')
        },
        'tags': [version, os.environ.get('ENV', 'development')],
        'run_name': f'agent-{user_id[:8]}'
    }

@traceable
def run_agent_with_context(question: str, user_id: str, session_id: str):
    config = build_trace_config(user_id, session_id, 'v2.3')
    # Pass config to any LangChain component
    # llm.invoke([HumanMessage(content=question)], config=config)
    print(f'Running agent for user {user_id}, session {session_id}')
    return 'Answer here'

result = run_agent_with_context('Question', 'user-001', 'sess-xyz')
print(result)

Uyarıları Ayarlama

LangSmith veya Langfuse'da uyarılar ayarlayarak ajanınızın durumunu izleyin. Hata oranı bir eşiği aştığında, P99 gecikmesinde ani artış olduğunda veya belirli bir adım sürekli olarak başarısız olduğunda uyarı verin.

from langsmith import Client
from datetime import datetime, timedelta

client = Client(api_key='ls__your-key')

def check_error_rate(project: str, window_minutes: int = 60, threshold: float = 0.05) -> dict:
    runs = list(client.list_runs(
        project_name=project,
        execution_order=1,
        start_time=datetime.utcnow() - timedelta(minutes=window_minutes)
    ))
    
    if not runs:
        return {'error_rate': 0.0, 'alert': False}
    
    error_count = sum(1 for r in runs if r.status == 'error')
    error_rate = error_count / len(runs)
    
    if error_rate > threshold:
        print(f'ALERT: Error rate {error_rate:.1%} exceeds threshold {threshold:.1%}')
        # Send to Slack/PagerDuty here
    
    return {
        'total_runs': len(runs),
        'error_count': error_count,
        'error_rate': round(error_rate, 4),
        'alert': error_rate > threshold
    }

print('Error rate monitor defined')

Bilgi Kontrolü: İzleme

LangSmith ve Langfuse ile ajan izleme konusundaki anlayışınızı sınayın.

İzleme Özeti

LangSmith ve Langfuse birbirini tamamlayan araçlardır: LangSmith, LangChain ile sıkı bir şekilde bütünleşir ve minimum kurulum gerektirirken Langfuse herhangi bir çatışmayla çalışır ve size daha fazla denetim sunar. Her ikisi de her ajan adımı için girdileri, çıktıları, belirteç kullanımını, gecikmeyi ve hataları kaydeder. Üretimde ajan kalitesini korumak için filtreleme, puanlama ve uyarıları kullanın.

Sıkça Sorulan Sorular

“LangSmith ve Langfuse ile İz Analizi” dersi ücretsiz mi?

Evet — “LangSmith ve Langfuse ile İz Analizi” 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 Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.

“LangSmith ve Langfuse ile İz Analizi” dersinde ne öğreneceğim?

İzleri okuma: yavaş araçları, yanlış kararları ve hata örüntülerini belirleme. AI Agents 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 Agents öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Agents, 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 1. dersidir.

“LangSmith ve Langfuse ile İz Analizi” 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 Agents dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Agents 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. LangSmith ve Langfuse ile İz Analizi
  2. Adım Bazında Belirteç ve Maliyet Profilleme
  3. Yavaş ve Pahalı Adımları Belirleme
  4. Aracı Hataları İçin Kök Neden Analizi
← AI Agents Sayfasına Dön