AI Engineering Academy · पाठ

LangSmith के साथ ट्रेसिंग

हर चेन चरण, LLM कॉल, टोकन संख्या और विलंबता को खोज योग्य ट्रेस एक्सप्लोरर में दर्ज करने के लिए अपने LangChain अनुप्रयोग में LangSmith ट्रेसिंग जोड़ें।

पाठ 2, कुल 4 में से13 चरण

LangSmith के साथ ट्रेसिंग, CoddyKit पर AI Engineering Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह AI Engineering Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। AI Engineering Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

LangSmith क्या है?

LangSmith विशेष रूप से LLM अनुप्रयोगों के लिए बनाया गया निगरानी प्लेटफ़ॉर्म है। यह प्रत्येक LangChain रन — हर चेन चरण, LLM कॉल, टूल निष्पादन, पुनर्प्राप्ति और आउटपुट पार्सर — के ट्रेस अपने-आप कैप्चर करता है और उन्हें खोजे जा सकने वाले, पदानुक्रमित ट्रेस अन्वेषक में दिखाता है। आप ट्रेस को विलंबता, लागत, त्रुटि स्थिति या कस्टम मेटाडेटा के आधार पर फ़िल्टर कर सकते हैं और विफलताओं को डीबग करने के लिए किसी भी ट्रेस को फिर से चला सकते हैं।

# 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

बिना कोड बदले स्वचालित ट्रेसिंग

LangSmith की सबसे प्रभावशाली विशेषता यह है कि तीन पर्यावरण चर सेट करने के बाद हर LangChain संचालन अपने-आप ट्रेस किया जाता है और इसके लिए अतिरिक्त कोड की आवश्यकता नहीं होती। हर LCEL चेन, हर ChatOpenAI कॉल, हर पुनर्प्राप्तिकर्ता कॉल और हर टूल निष्पादन को इनपुट, आउटपुट, समय और टोकन संख्या के साथ कैप्चर किया जाता है। आप केवल एक पर्यावरण चर बदलकर LangSmith ट्रेसिंग को उत्पादन में लागू कर सकते हैं।

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 कार्यप्रवाहों की ट्रेसिंग

RAG अनुप्रयोगों के लिए LangSmith ट्रेस विशेष रूप से उपयोगी हैं, क्योंकि वे पूरी पुनर्प्राप्ति-फिर-निर्माण कार्यप्रणाली को कैप्चर करते हैं। आप देख सकते हैं: कौन-से दस्तावेज़ पुनर्प्राप्त किए गए, उनके समानता अंक क्या थे, प्रॉम्प्ट में संदर्भ को कैसे स्वरूपित किया गया, और LLM ने क्या बनाया। इससे तुरंत स्पष्ट हो जाता है कि गलत उत्तर खराब पुनर्प्राप्ति के कारण था या खराब निर्माण के कारण।

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?')

ट्रेस में मेटाडेटा जोड़ना

डिफ़ॉल्ट रूप से, LangSmith ट्रेस में प्रत्येक चरण के इनपुट और आउटपुट होते हैं। आप ट्रेस में कस्टम मेटाडेटा टैग जोड़ सकते हैं: उपयोगकर्ता ID, सत्र ID, सुविधा-ध्वज मान, A/B परीक्षण का प्रकार या ऐसा कोई अन्य संदर्भ जो उपयोगकर्ता इंटरफ़ेस में ट्रेस को फ़िल्टर और विश्लेषित करने में आपकी सहायता करे। उस अनुरोध से जुड़े हर ट्रेस पर दिखाई देने वाले मेटाडेटा को भेजने के लिए RunnableConfig का उपयोग करें।

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'

मैन्युअल स्पैन बनाना

जो कोड LangChain के माध्यम से नहीं चलता (कस्टम एपीआई कॉल, डेटाबेस पूछताछ, पूर्व-प्रसंस्करण चरण), उसके लिए आप LangSmith क्लाइंट का सीधे उपयोग करके मैन्युअल स्पैन बना सकते हैं। इससे आपके गैर-LangChain चरण उसी ट्रेस में कैप्चर हो जाते हैं जिसमें LangChain चरण हैं और आपको प्रत्येक अनुरोध के निष्पादन पथ की पूरी तस्वीर मिलती है।

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 में ट्रेस का मूल्यांकन

LangSmith में एक मूल्यांकन ढाँचा शामिल है, जिससे आप अपने ट्रेस डेटासेट पर मूल्यांकनकर्ता चला सकते हैं। आप ट्रेस किए गए उदाहरणों का एक समूह चुन सकते हैं, स्वचालित मूल्यांकनकर्ता चला सकते हैं (जिसमें शुद्धता और प्रासंगिकता के लिए LLM-आधारित निर्णायक भी शामिल हैं), और अलग-अलग कार्यप्रवाह संस्करणों के परिणामों की तुलना कर सकते हैं। इससे आपके उत्पादन ट्रेस अनुप्रयोग को बेहतर बनाने के लिए प्रतिक्रिया चक्र में बदल जाते हैं।

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')

ट्रेस से परीक्षण डेटासेट बनाना

LangSmith की सबसे शक्तिशाली सुविधाओं में से एक है उत्पादन ट्रेस से सीधे परीक्षण डेटासेट बनाना। जब आपको कोई रोचक ट्रेस (विफलता, सीमांत मामला या उत्कृष्ट उदाहरण) दिखाई दे, तो आप एक क्लिक से उसे डेटासेट में जोड़ सकते हैं। समय के साथ, कृत्रिम उदाहरणों के बजाय वास्तविक उपयोगकर्ता प्रश्नों से एक व्यापक प्रतिगमन परीक्षण श्रृंखला तैयार हो जाती है।

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')

