mcpField
L
langsmith-trace

langsmith-trace

github.com/langchain-ai開発1.6k47 回インストール今日更新
リポジトリ

langsmith-trace について

LangSmith のトレース設定とデータ検索を扱う、開発者向けのスキルです。Python と JavaScript アプリの自動・手動トレースや、CLI によるトレースと実行記録の調査・エクスポートを説明します。

主な機能

  1. 01Python と JavaScript のトレース
  2. 02LangChain と LangGraph の自動トレース
  3. 03ラッパーによる手動トレース
  4. 04CLI での検索とフィルター
  5. 05トレースと実行記録のエクスポート

活用シーン

  1. 01LLM パイプラインのトレース設定
  2. 02デバッグ時のトレース階層確認
  3. 03遅延やエラーによるトレース絞り込み
  4. 04データセット用のトレース書き出し

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/langchain-ai/deepagentsjs --skill langsmith-trace

インストール後、Claude Code で/langsmith-traceを入力して読み込まれたか確認します。

詳細

主なトピックは、アプリケーションへの**トレースの追加**と、デバッグや分析のための**トレースのクエリ**です。Python と Javascript の実装の両方に対応しています。 環境変数
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

重要: LangSmith にクエリを実行したり、LangSmith とやり取りしたりする前に、必ず環境変数または .env ファイルで LANGSMITH_PROJECT を確認してください。これにより、関連するトレースとデータが含まれるプロジェクトを特定できます。LangSmith プロジェクトが見つからない場合は、最適な判断で適切なプロジェクトを特定してください。

CLI ツール

curl -sSL https://raw.githubusercontent.com/langchain-ai/langsmith-cli/main/scripts/install.sh | sh

<trace_langchain_oss> LangChain/LangGraph アプリでは、トレースは自動的に行われます。環境変数を設定するだけです。

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

オプションの変数:

  • LANGSMITH_PROJECT - プロジェクト名を指定します(デフォルトは「default」です)
  • LANGCHAIN_CALLBACKS_BACKGROUND=false - 関数の終了前にトレースを完了させるため、サーバーレス環境で使用します(Python) </trace_langchain_oss>

<trace_other_frameworks> LangChain 以外のアプリで、フレームワークがネイティブの OpenTelemetry に対応している場合は、LangSmith の OpenTelemetry 統合を使用してください。

アプリがフレームワークを使用していない場合、または自動 OTel 対応のないフレームワークを使用している場合は、traceable デコレーター/ラッパーを使い、LLM クライアントをラップしてください。

@traceable デコレーターを使用し、wrap_openai() で自動トレースを行います。 ```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

Nested tracing example

@traceable def rag_pipeline(question: str) -> str: docs = retrieve_docs(question) return generate_answer(question, docs)

@traceable(name="retrieve_docs") def retrieve_docs(query: str) -> list[str]: return docs

@traceable(name="generate_answer") def generate_answer(question: str, docs: list[str]) -> str: return client.chat.completions.create(...)

</python>

<typescript>
traceable() ラッパーを使用し、wrapOpenAI() で自動トレースを行います。
```typescript
import { traceable } from "langsmith/traceable";
import { wrapOpenAI } from "langsmith/wrappers";
import OpenAI from "openai";

const client = wrapOpenAI(new OpenAI());

const myLlmPipeline = traceable(async (question: string): Promise<string> => {
  const resp = await client.chat.completions.create({
    model: "gpt-4o-mini",
    messages: [{ role: "user", content: question }],
  });
  return resp.choices[0].message.content || "";
}, { name: "my_llm_pipeline" });

// Nested tracing example
const retrieveDocs = traceable(async (query: string): Promise<string[]> => {
  return docs;
}, { name: "retrieve_docs" });

const generateAnswer = traceable(async (question: string, docs: string[]): Promise<string> => {
  const resp = await client.chat.completions.create({
    model: "gpt-4o-mini",
    messages: [{ role: "user", content: `${question}\nContext: ${docs.join("\n")}` }],
  });
  return resp.choices[0].message.content || "";
}, { name: "generate_answer" });

const ragPipeline = traceable(async (question: string): Promise<string> => {
  const docs = await retrieveDocs(question);
  return await generateAnswer(question, docs);
}, { name: "rag_pipeline" });

ベストプラクティス:

  • LangSmith で表示したいすべてのネストされた関数に traceable を適用する
  • ラップしたクライアントはすべての呼び出しを自動的にトレースします — wrap_openai()/wrapOpenAI() はすべての LLM 呼び出しを記録します
  • 絞り込みやすいようにトレースに名前を付ける
  • 検索しやすいようにメタデータを追加する </trace_other_frameworks>

<traces_vs_runs> トレースデータのクエリには langsmith CLI を使用します。

この違いを理解することは非常に重要です。

  • トレース = 完全な実行ツリー(ルート実行+すべての子実行)。トレースは、すべての LLM 呼び出し、ツール呼び出し、ネストされた操作を含む、エージェントの一連の実行を表します。
  • 実行 = ツリー内の単一ノード(1 回の LLM 呼び出し、1 回のツール呼び出しなど)。

