🧑‍✈️

LangSmithの概要

2025/02/10に公開

LangSmith(ラングスミス)は、大規模言語モデル(LLM)を活用したアプリケーション開発全工程を支援するオールインワンのプラットフォームです。LLMを使ったアプリケーションでは、従来のソフトウェア開発とは異なり、モデル出力の非決定性やユーザー入力の多様性によって予期しない結果や品質のばらつきが生じることがあります。
これに対応するため、LangSmithは以下の機能を統合的に提供しています。

  • デバッグ・トレース管理
    アプリケーション内の各処理(LLMへの問い合わせ、処理ステップなど)の実行履歴を詳細に記録します。入力や出力、実行時間、消費トークン数、API利用コストなどをツリー構造で可視化し、問題箇所の特定と改善を支援します。

  • 評価・テスト機能
    モデルの応答品質を定量的(スコアや類似度計算など)および定性的(人間によるフィードバック)に評価できる仕組みを提供。評価用データセットの作成、事前定義の自動評価、カスタム評価関数の実装が可能なため、プロトタイピングから本番運用まで一貫した品質管理が行えます。

  • プロンプトエンジニアリング支援
    LangSmith Hubを利用することで、プロンプトのバージョン管理やコメント共有が実現され、エンジニアだけでなく他部門とも協力してプロンプトの最適化が可能です。また、Playground機能により対話的にプロンプトやLLMの挙動を試行しながら調整できます。

  • モニタリングとアラート
    本番環境においてリクエストレート、エラー率、応答遅延、トークン使用量、APIコストなどの各種メトリクスをダッシュボード上でリアルタイムに監視し、異常発生時にはアラート通知が行われます。また、ユーザからのフィードバックをログと連動させることで、運用時の品質維持に寄与します。


技術的な仕組み・アーキテクチャ

LangSmithはマイクロサービス指向の設計を採用しており、以下の主要コンポーネントで構成されています。

  1. フロントエンド
    Web UIの配信およびAPIリクエストのルーティングを担当するNginxベースのサービスです。ユーザーや外部からのアクセスのゲートウェイとして機能します。

  2. バックエンド
    メインのAPIロジックを実装し、認証、ビジネスロジック、トレースデータの整形などを行います。

  3. プラットフォームバックエンド
    認証認可や高頻度の内部処理を担い、全体のパフォーマンス向上に寄与します。

  4. プレイグラウンド
    ユーザーが対話的にLLMへの問い合わせを行える環境を提供し、外部LLM APIへのリクエスト転送やカスタムモデルへの接続を担当します。

  5. キューサービス
    大量のトレースやフィードバックデータを非同期的に蓄積し、順次データベースへ書き込むことで、スループットの平滑化や一時的な接続不良時のリトライ処理を実現しています。

また、データ保存には以下のストアが用途に応じて利用されています。

  • ClickHouse
    膨大なログデータに対して高速な集計・分析を可能にするカラム指向データベース。

  • PostgreSQL
    ユーザー情報、設定、プロジェクト定義など、トランザクション性が要求されるデータの管理に用いられます。

  • Redis
    インメモリキャッシュおよびキューのバックエンドとして、高頻度アクセスや一時データの処理効率を向上させる役割を担います。

システム全体はコンテナ化され、Kubernetes上でのデプロイが推奨されており、エンタープライズ向けにはオンプレミスでのセルフホスト運用も可能です。これにより、機密情報の取り扱いや厳格なセキュリティ要件にも柔軟に対応できます。


競合ツールとの比較

LangSmithは、LLMOps(LLM運用)ツールとして次のような特徴があります。

  • 統合プラットフォームとしての一貫性
    単なるログビューアや評価スクリプト集に留まらず、トレース管理、評価・テスト、プロンプト管理、モニタリング、フィードバック収集をワンストップで提供します。

  • 公式エコシステムとの連携
    LangChainの開発チームによって提供されるため、LangChainとのシームレスな統合が可能で、公式サポートを受けやすいという強みがあります。

  • ライセンスとホスティングの選択肢
    LangSmithは商用のクラウドサービス(セルフホストも可能)として提供される一方、オープンソースの代替ツール(例:LangFuse)は無償で自己ホストが可能です。プロジェクトのコストやデータ管理要件に応じて、どちらを採用するか検討されます。