ट्रेस को फ़िल्टर करना और खोजना

उत्पादन में आपके पास हज़ारों ट्रेस होंगे। LangSmith का उपयोगकर्ता इंटरफ़ेस और एपीआई उन्नत फ़िल्टरिंग और खोज का समर्थन करते हैं: ऐसी ट्रेस खोजें जिनकी विलंबता किसी सीमा से अधिक हो, जिनमें कोई विशिष्ट त्रुटि प्रकार हो, जो किसी विशिष्ट उपयोगकर्ता से संबंधित हों, जिनके आउटपुट में कोई विशिष्ट कीवर्ड हो, या जिनकी पूर्णता टोकन संख्या किसी सीमा से अधिक हो। इससे विशिष्ट विफलता श्रेणियों की जाँच करना या विशिष्ट उपयोगकर्ताओं के व्यवहार पर नज़र रखना व्यावहारिक हो जाता है।

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 में प्रयोगों की तुलना

LangSmith प्रयोगों की तुलना का समर्थन करता है: अपने कार्यप्रवाह के दो संस्करणों पर समान परीक्षण डेटासेट चलाएँ (जैसे, खंड आकार 500 बनाम खंड आकार 1000), और विलंबता, लागत तथा गुणवत्ता मेट्रिक्स के आधार पर उनकी अगल-बगल तुलना करें। इससे उत्पादन में लागू करने से पहले यह सत्यापित करना आसान हो जाता है कि कार्यप्रवाह में किया गया बदलाव सुधार है, प्रतिगमन नहीं।

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

LangSmith smith.langchain.com पर होस्टेड SaaS और स्वयं-होस्ट किए जाने वाले विकल्प के रूप में उपलब्ध है। उत्पादन में, महत्वपूर्ण निष्पादन पथ में विलंबता जोड़ने से बचने के लिए ट्रेसिंग को अतुल्यकालिक (गैर-अवरोधक) बनाया जा सकता है। लागत नियंत्रित करते हुए दृश्यता बनाए रखने के लिए आप ट्रेस का नमूना भी ले सकते हैं (जैसे, अधिक ट्रैफ़िक वाले उत्पादन में केवल 10% अनुरोधों को ट्रेस करना)। डैशबोर्ड अनुरोध मात्रा, विलंबता, लागत और त्रुटि दर के वास्तविक समय के ग्राफ़ दिखाता है।

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 बनाम कस्टम लॉग दर्ज करना

आप अपनी स्वयं की ट्रेस लॉगिंग प्रणाली बना सकते हैं, और कुछ उपयोग-स्थितियों में यह सही विकल्प भी है। कस्टम लॉगिंग की तुलना में LangSmith के लाभ हैं: LangChain के साथ शून्य-कोड एकीकरण, LLM ट्रेस की खोज के लिए विशेष रूप से बनाया गया यूआई (सामान्य Kibana/Grafana डैशबोर्ड नहीं), मूल्यांकन और प्रयोग की तुलना के लिए मूल समर्थन, तथा टोकन संख्या और लागत की स्वचालित निगरानी। इसका समझौता यह है कि बड़े स्तर पर यह विक्रेता-निर्भरता और लागत लाता है।

त्वरित जाँच

इस पाठ से LangSmith के साथ ट्रेसिंग की अपनी समझ जाँचें।

पाठ का पुनरावलोकन

इस पाठ में आपने सीखा: LangSmith बिना कोड में बदलाव किए तीन पर्यावरण चर निर्धारित करके LangChain अनुप्रयोगों की स्वचालित, आरंभ से अंत तक ट्रेसिंग सक्षम करता है; @traceable डेकोरेटर डेटाबेस कॉल और प्रीप्रोसेसिंग जैसे गैर-LangChain चरणों तक ट्रेसिंग का विस्तार करता है; और प्रयोग की तुलना आपको परिनियोजित करने से पहले परीक्षण डेटासेट के विरुद्ध पाइपलाइन में किए गए सुधारों को मान्य करने देती है। आगे हम Langfuse को मॉडल-निरपेक्ष ऑब्ज़र्वेबिलिटी के विकल्प के रूप में देखेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “LangSmith के साथ ट्रेसिंग” पाठ निःशुल्क है?

हाँ—“LangSmith के साथ ट्रेसिंग” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और AI Engineering Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। AI Engineering Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“LangSmith के साथ ट्रेसिंग” में मैं क्या सीखूँगा?

हर चेन चरण, LLM कॉल, टोकन संख्या और विलंबता को खोज योग्य ट्रेस एक्सप्लोरर में दर्ज करने के लिए अपने LangChain अनुप्रयोग में LangSmith ट्रेसिंग जोड़ें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ AI Engineering Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या AI Engineering Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर AI Engineering Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“LangSmith के साथ ट्रेसिंग” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस AI Engineering Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर AI Engineering Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. LLM ऐप्स में डीबग करना कठिन क्यों है
  2. LangSmith के साथ ट्रेसिंग
  3. मॉडल-निरपेक्ष निरीक्षण के लिए Langfuse
  4. विलंबता, लागत और गुणवत्ता में गिरावट पर चेतावनी
← AI Engineering Academy पर वापस जाएँ