Pelacakan dengan LangSmith
Tambahkan instrumentasi pelacakan LangSmith ke aplikasi LangChain Anda untuk merekam setiap langkah rantai, panggilan LLM, jumlah token, dan latensi dalam penjelajah jejak yang dapat ditelusuri.
Pelacakan dengan LangSmith adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Engineering Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Apa Itu LangSmith?
LangSmith adalah platform observabilitas yang dibuat khusus untuk aplikasi LLM. Platform ini secara otomatis menangkap penelusuran setiap proses LangChain — setiap langkah rangkaian, panggilan LLM, eksekusi alat, pengambilan, dan pengurai output — lalu menampilkannya dalam penjelajah penelusuran hierarkis yang dapat dicari. Anda dapat memfilter penelusuran berdasarkan latensi, biaya, status kesalahan, atau metadata khusus, serta memutar ulang penelusuran apa pun untuk men-debug kegagalan.
# 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 agentPenelusuran Otomatis Tanpa Perubahan Kode
Fitur LangSmith yang paling menarik adalah, setelah Anda menetapkan tiga variabel lingkungan, setiap operasi LangChain otomatis ditelusuri tanpa kode tambahan. Setiap rangkaian LCEL, setiap panggilan ChatOpenAI, setiap panggilan pengambil, dan setiap eksekusi alat ditangkap bersama input, output, waktu, dan jumlah tokennya. Anda dapat menerapkan penelusuran LangSmith ke produksi hanya dengan mengubah satu variabel lingkungan.
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)Menelusuri Pipeline RAG
Untuk aplikasi RAG, penelusuran LangSmith sangat berharga karena menangkap seluruh pipeline pengambilan lalu pembuatan. Anda dapat melihat: dokumen mana yang diambil, berapa skor kemiripannya, bagaimana konteks diformat dalam perintah, dan apa yang dihasilkan LLM. Dengan demikian, Anda dapat segera mengetahui apakah jawaban yang salah disebabkan oleh pengambilan yang buruk atau pembuatan yang kurang baik.
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?')Menambahkan Metadata ke Penelusuran
Secara bawaan, penelusuran LangSmith berisi input dan output dari setiap langkah. Anda dapat memperkaya penelusuran dengan tag metadata khusus: ID pengguna, ID sesi, nilai tanda fitur, varian pengujian A/B, atau konteks lain yang membantu Anda memfilter dan menganalisis penelusuran di UI. Gunakan RunnableConfig untuk meneruskan metadata yang akan muncul pada setiap penelusuran dari permintaan tersebut.
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'Membuat Span Secara Manual
Untuk kode yang tidak melalui LangChain (panggilan API khusus, kueri basis data, langkah prapemrosesan), Anda dapat membuat span manual menggunakan klien LangSmith secara langsung. Dengan demikian, langkah non-LangChain Anda ditangkap dalam penelusuran yang sama dengan langkah LangChain, sehingga Anda memperoleh gambaran lengkap tentang jalur eksekusi setiap permintaan.
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 resultMengevaluasi Penelusuran di LangSmith
LangSmith menyertakan kerangka kerja evaluasi yang memungkinkan Anda menjalankan evaluator pada kumpulan data penelusuran. Anda dapat memilih sekumpulan contoh yang ditelusuri, menjalankan evaluator otomatis (termasuk penilai LLM sebagai juri untuk kebenaran dan relevansi), lalu membandingkan hasilnya pada berbagai versi pipeline. Dengan demikian, penelusuran produksi Anda menjadi putaran umpan balik untuk meningkatkan aplikasi.
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')Membuat Kumpulan Data Pengujian dari Penelusuran
Salah satu fitur LangSmith yang paling kuat adalah kemampuan untuk membuat kumpulan data pengujian langsung dari penelusuran produksi. Ketika melihat penelusuran yang menarik (kegagalan, kasus khusus, atau contoh yang bagus), Anda dapat menambahkannya ke kumpulan data hanya dengan satu klik. Seiring waktu, Anda membangun rangkaian pengujian regresi yang komprehensif dari kueri pengguna nyata, bukan contoh sintetis.
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')Memfilter dan Mencari Penelusuran
Dalam produksi, Anda akan memiliki ribuan penelusuran. UI dan API LangSmith mendukung pemfilteran dan pencarian yang luas: temukan penelusuran dengan latensi di atas ambang batas, jenis kesalahan tertentu, dari pengguna tertentu, yang memuat kata kunci tertentu dalam output, atau dengan jumlah token penyelesaian di atas batas. Hal ini membuat penyelidikan kategori kegagalan tertentu atau pemantauan perilaku pengguna tertentu menjadi praktis.
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}')Membandingkan Eksperimen di LangSmith
LangSmith mendukung perbandingan eksperimen: jalankan kumpulan data pengujian yang sama melalui dua versi pipeline Anda (misalnya, ukuran potongan 500 dibandingkan dengan ukuran potongan 1000), lalu bandingkan keduanya secara berdampingan berdasarkan metrik latensi, biaya, dan kualitas. Dengan demikian, Anda dapat memvalidasi bahwa perubahan pipeline merupakan peningkatan, bukan regresi, sebelum menerapkannya ke produksi.
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}')LangSmith dalam Produksi
LangSmith tersedia sebagai SaaS terhosting di smith.langchain.com dan sebagai opsi yang dihosting sendiri. Dalam produksi, penelusuran dapat dibuat asinkron (tidak memblokir) agar tidak menambah latensi pada jalur kritis Anda. Anda juga dapat mengambil sampel penelusuran (misalnya, hanya menelusuri 10% permintaan dalam produksi dengan lalu lintas tinggi) untuk mengendalikan biaya sambil mempertahankan visibilitas. Dasbor menampilkan grafik waktu nyata tentang volume permintaan, latensi, biaya, dan tingkat kesalahan.
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 dibandingkan Logging Khusus
Anda dapat membangun sistem pencatatan jejak Anda sendiri, dan untuk beberapa kasus penggunaan, itulah pilihan yang tepat. Keunggulan LangSmith dibandingkan pencatatan khusus adalah: integrasi tanpa kode dengan LangChain, antarmuka khusus untuk menjelajahi jejak LLM (bukan dasbor Kibana/Grafana umum), dukungan bawaan untuk evaluasi dan perbandingan eksperimen, serta penghitungan jumlah token dan pelacakan biaya secara otomatis. Imbalannya adalah ketergantungan pada vendor dan biaya pada skala besar.
Pemeriksaan Singkat
Uji pemahaman Anda tentang pelacakan dengan LangSmith dari pelajaran ini.
Rangkuman Pelajaran
Dalam pelajaran ini, Anda mempelajari bahwa LangSmith memungkinkan pelacakan otomatis dari awal hingga akhir pada aplikasi LangChain dengan menetapkan tiga variabel lingkungan tanpa perubahan kode, dekorator @traceable memperluas pelacakan ke langkah-langkah non-LangChain seperti panggilan basis data dan prapemrosesan, serta perbandingan eksperimen memungkinkan Anda memvalidasi peningkatan pipeline terhadap kumpulan data pengujian sebelum penerapan. Selanjutnya, kita akan mempelajari Langfuse sebagai alternatif observabilitas yang tidak bergantung pada model.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pelacakan dengan LangSmith” gratis?
Ya — teks lengkap “Pelacakan dengan LangSmith” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Engineering Academy, upgrade ke CoddyKit PRO. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pelacakan dengan LangSmith”?
Tambahkan instrumentasi pelacakan LangSmith ke aplikasi LangChain Anda untuk merekam setiap langkah rantai, panggilan LLM, jumlah token, dan latensi dalam penjelajah jejak yang dapat ditelusuri. Kamu berlatih AI Engineering Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Engineering Academy?
Tidak diperlukan pengalaman sebelumnya. AI Engineering Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Pelacakan dengan LangSmith” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Engineering Academy ini?
Ya. Setiap pelajaran AI Engineering Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengapa Aplikasi LLM Sulit Di-debug
- Pelacakan dengan LangSmith
- Langfuse untuk Observabilitas yang Tidak Bergantung pada Model
- Peringatan untuk Latensi, Biaya, dan Penurunan Kualitas