LangSmith este platforma LangChain pentru observabilitate și evaluare. Primește trace-uri din LangChain și LangGraph, din wrapper-ele pentru SDK-urile OpenAI și Anthropic și din orice funcție decorată cu @traceable, deci nu e limitată la aplicațiile scrise cu LangChain.
Tracing-ul se activează cu LANGSMITH_TRACING=true și LANGSMITH_API_KEY. Destinația depinde de tipul workspace-ului: în workspace-urile bazate pe proiecte (și în LangSmith self-hosted) se setează LANGSMITH_PROJECT; în workspace-urile bazate pe agenți din LangSmith Cloud se folosesc LANGSMITH_AGENT_ID și LANGSMITH_AGENT_ENVIRONMENT. Documentația cere să nu combini cele două variante.
Pentru evaluare, LangSmith păstrează seturi de date cu exemple (inputs / outputs) și rulează experimente cu client.evaluate(). Din interfață poți selecta rulări sau fire de conversație și le adaugi într-un set de date cu Add to Dataset, ca să le reevaluezi la versiunile următoare ale aplicației.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
LANGSMITH_TRACING=true |
Activează trimiterea trace-urilor. |
LANGSMITH_API_KEY |
Cheia API LangSmith. |
LANGSMITH_PROJECT |
Proiectul de tracing, în workspace-urile bazate pe proiecte și în LangSmith self-hosted. |
LANGSMITH_AGENT_ID, LANGSMITH_AGENT_ENVIRONMENT |
Adresarea pe agent în workspace-urile bazate pe agenți; mediul este local, development, staging sau production. |
wrappers.wrap_openai(OpenAI()) |
Înregistrează automat apelurile clientului OpenAI. |
@traceable |
Decorator pentru funcțiile proprii, care apar ca pași în trace. |
Client().create_dataset() / create_examples() |
Creează un set de date și îi adaugă exemple. |
client.evaluate(target, data=..., evaluators=[...]) |
Rulează aplicația pe un set de date și aplică evaluatorii; aevaluate() este varianta asincronă. |
Exemple practice și scenarii reale
Exemplul 1: Tracing pentru clientul OpenAI
from openai import OpenAI
from langsmith.wrappers import wrap_openai
client = wrap_openai(OpenAI())
Exemplul 2: Set de date creat din cod
from langsmith import Client
client = Client()
dataset = client.create_dataset(dataset_name="Întrebări suport")
client.create_examples(
dataset_id=dataset.id,
examples=[
{"inputs": {"question": "Care e termenul de retur?"},
"outputs": {"answer": "14 zile"}},
],
)
Exemplul 3: Experiment cu un evaluator scris în cod
target primește inputs din setul de date; evaluatorul compară ieșirea cu reference_outputs.
def target(inputs: dict) -> dict:
return {"answer": asistent(inputs["question"])}
def contine_raspunsul(outputs: dict, reference_outputs: dict) -> bool:
return reference_outputs["answer"].lower() in outputs["answer"].lower()
rezultate = client.evaluate(
target,
data="Întrebări suport",
evaluators=[contine_raspunsul],
experiment_prefix="prompt-v2",
)
Greșeli frecvente și capcane
- Setezi și
LANGSMITH_PROJECT, și variabilele de agent. Documentația spune că trace-ul are atunci două destinații și SDK-ul nu alege; folosește doar varianta potrivită workspace-ului. - Trimiți trace-urile de dezvoltare în același proiect ca producția. Folosește proiecte sau medii separate, ca statisticile de producție să nu includă testele locale.
- Crezi că LangSmith funcționează doar cu LangChain. Wrapper-ele și
@traceableacoperă și codul scris direct pe SDK-urile furnizorilor.