通常は、まずトレースをクエリしてください。トレースには完全なコンテキストが含まれ、軌跡の分析やデータセットの生成に必要な階層構造が保持されます。 </traces_vs_runs>

<command_structure> 一貫した動作をするコマンドグループが 2 つあります。

langsmith
├── trace (operations on trace trees - USE THIS FIRST)
│   ├── list    - List traces (filters apply to root run)
│   ├── get     - Get single trace with full hierarchy
│   └── export  - Export traces to JSONL files (one file per trace)
│
├── run (operations on individual runs - for specific analysis)
│   ├── list    - List runs (flat, filters apply to any run)
│   ├── get     - Get single run
│   └── export  - Export runs to single JSONL file (flat)
│
├── dataset (dataset operations)
│   ├── list    - List datasets
│   ├── get     - Get dataset details
│   ├── create  - Create empty dataset
│   ├── delete  - Delete dataset
│   ├── export  - Export dataset to file
│   └── upload  - Upload local JSON as dataset
│
├── example (example operations)
│   ├── list    - List examples in a dataset
│   ├── create  - Add example to a dataset
│   └── delete  - Delete an example
│
├── evaluator (evaluator operations)
│   ├── list    - List evaluators
│   ├── upload  - Upload evaluator
│   └── delete  - Delete evaluator
│
├── experiment (experiment operations)
│   ├── list    - List experiments
│   └── get     - Get experiment results
│
├── thread (thread operations)
│   ├── list    - List conversation threads
│   └── get     - Get thread details
│
└── project (project operations)
    └── list    - List tracing projects

主な違い:

traces *runs *
フィルターの適用対象ルート実行のみ条件に一致するすべての実行
--run-type使用不可使用可能
戻り値完全な階層構造フラットなリスト
エクスポート出力ディレクトリ(トレースごとに 1 ファイル)単一ファイル
</command_structure>

<querying_traces> langsmith CLI を使用してトレースをクエリします。コマンドは言語に依存しません。

# List recent traces (most common operation)
langsmith trace list --limit 10 --project my-project

# List traces with metadata (timing, tokens, costs)
langsmith trace list --limit 10 --include-metadata

# Filter traces by time
langsmith trace list --last-n-minutes 60
langsmith trace list --since 2025-01-20T10:00:00Z

# Get specific trace with full hierarchy
langsmith trace get <trace-id>

# List traces and show hierarchy inline
langsmith trace list --limit 5 --show-hierarchy

# Export traces to JSONL (one file per trace, includes all runs)
langsmith trace export ./traces --limit 20 --full

# Filter traces by performance
langsmith trace list --min-latency 5.0 --limit 10    # Slow traces (>= 5s)
langsmith trace list --error --last-n-minutes 60     # Failed traces

# List specific run types (flat list)
langsmith run list --run-type llm --limit 20

</querying_traces>

すべてのコマンドで次のフィルターを使用できます(すべて AND 条件で適用されます)。

基本フィルター:

  • --trace-ids abc,def - 特定のトレースに絞り込みます
  • --limit N - 結果の最大数
  • --project NAME - プロジェクト名
  • --last-n-minutes N - 時間によるフィルター
  • --since TIMESTAMP - 時間によるフィルター(ISO 形式)
  • --error / --no-error - エラーの有無
  • --name PATTERN - 名前に含まれる文字列(大文字と小文字を区別しません)

パフォーマンスフィルター:

  • --min-latency SECONDS - 最小レイテンシ(例:5 は 5 秒以上)
  • --max-latency SECONDS - 最大レイテンシ
  • --min-tokens N - 最小合計トークン数
  • --tags tag1,tag2 - これらのタグのいずれかを含む

高度なフィルター:

  • --filter QUERY - 複雑な条件(フィードバック、メタデータなど)に対応する LangSmith の生フィルタークエリ
# Filter traces by feedback score using raw LangSmith query
langsmith trace list --filter 'and(eq(feedback_key, "correctness"), gte(feedback_score, 0.8))'

<export_format> エクスポートでは、次のフィールドを含む .jsonl ファイルが作成されます(1 行につき 1 実行)。

{"run_id": "...", "trace_id": "...", "name": "...", "run_type": "...", "parent_run_id": "...", "inputs": {...}, "outputs": {...}}

入力/出力を含めるには --include-io または --full を使用してください(データセットの生成に必要です)。 </export_format>

  • トレースから始めましょう — トレースには、軌跡やデータセットの生成に必要なコンテキストがすべて含まれています
  • データセット用の一括データには traces export --full を使用します
  • 別のプロジェクトのデータが混在しないよう、必ず --project を指定します
  • 一時的なエクスポートには /tmp を使用します
  • パフォーマンスやコストの分析には --include-metadata を含めます
  • ファイルを結合します:cat ./traces/*.jsonl > all.jsonl

コメント