なお、Helicone、OpenAI Evals、Arize、Weights & Biasesなど、他のLLM監視・評価ツールも存在しますが、LangSmithはその統合性と使い勝手の良さで差別化されています。


導入事例・ユースケース

LangSmithは大企業から中小規模のチーム、個人開発者まで幅広く利用されています。具体例としては:

  • エンタープライズ企業での採用
    Rakuten、Elastic社、Moody’s、Retoolなどの大手企業で採用され、LLMを活用した新規プロダクトの迅速な開発と品質向上に貢献しています。たとえば、Elastic社では「LangChainとLangSmithがなければ製品ローンチは不可能だった」といった評価がされています。

  • 中小チーム・個人開発者での利用
    環境構築がシンプルで、短時間でプロトタイピングからサービスリリースが可能です。チャットボットの動作ログの可視化や自動評価機能により、バグ修正や品質改善が迅速に行えます。

  • 具体的なユースケースシナリオ

    • チャットボットの品質管理:対話ログを収集し、特定の評価ルールに基づいて問題のある応答を自動でマーキングすることで、ユーザー体験の向上と重大なミスの未然防止を実現。
    • 生成コンテンツの検証:LLMが生成した文章の正確性や重要項目の有無を自動評価し、品質保証の工数を削減。
    • 継続的なモデル改善:A/Bテストやリグレッションテストを実施し、新旧モデルの出力を定量的に比較・評価することで、モデル更新時の品質変動を管理。

使い方(チュートリアル)

1. 必要なパッケージのインストール

pip install -U langsmith python-dotenv langchain-openai

2. 環境変数の設定

.envファイルを作成し、以下の環境変数を設定:

LANGSMITH_API_KEY=ls_your_key_here  # https://smith.langchain.com から取得
OPENAI_API_KEY=sk_your_key_here     # https://platform.openai.com/api-keys から取得
LANGSMITH_TRACING=true

プロジェクト構成

.
├── .env                  # 環境変数設定
├── .env.template         # 環境変数テンプレート
└── langsmith_tutorial.py # メイン実装

実装例

1. LangChainとの統合

最新のLangChainでは、パイプライン形式でチェーンを構築します:

from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI

# プロンプトの定義
prompt = PromptTemplate.from_template("Hello, {name}!")

# LLMの設定
llm = ChatOpenAI(model_name="gpt-4o", temperature=0.7)

# チェーンの構築
chain = prompt | llm | StrOutputParser()

# 実行
result = chain.invoke({"name": "LangSmith"})
print("LangChain Example Result:", result)

2. OpenAI APIの利用

トレース機能を使用してOpenAI APIを直接呼び出す例:

import openai
from langsmith import traceable

@traceable
def openai_example(user_input: str):
    client = openai.OpenAI()
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": user_input}]
    )
    return response.choices[0].message.content

result = openai_example("こんにちは、LangSmithとは何ですか?")
print("OpenAI Example Result:", result)

3. プロジェクト名とタグの設定

import os
from langsmith import trace

# プロジェクト名の設定
os.environ["LANGCHAIN_PROJECT"] = "tutorial-project"

# タグを付けた実行
with trace("tutorial-run", tags=["tutorial", "test"]):
    # コードの実行
    pass

全体コード

import os
from dotenv import load_dotenv
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
import openai
from langsmith import traceable, trace

# .envファイルから環境変数を読み込む
load_dotenv()

# LangSmithプロジェクト名を設定
os.environ["LANGCHAIN_PROJECT"] = "tutorial-project"

