powered by TechFeed
表示モード
Deep Dive

LangChain・LlamaIndex・生APIコール、どれを選ぶべきか — プロトタイプで固定すると本番で外せなくなる、フレームワーク選定の判断基準

7月10日、Shittu Olumideが「LLM Orchestration Frameworks Compared: LangChain vs. LlamaIndex vs. Raw API Calls」と題した記事を公開した。この記事では、LangChain・LlamaIndex・生APIの3つのアプローチをスタック層ごとに整理し、プロジェクトの要件に応じた選定基準を示している。

7月10日、Shittu Olumideが「LLM Orchestration Frameworks Compared: LangChain vs. LlamaIndex vs. Raw API Calls」と題した記事を公開した。この記事では、LangChain・LlamaIndex・生APIの3つのアプローチをスタック層ごとに整理し、プロジェクトの要件に応じた選定基準を示している。


LLMアプリケーション開発では、プロトタイプが動いた後の「次の一手」でフレームワーク選定が問題になる。メモリ、RAG(検索拡張生成)、ツール呼び出し——これらが加わった瞬間、client.chat.completions.create() 一行では足りなくなる。

最も高価な間違いは、プロトタイプ段階でフレームワークを固定してしまい、本番で外せなくなることだと記事は冒頭から指摘する。選択を誤ってもプロトタイプは壊れない。壊れるのは6ヶ月後の本番システムだ——スタックトレースが40フレームの深さになり、トークンコストが本来の2.7倍に膨らみ、破壊的API変更の移行に1スプリントを費やすことになる。

背景として、元記事によればLLM APIへの支出は2024年末から2025年半ばにかけて35億ドルから84億ドルへと倍増している。フレームワーク層のコード——アプリとモデルの間に挟まる部分——が、その支出のどれだけが実際の処理に使われるかを直接決める。


3つの選択肢が解決する問題は別々だ

まず、この比較の前提として理解しておくべき重要な点がある。3つの選択肢は同じ次元で競合していない

  • LangChain(2022年10月〜):LLM操作を連鎖させる汎用オーケストレーションフレームワーク。GitHubスター11.9万、500以上のインテグレーションを持つ最大のLLMフレームワーク
  • LlamaIndex(2022年11月〜、当初はGPT Indexとして公開):自前のデータに対してLLMを推論させることに特化。データ取り込み・チャンキング・埋め込み・インデックス・検索の設計が中心。GitHubスター4.4万、LlamaHubで300以上のデータコネクタを提供
  • 生APIコール:OpenAIやAnthropicのSDKを直接使用。オーケストレーション層なし、プロバイダーが提供する範囲のみ

LangChainは「ステップ間で何が起きるか」のオーケストレーション、LlamaIndexは「検索ステップそのもの」の精度と効率、生APIコールは「どれだけの抽象化が必要か」というスタンスだ。多くの本番システムはこのうち2つを組み合わせて使う。


LangChain:複雑な組み合わせを組み立てる層

LangChainの強みは、複数ステップ・複数ツール・条件分岐・ターン間メモリ・エージェントといった複雑さを組み立てることにある。

同チームが開発した**LangGraph**は、エージェントワークフローを有向グラフとしてモデル化する。ノードがPython関数、エッジが状態遷移、型付きのstateオブジェクトが全実行を流れる構造だ。SQLite・PostgreSQL・Redisへのチェックポインタによる組み込み永続化も備えており、エージェントがワークフローの途中で一時停止し、状態を保存して数時間後に再開できる。これは自前で実装するには相当な手間がかかる機能だ。なお、元記事ではLangGraph v1.0の安定版公開時期について言及があるが、記事公開日(2026年7月)時点の記述に依拠しているため、正確な公開日はLangChainの公式ブログで確認されたい。

正直なコスト面も挙げておく:

  • フレームワークオーバーヘッド:LangChainは1ステップあたり約10ms、LangGraphは約14msを追加する。LLM呼び出しが1〜3秒かかる人間向けアプリでは無視できる範囲だが、毎分数千リクエストを処理する高スループットパイプラインでは積み重なる
  • デバッグの複雑さ:LangChainの本番エラーのスタックトレースは15〜40フレームのフレームワーク内部コードを含む
  • トークンコスト:元記事が引用する比較では、基本的なRAGパイプラインでLangChainが生実装の2.7倍のコストを生じさせた

LangChain公式ドキュメントによれば、v1.0ではAPI安定性が確約されている。v0.1〜v0.3の間は破壊的変更が相次ぎ、複数回の強制移行が発生した歴史がある。新規プロジェクトでは安定性の懸念はほぼ解消されているが、v0.x系を本番で動かしているチームにはv1.0への移行コストが存在する。

以下はLangChainのLCEL(LangChain Expression Language)チェーンの実装例だ:

# langchain_chain.py
import os
from dotenv import load_dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI

load_dotenv()

llm = ChatOpenAI(
    model="gpt-4o",
    temperature=0.2,
    api_key=os.getenv("OPENAI_API_KEY")
)

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a concise technical explainer. Keep answers under 100 words."),
    ("human", "Explain {topic} in simple terms.")
])

parser = StrOutputParser()

# パイプ演算子(|)で prompt → llm → parser を直列に接続
chain = prompt | llm | parser

if __name__ == "__main__":
    result = chain.invoke({"topic": "vector embeddings"})
    print(result)

    print("\n--- Streaming response ---")
    for chunk in chain.stream({"topic": "RAG pipelines"}):
        print(chunk, end="", flush=True)
    print()

| 演算子で3つのオブジェクトを接続するだけで、.invoke().stream().batch().ainvoke() がチェーン定義の変更なしに使える。このインターフェースの統一性が、複数の実行パターンを必要とするプロジェクトでLangChainを選ぶ最も明確な理由になる。


LlamaIndex:検索精度に集中する層

LlamaIndexが本領を発揮するのは、企業内文書・データベース・外部ソースに対してLLMを推論させる用途だ。PDFのロード・チャンク分割・埋め込み生成・ベクトルインデックスへの保存・意味的検索という一連のRAGパイプラインを、最小限のコードで実装できる。

LlamaIndexが提供する高度な検索機能——クエリルーティング、マルチステップ検索、ハイブリッド検索——は、LangChainのLCELで同等のものを組み立てるより少ないコードで実現できる。LlamaIndex公式ドキュメントでは、これらの検索戦略の実装例が詳しく解説されている。

ただし、元記事ではLlamaIndexのコード例は掲載されていない。実装の具体的なイメージをつかみたい場合は、LlamaIndexの公式クイックスタートを参照するとよい。

エージェント機能やLLMチェーンのオーケストレーションはLangChainの方が充実している。「検索の精度を上げたい」ならLlamaIndex、「複数ツールを組み合わせたエージェントを作りたい」ならLangChainというのが現実的な使い分けだ。また、300以上のデータコネクタを集めたLlamaHubを活用することで、外部データソースとの接続をほぼコードなしで追加できる点もLlamaIndexの実用上の強みだ。


生APIコール:抽象化を最小にする選択

生APIコールは「原始的なフォールバック」ではない。フレームワークの複雑さがコストに見合わなくなった本番チームが移行先として選ぶアプローチとして位置づけられている。

デバッグが簡潔で、トークン消費が予測しやすく、APIの変更が直接見える。フレームワークのオーバーヘッドがないため、シンプルなユースケースでは最も安く、最も速い。代償は、メモリ管理・ツール呼び出し・エラーハンドリングを自前で組む必要があることだ。OpenAI APIリファレンスAnthropic APIドキュメントは、この選択肢を選んだ際の実装の出発点になる。


どれを選ぶか:実践的な判断基準

記事が提示するフレームワーク選定の基準を整理すると:

状況 推奨
単純なQ&A、要約、分類 生APIコール
自社文書への質問応答(RAG) LlamaIndex(+ 生APIまたはLangChain)
複数ツール・メモリ・条件分岐を持つエージェント LangChain + LangGraph
高スループット・低レイテンシが必要 生APIコール
複数モデルプロバイダーへの切り替えが必要 LangChain

プロトタイプ段階でフレームワークを固定してしまい、本番で外せなくなること——記事が最も強調するのはこのリスクだ。3つの選択肢はそれぞれ解決する問題が異なる。スタックが固まる前に「自分のシステムが本当に何を必要としているか」を問い直すことが、後の移行コストを避ける最短経路になる。


詳細はLLM Orchestration Frameworks Compared: LangChain vs. LlamaIndex vs. Raw API Callsを参照していただきたい。