← 기사 목록
日本語https://qiita.com/tags/llm/feed

LangSmith で医療 RAG を観測する — AI エンジニアの実装ノート Part 2

추출된 키워드

36
医療 RAG·5LangSmith·5Observability·4LLM アプリ·4LangChain·4説明可能性 (Explainability·3医療 AI·3Evals·3LLM-as-Judge·3ゴールデンデータ·3Monitoring·3Evaluators·3Datasets·3Tracing·3ハルシネーション·3生成AI·3Supabase pgvector·3text-embedding-004·3Gemini·3pgvector ベースの RAG パイプライン·3TypeScript·2OpenTelemetry·2GitHub Actions·2シャドー AI·2AI 監査要件·2@google/generative-ai·2Hit Rate·2traceable·2Runnable·2@langchain/google-genai·2$queryRawUnsafe·2Prisma·2P95 latency·2P95 レスポンス時間·2cosine 類似度·2MCP·1

원문

6,181
LangSmith で医療 RAG を観測する — AI エンジニアの実装ノート Part 2

なぜこれを書くか

現役の AI エンジニアで、現在は教育関係の仕事も並行している遠藤太一です。Part 1 (MCP 入門) に続き、自分が手掛けている 実プロダクト (医療系の Web 教材プラットフォーム) を題材に、新しい技術を消化していく実装ノートです。

Part 2 のテーマは LangSmith — LLM アプリの「観測 (Observability)」プラットフォームです。

なぜ LangSmith なのか

教材プラットフォームには既に pgvector ベースの RAG パイプライン が組み込まれています:

  • 学習者の掲示板投稿を Gemini
    text-embedding-004
    で 768 次元埋め込み
  • Supabase pgvector に保存
  • 検索クエリも埋め込んで cosine 類似度 top-K で類似投稿を返す
  • 「○○について話してる投稿を探す」検索バーで実利用

ここまでは動いています。ですが、こんな疑問が解けません:

  • 検索クエリの P95 レスポンス時間はどれくらい?
  • 「ハルシネーション」と打った時、本当に医療系の投稿が上位に来ている?
  • prompt を 1 文字変えたら、応答品質はどう変わる?
  • どの段階 (embedding 生成 / SQL クエリ / 後処理) で時間がかかってる?

これらは「ログを眺める」では追えない。専用の観測基盤が要ります。

それが LangSmith です。

LangSmith とは何か

LangChain 社が運営する LLM アプリの観測 + 評価プラットフォーム。3 つの軸:

1. Tracing (トレース)

LLM 呼び出しを 木構造で可視化。1 リクエストに対して:

  • 親 Run: 「掲示板検索」(全体)
  • 子 Run 1:
    generateEmbedding
    (Gemini API 呼び出し)
  • 子 Run 2: pgvector
    <=>
    検索 (SQL 実行)
  • 子 Run 3:
    anonymizePost
    (後処理)

各 Run について input / output / latency / token 数 / エラー が記録される。

2. Datasets + Evaluators

ゴールデンデータ (期待入出力) を Dataset として保存し、Evaluator で自動採点。プロンプトを変えるたびに「過去のクエリを全部再評価」して回帰を検出。

3. Monitoring

本番トラフィックの P95 latency / エラー率 / トークン使用量 / ユーザーフィードバック をダッシュボード化。

自分のプロダクトに統合する設計

Step 1: 既存の RAG パイプラインを LangChain でラップ

現状は素の

@google/generative-ai
+ Prisma の
$queryRawUnsafe
で書いていますが、これを
@langchain/google-genai
+ LangChain の
Runnable
で包みます。
import { ChatGoogleGenerativeAI, GoogleGenerativeAIEmbeddings } from "@langchain/google-genai";
import { Client } from "langsmith";
import { traceable } from "langsmith/traceable";

const embeddings = new GoogleGenerativeAIEmbeddings({ model: "text-embedding-004" });

export const searchBoard = traceable(
    async (query: string, userId: string) => {
        const vector = await embeddings.embedQuery(query);
        const results = await searchByVector(vector, userId);
        return results;
    },
    { name: "searchBoard", project_name: "medical-edu-rag" }
);

traceable
で wrap するだけで、
searchBoard
の呼び出しが全て LangSmith に記録されるようになります。

Step 2: 環境変数 3 つで起動

LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=ls__...
LANGCHAIN_PROJECT=medical-edu-rag

これだけ。コードに「ログを送る」処理は書きません。LangChain が自動でフックします。

Step 3: ダッシュボードで眺める

LangSmith Web UI で:

  • 1 リクエストあたり embedding 生成に 何 msかかっているか
  • 同じ意味のクエリでも「ハルシネーション」と「AI幻覚」で類似度がどう違うか
  • どのレッスン由来の投稿が頻繁に上位に来ているか (= 学習者の関心領域の可視化)

を見られるようになります。

なぜ LangSmith を入れる価値があるか

LLM プロダクトを案件として納品するとき、避けて通れないのが 「スコアリング / 評価指標策定 / 運用改善」 です。LangSmith なしだと、これらは雰囲気でしか語れません。「P95 を改善した」と言うには 計測のスクショ が要る。

LangSmith のダッシュボード画面は、プロダクトオーナーやステークホルダーに見せられる「動く実績」 として強力です。「Hit Rate を 0.62 → 0.81 に改善しました、ここが Before/After のグラフです」と即座にメトリクスを出せる状態にしておくと、改善提案の説得力が桁違いです。

医療領域での副次効果

LangSmith は AI の意思決定を観測可能にする = 「説明可能性 (Explainability)」を担保するという意味で、医療 AI に強く効きます。

電子カルテに AI 提案を組み込む際、規制当局や倫理委員会から:

「その提案が出た根拠は何ですか? 後から検証可能ですか?」

を必ず聞かれます。LangSmith のトレースは、「この LLM 出力は、これらの retrieval 結果と、このプロンプトテンプレートと、この context から生成された」 を完全に再現できるので、医療現場での AI 監査要件にも応えやすい。

シャドー AI の対極にある「透明な AI 運用」の基盤として、LangSmith は医療 IT で覚えておく価値があります。

次のステップ

Part 3 では本シリーズの集大成 Evals (評価ハーネス) に進みます:

  • LangSmith Dataset に ゴールデンデータを 30 件入れる
  • LLM-as-Judge で ハルシネーション率を自動採点
  • GitHub Actions で PR ごとに回帰検出

医療 AI で一番譲れない「答えてはいけないことを答えない」をどう数値で担保するかの記録になります。

学んだこと (現時点で)

  • LLM の「動く / 動かない」と「良い / 悪い」は別問題。観測なしでは後者が分からない
  • 観測は最初から入れた方が安い。「動いてから入れる」は罠
  • LangSmith は OpenTelemetry 互換ではないが、専門特化している分 LLM アプリでは圧倒的に強い
  • 無料枠 (5,000 traces / 月) で個人プロジェクトには十分

実装記録は次回。

タグ:

LangSmith
LangChain
LLM
RAG
Observability
生成AI
医療AI
TypeScript