# 必要な環境変数の確認
required_env_vars = {
    "LANGSMITH_API_KEY": "LangSmith APIキー",
    "OPENAI_API_KEY": "OpenAI APIキー",
}

missing_vars = [var for var, name in required_env_vars.items() if not os.getenv(var)]
if missing_vars:
    print("以下の環境変数が設定されていません:")
    for var in missing_vars:
        print(f"- {var} ({required_env_vars[var]})")
    print("\n.envファイルを作成し、必要なAPIキーを設定してください。")
    print("参考: .env.templateファイル")
    exit(1)

# LangChainとの統合サンプル
def langchain_example():
    prompt = PromptTemplate.from_template("Hello, {name}!")
    llm = ChatOpenAI(model_name="gpt-4o", temperature=0.7)
    chain = prompt | llm | StrOutputParser()

    result = chain.invoke({"name": "LangSmith"})
    print("LangChain Example Result:", result)

# OpenAIクライアントを直接使用するサンプル
@traceable
def openai_example(user_input: str):
    client = openai.OpenAI()
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": user_input}]
    )
    return response.choices[0].message.content

def main():
    print("LangSmith Tutorial")
    print("-----------------")
    print("プロジェクト名:", os.getenv("LANGCHAIN_PROJECT"))

    # APIキーが設定されているか確認
    if "LANGSMITH_API_KEY" not in os.environ:
        print("Warning: LANGSMITH_API_KEY is not set")
        return

    try:
        with trace("tutorial-run", tags=["tutorial", "test"]):
            # LangChainサンプルの実行
            print("\nRunning LangChain example...")
            langchain_example()

            # OpenAIサンプルの実行
            print("\nRunning OpenAI example...")
            result = openai_example("こんにちは、LangSmithとは何ですか?")
            print("OpenAI Example Result:", result)

    except Exception as e:
        print(f"Error occurred: {str(e)}")

if __name__ == "__main__":
    main()

実行方法

python langsmith_tutorial.py

上記コマンドを実行すると、以下の処理が行われます:

  1. 環境変数の読み込みと検証
  2. LangChainを使用した例の実行
  3. OpenAI APIを直接使用した例の実行
  4. トレース情報のLangSmithへの送信 等

トレースの確認

  1. https://smith.langchain.com にアクセス
  2. 「Observability」タブを選択
  3. プロジェクト「tutorial-project」のトレースが表示

各トレースで確認できる情報:

  • 実行時間
  • 入力/出力の内容
  • トークン使用量とコスト
  • エラー(発生した場合)

Web UIでの検証と評価機能の活用

送信されたトレースは、LangSmithのダッシュボード上の「Runs」画面で確認できます。また、UI上でDatasetsを作成し、入力と理想的な回答例のペアを登録することで、内蔵の評価関数やカスタム評価関数を用いた品質チェックが可能です。


最新のアップデートと今後の展望

  • サービス開始と成長
    2023年7月にクローズドベータ版公開、2024年2月に一般提供(GA)が開始されました。発表時点では、数万件のサインアップ、月間数千のチーム利用、単月で数千万のトレースログが記録されるなど、急速な成長を遂げています。

  • 資金調達とエンタープライズ展開
    2024年2月にセコイア・キャピタル主導のシリーズA資金調達を実施。これにより、インフラ投資および機能拡充が進むとともに、Microsoft Azure Marketplaceでの購入・デプロイが可能となり、Azure利用企業にとっての導入障壁が低減されています.

  • 開発者ワークフローとの統合
    PytestやJest/Vitestなどの一般的なテストフレームワークとの統合プラグインがリリースされ、CIパイプラインに組み込むことでLLM評価や品質管理がより手軽に実施できるようになりました。

  • 今後の展望
    LLMOps分野全体の進化に伴い、評価機能の高度化、他ツールとの連携、オンプレミス版のさらなる強化が期待されます。また、ガバナンス、出典追跡、リアルタイムメトリクス分析など、ユーザコミュニティからの要望に応じた機能追加が進む見込みです。


参考リンク

Discussion