LangChain

LangChainとは

LangChain は、LLMを中心にした処理の流れを組み立てるフレームワークです。単発のAPI呼び出しでは済まない処理 — 検索して、結果をプロンプトに混ぜて、必要ならツールを呼んで、最後に整形する — の配線を定型化します。

生の実装だと次のような手順を毎回自分で書くことになります。

  1. 質問を埋め込みベクトルへ変換する
  2. ベクトルDBから関連文書を取り出す
  3. 取り出した文書をプロンプトへ差し込む
  4. LLM を呼ぶ
  5. 出力を目的の形へ整える

LangChain はこの各段を差し替え可能な部品として提供し、つなぎ方だけを書けばよくします。

chain = prompt | llm | parser
answer = chain.invoke({"question": "…"})

| でつなぐ記法は、各段の入出力を合わせて順に流す書き方です。段の中身(どのモデルか、どのベクトルDBか)を差し替えても、つなぎ方は変わりません。

何を担うのか

部品役割
プロンプトテンプレート変数を埋め込む定型文を管理する
モデルの抽象化別ベンダーのLLMやローカルモデルを同じ口で呼ぶ
RetrieverベクトルDBなどから関連文書を取り出す
出力パーサー生成された文字列をJSONやオブジェクトへ変換する
ツール実行検索・計算・API呼び出しをモデルに使わせる

[[RAG(検索拡張生成)]] のパイプラインと [[AIエージェント]] の実装が主な用途です。ツール実行は [[Function Calling]] の仕組みを土台にしており、「モデルにどの道具を使わせるか」を宣言的に登録できます。

使うときの判断

便利な反面、抽象化の層が増えるため次の注意があります。

  • 処理が数段で済むなら、素のSDKを直接呼ぶほうが読みやすく速い
  • 内部で組み立てられた最終プロンプトが見えづらく、期待と違う入力がモデルへ渡ることがある
  • バージョン間で書き方が変わることがあり、古い記事のコードがそのまま動かない場合がある

対策は最終プロンプトと中間出力を必ずログに出すことです。どの文書が retriever から返り、どんなプロンプトが組み上がったかを見られる状態にしておくと、精度が出ない原因を切り分けられます。評価の観点は [[LLMアプリの評価とテスト]] と同じです。

初学者向けポイント

  • まず「検索して答える」最小構成を1本通し、部品の役割を把握してから機能を足すのが遠回りしません
  • ベクトルDBは差し替え可能です。手元で試すなら [[ベクトルDB実装(ChromaDB)]] が導入しやすい選択肢です
  • LangChain を使わずに同じことを [[Python]] で素朴に書いてみると、フレームワークが何を肩代わりしているかが分かります

関連技術とのつながり

  • [[RAG(検索拡張生成)]] — 検索と生成をつなぐパイプラインの実装先
  • [[AIエージェント]] — ツールを選んで実行する処理の組み立てに使う
  • [[Function Calling]] — ツール実行の土台になる仕組み
  • [[ベクトルDB実装(ChromaDB)]] — 検索側の実体としてよく組み合わせる
  • [[Python]] — 主要な実装言語
Q: LangChainが主に担う役割はどれ?
- [ ] LLMそのものを学習させる
- [x] LLM呼び出し・検索・ツール実行をつなぐ処理の流れを組み立てる
- [ ] GPUのリソースを管理する
解説: LangChain はモデルの学習ではなく、検索・プロンプト構築・ツール実行といった各段をつなぐオーケストレーションを担います。

Q: LangChainを使うときの注意点として正しいものはどれ?
- [ ] 抽象化により最終プロンプトが必ず可視化される
- [x] 抽象化の層が増え、実際にモデルへ渡る入力が見えづらくなる
- [ ] 処理が1段でも必ず使ったほうが速い
解説: 中間の組み立てが隠れるため、最終プロンプトと中間出力をログに出せる状態にしておくことが切り分けの前提になります。

Q: LangChainの利用が向いている場面はどれ?
- [ ] 単発でLLMに1回だけ質問する処理
- [x] 検索・プロンプト構築・ツール実行が絡む多段の処理
- [ ] 画像ファイルの圧縮処理
解説: 数段で済む処理は素のSDKのほうが読みやすく、多段の配線が必要な RAG やエージェントで効果が出ます。