用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/majiayu000/claude-skill-registry --skill langsmith-testing命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
LLM token logprobs and calibration. Per-decision confidence, ECE, Brier, reliability diagrams, low-confidence triage.
Analyze LLM token logprobs and calibration. Use for per-decision confidence, ECE, Brier scores, reliability diagrams, and low-confidence triage.
回顾最近 N 天的 Claude Code 使用记录——扫描原始会话数据,按主题分组汇总"我都做了什么",并从个人操作系统视角输出模式、风险与增删建议。当用户说 /recap、"看看我这几天做了什么"、"回顾一下我最近的会话"、"这两天我用 claude 干了啥"、"活动回顾" 时使用。
基于 SOC 职业分类
正在显示 SKILL.md
| name | langsmith-testing |
| description | LangSmith trace validation for RAG observability - every query must be traced |
CRITICAL for RAG: Every RAG query MUST be traced in LangSmith for observability. Silent failures (bad retrieval, hallucinations) are only detectable through tracing.
Activate when:
# Python
pip install langsmith langchain
# Environment variables
export LANGSMITH_API_KEY="your-api-key"
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_PROJECT="rag-demo"
from langchain.callbacks import LangChainTracer
from langsmith import Client
# Initialize client
client = Client(api_key=os.environ["LANGSMITH_API_KEY"])
# Create tracer
tracer = LangChainTracer(project_name="rag-demo")
# Use in chain
chain.invoke(query, config={"callbacks": [tracer]})
from langchain_core.tracers.context import tracing_v2_enabled
with tracing_v2_enabled(project_name="rag-demo"):
# All operations automatically traced
result = rag_chain.invoke(query)
from langchain.callbacks import LangChainTracer
tracer = LangChainTracer(
project_name="rag-demo",
example_id="example-123" # Optional: link to dataset
)
result = chain.invoke(query, config={"callbacks": [tracer]})
from langchain_core.tracers.context import tracing_v2_enabled
with tracing_v2_enabled(
project_name="rag-demo",
metadata={
"user_id": "user-123",
"session_id": "session-456",
"environment": "production"
}
):
result = chain.invoke(query)
Collected automatically:
Example trace data:
{
"run_id": "abc-123",
"name": "RAGChain",
"latency_ms": 1250,
"total_tokens": 850,
"prompt_tokens": 600,
"completion_tokens": 250,
"steps": [
{"name": "embedder", "latency_ms": 50},
{"name": "retriever", "latency_ms": 200},
{"name": "generator", "latency_ms": 1000}
]
}
from langsmith import Client
client = Client()
# After getting RAG result
client.create_feedback(
run_id=run_id,
key="faithfulness",
score=0.85, # 0-1 scale
comment="Answer is mostly accurate to context"
)
client.create_feedback(
run_id=run_id,
key="relevance",
score=0.92, # 0-1 scale
comment="Retrieved docs are highly relevant"
)
See: rag-accuracy-SKILL.md for metric calculations
from langsmith import Client
client = Client()
# Get specific run
run = client.read_run(run_id="abc-123")
# Validate trace
assert run.latency_ms < 2000, "Query too slow"
assert run.error is None, "Query failed"
assert len(run.child_runs) >= 3, "Missing pipeline steps"
from langsmith import Client
from datetime import datetime, timedelta
client = Client()
# Get recent runs
runs = client.list_runs(
project_name="rag-demo",
start_time=datetime.now() - timedelta(hours=1)
)
# Aggregate metrics
avg_latency = sum(r.latency_ms for r in runs) / len(runs)
error_rate = sum(1 for r in runs if r.error) / len(runs)
print(f"Avg latency: {avg_latency}ms")
print(f"Error rate: {error_rate:.2%}")
from langsmith import Client
client = Client()
# Run A: Original prompt
with tracing_v2_enabled(
project_name="rag-demo",
metadata={"variant": "prompt-v1"}
):
result_a = chain_v1.invoke(query)
# Run B: New prompt
with tracing_v2_enabled(
project_name="rag-demo",
metadata={"variant": "prompt-v2"}
):
result_b = chain_v2.invoke(query)
# Compare in LangSmith UI
# Filter by metadata.variant to see performance difference
from langsmith import Client
client = Client()
# Get runs for each variant
runs_v1 = client.list_runs(
project_name="rag-demo",
filter='metadata.variant == "prompt-v1"'
)
runs_v2 = client.list_runs(
project_name="rag-demo",
filter='metadata.variant == "prompt-v2"'
)
# Compare metrics
v1_latency = sum(r.latency_ms for r in runs_v1) / len(runs_v1)
v2_latency = sum(r.latency_ms for r in runs_v2) / len(runs_v2)
print(f"V1 avg latency: {v1_latency}ms")
print(f"V2 avg latency: {v2_latency}ms")
print(f"Improvement: {((v1_latency - v2_latency) / v1_latency) * 100:.1f}%")
from langsmith import Client
client = Client()
# Create evaluation dataset
dataset = client.create_dataset("rag-eval-v1")
# Add examples
client.create_examples(
dataset_id=dataset.id,
inputs=[
{"query": "What is RAG?"},
{"query": "How does vector search work?"}
],
outputs=[
{"expected_answer": "RAG is Retrieval Augmented Generation..."},
{"expected_answer": "Vector search uses embeddings..."}
]
)
from langsmith import Client
from langsmith.evaluation import evaluate
client = Client()
# Define evaluator
def faithfulness_evaluator(run, example):
# Calculate faithfulness score
score = calculate_faithfulness(
run.outputs["answer"],
run.outputs["source_documents"]
)
return {"score": score}
# Run evaluation
results = evaluate(
lambda inputs: rag_chain.invoke(inputs["query"]),
data="rag-eval-v1",
evaluators=[faithfulness_evaluator],
project_name="rag-eval-results"
)
print(f"Avg faithfulness: {results['aggregate']['faithfulness']['mean']}")
from langsmith import Client
client = Client()
# Find runs with no retrieved documents
failed_runs = client.list_runs(
project_name="rag-demo",
filter='outputs.source_documents.length == 0'
)
for run in failed_runs:
print(f"Query: {run.inputs['query']}")
print(f"Reason: No relevant documents found")
from langsmith import Client
client = Client()
# Find slow queries (>2s)
slow_runs = client.list_runs(
project_name="rag-demo",
filter='latency_ms > 2000'
)
for run in slow_runs:
print(f"Query: {run.inputs['query']}")
print(f"Latency: {run.latency_ms}ms")
# Identify bottleneck
for child in run.child_runs:
if child.latency_ms > 1000:
print(f" Bottleneck: {child.name} ({child.latency_ms}ms)")
# Enable tracing in production
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "rag-production"
# Sample rate for high-volume apps (optional)
os.environ["LANGCHAIN_TRACING_SAMPLING_RATE"] = "0.1" # 10% of requests
# Bad: Generic names
project_name = "test"
# Good: Environment + purpose
project_name = f"rag-{environment}-{feature}" # "rag-prod-hybrid-search"
with tracing_v2_enabled(
project_name="rag-demo",
metadata={
"user_tier": "premium",
"retriever_type": "hybrid",
"llm_model": "claude-3-sonnet",
"chunk_size": 512
}
):
result = chain.invoke(query)
Daily checks:
Weekly checks:
User Query
↓
LangSmith Tracing (THIS SKILL)
↓
RAG Pipeline Execution
↓
Trace Collection (automatic)
↓
Metrics Calculation (rag-accuracy-SKILL.md)
↓
Feedback to LangSmith
↓
Dashboard Analysis
| Skill | Purpose |
|---|---|
rag-accuracy-SKILL.md | Calculate faithfulness, relevance scores |
e2e-testing-SKILL.md | E2E tests with LangSmith assertions |
llm-integration-SKILL.md | LLM provider switching (affects traces) |
Check:
LANGCHAIN_TRACING_V2=true set?LANGSMITH_API_KEY valid?Solution:
import os
print(os.environ.get("LANGCHAIN_TRACING_V2")) # Should be "true"
print(os.environ.get("LANGSMITH_API_KEY")) # Should be set
Check:
Solution:
# Disable tracing for testing
os.environ["LANGCHAIN_TRACING_V2"] = "false"
# If latency drops → LangSmith network issue
# If latency same → RAG pipeline issue
import os
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain_core.tracers.context import tracing_v2_enabled
from langsmith import Client
# Setup
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "rag-demo"
# Build RAG chain
embeddings = OpenAIEmbeddings()
vector_store = FAISS.load_local("./index", embeddings)
retriever = vector_store.as_retriever(search_kwargs={"k": 5})
llm = ChatOpenAI(model="gpt-4", temperature=0)
chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=retriever,
return_source_documents=True
)
# Query with tracing
query = "What is retrieval augmented generation?"
with tracing_v2_enabled(
project_name="rag-demo",
metadata={"environment": "demo"}
) as cb:
result = chain.invoke(query)
run_id = cb.run_id
# Add feedback
client = Client()
client.create_feedback(
run_id=run_id,
key="faithfulness",
score=0.9,
comment="Accurate answer"
)
print(f"Answer: {result['result']}")
print(f"Trace: https://smith.langchain.com/public/{run_id}")
Last Updated: 2025-12-04 Version: 1.0 Priority: CRITICAL (Auto-loads for all RAG queries)