Use this skill for ANY LangSmith/LangChain observability question. Covers two topics: (1) Adding tracing to your application (LangChain/LangGraph or vanilla Python/TS with @traceable), and (2) Querying traces for debugging, analyzing execution flow, and exporting trace data.
Two main topics: adding tracing to your application, and querying traces for debugging and analysis.
LANGSMITH_API_KEY=lsv2_pt_your_api_key_here # Required
LANGSMITH_PROJECT=your-project-name # Optional: default project
LANGSMITH_WORKSPACE_ID=your-workspace-id # Optional: for org-scoped keys
pip install langsmith click rich python-dotenv
Just set environment variables — tracing is automatic:
export LANGSMITH_TRACING=true
export LANGSMITH_API_KEY=<your-api-key>
export OPENAI_API_KEY=<your-openai-api-key> # or your LLM provider's key
Optional variables:
LANGSMITH_PROJECT - specify project name (defaults to "default")LANGCHAIN_CALLBACKS_BACKGROUND=false - use for serverless to ensure traces complete before function exitCheck the codebase first: If using OpenTelemetry, prefer the OTel integration (https://docs.langchain.com/langsmith/trace-with-opentelemetry). For Vercel AI SDK, LlamaIndex, Instructor, DSPy, or LiteLLM, see native integrations at https://docs.langchain.com/langsmith/integrations.
If not using an integration, use the @traceable decorator and wrap your LLM client:
Python:
from langsmith import traceable
from langsmith.wrappers import wrap_openai
from openai import OpenAI
client = wrap_openai(OpenAI())
@traceable
def my_llm_pipeline(question: str) -> str:
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": question}],
)
return resp.choices[0].message.content
Traces automatically appear in your LangSmith workspace.
@traceable to all nested functions you want visible in LangSmith. Only decorated functions appear as separate spans in the trace hierarchy.wrap_openai() automatically records every LLM call without additional decorators.@traceable(name="retrieve_docs") or traceable(myFunc, { name: "retrieve_docs" })@traceable(metadata={"user_id": "123", "feature": "chat"})# Example: nested tracing
@traceable
def rag_pipeline(question: str) -> str:
docs = retrieve_docs(question) # traced if @traceable applied
return generate_answer(question, docs) # traced if @traceable applied
@traceable(name="retrieve_docs")
def retrieve_docs(query: str) -> list[str]:
# retrieval logic
return docs
@traceable(name="generate_answer")
def generate_answer(question: str, docs: list[str]) -> str:
# LLM calls via wrapped client are auto-traced
return client.chat.completions.create(...)
Use the scripts below to query, analyze, and export traces from LangSmith.
Navigate to skills/langsmith-trace/scripts/ to run commands.
# Show recent traces
python query_traces.py recent --limit 10 --project my-project
# Show with metadata (timing, tokens, costs)
python query_traces.py recent --limit 10 --include-metadata
# Filter by time
python query_traces.py recent --last-n-minutes 60
python query_traces.py recent --since 2025-01-20T10:00:00Z
# Get specific trace details
python query_traces.py trace <trace-id> --show-hierarchy
# Export traces to directory (recommended for bulk collection)
python query_traces.py export ./traces --limit 50 --include-metadata
python query_traces.py export ./traces --limit 20 --include-io # With inputs/outputs
python query_traces.py export ./traces --limit 20 --full # Everything
# Filter by run type
python query_traces.py export ./traces --run-type tool # Only tool calls
python query_traces.py export ./traces --run-type llm # Only LLM calls
# Search by name pattern
python query_traces.py search "agent" --project my-project
# Output as JSON
python query_traces.py recent --format json --limit 5
recent - List recent traces (--limit, --project, --last-n-minutes, --include-metadata, --format)
trace <id> - Get specific trace (--show-hierarchy, --include-metadata, --output)
export <dir> - Bulk export to directory (--limit, --include-metadata, --include-io, --full, --run-type, --max-concurrent)
search <pattern> - Find runs by name (--limit, --last-n-minutes)
export for bulk data, always specify --project, use /tmp for temp files--include-metadata for performance/cost analysis--max-concurrent 10 for large exports--format json with jq for analysisSearch for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer