LangSmith Essentials
> Begitu aplikasi LLM punya lebih dari satu step — retrieval, tool call, chained prompt — debugging hanya mengandalkan log saja sudah tidak cukup. LangSmith adalah platform observability dan evaluation (dari tim LangChain) yang dibuat khusus untuk tracing, testing, dan monitoring aplikasi LLM. Notebook ini membahas fungsinya dan bagaimana ia masuk ke workflow nyata.
Apa itu LangSmith?
LangSmith memberi visibility ke apa yang sebenarnya terjadi di dalam aplikasi LLM: setiap prompt yang dikirim, setiap response model, setiap tool call, dan setiap intermediate step di sebuah chain atau agent — semuanya ditangkap sebagai trace terstruktur yang bisa diperiksa setelahnya.
Secara prinsip framework-agnostic (kita bisa instrument raw API call), tapi integrasinya paling mulus dengan LangChain dan LangGraph, yang trace-nya ter-capture otomatis untuk chain atau graph apa pun yang dibangun dengan keduanya.
Kenapa logging biasa saja tidak cukup:
Kapabilitas Inti
1. Tracing Setiap run dari chain, agent, atau raw LLM call ditangkap sebagai trace — pohon span yang menunjukkan input, output, latency, dan token usage di tiap step. Untuk agent multi-step, ini berarti kita bisa melihat persis tool mana yang dipanggil, dengan argument apa, dan apa hasilnya, di setiap hop.
2. Evaluation Definisikan test dataset (pasangan input/expected-output) dan jalankan terhadap aplikasi kita untuk mengukur kualitas — pakai exact match, LLM-as-judge, atau custom scoring function. Ini mengubah pertanyaan "apakah perubahan prompt ini bikin lebih baik atau lebih buruk?" jadi sesuatu yang terukur, bukan sekadar feeling.
3. Monitoring Di production, lacak latency, error rate, token cost, dan feedback score dari waktu ke waktu, lalu set alert saat sebuah metric mulai drift — menangkap regresi dari perubahan versi model atau edit prompt sebelum sempat dilaporkan user.
4. Prompt/Dataset Management Versioning prompt, kumpulkan contoh kasus di mana model salah, dan ubah jadi regression test case — menutup loop antara "kami menemukan bug" dan "kami punya test yang mencegahnya terulang."
Contoh Praktis: Tracing + Evaluation
Aktifkan tracing (otomatis bekerja untuk kode LangChain/LangGraph begitu dikonfigurasi):
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "..."
os.environ["LANGCHAIN_PROJECT"] = "support-bot"
# call LangChain/LangGraph apa pun di bawah ini otomatis ter-trace
response = chain.invoke({"question": "How do I reset my password?"})
Jalankan evaluation terhadap dataset yang sudah dilabeli:
from langsmith import Client
from langsmith.evaluation import evaluate
client = Client()
def correctness(run, example) -> dict:
predicted = run.outputs["answer"]
expected = example.outputs["answer"]
score = llm_judge(predicted, expected) # misalnya call LLM-as-judge
return {"key": "correctness", "score": score}
results = evaluate(
lambda inputs: chain.invoke(inputs),
data="support-bot-eval-set", # dataset yang dibuat di LangSmith
evaluators=[correctness],
)
Ini menghasilkan report yang membandingkan output terhadap jawaban yang diharapkan — inilah yang membuat kita bisa bilang "perubahan prompt ini menaikkan akurasi dari 82% ke 89%," bukan sekadar "kayaknya lebih bagus."