LLMフレームワーク結局どれ使う?

PSSLの佐々木です

LLMアプリを作ろうとすると、LangChain、LlamaIndex、Semantic Kernel…と様々なフレームワークが出てきます。「結局どれを使えばいいの?」と迷ってしまうことはありませんか?

例えばPythonでRAGアプリを作ろうとGoogle検索すると、LangChainのサンプル、LlamaIndexのサンプル、素のSDKで書いてる記事…と情報が錯綜していて混乱します。とほほ。。

この記事では、各LLMフレームワークの種類とその特徴、そして「どんな時に使うべきか」を明確にします。

主要なLLMフレームワークの種類

1. 素のSDK(OpenAI SDK / Anthropic SDK など)

例:openaianthropicgoogle-generativeai

各LLMプロバイダーが提供する公式SDKを直接使用するアプローチです。

from openai import OpenAI

client = OpenAI()
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)

特徴:

  • 余計な抽象化がなく、何が起きているか把握しやすい
  • プロバイダーの新機能をすぐに使える
  • 依存関係が少なく、バージョン問題に悩まされない
  • デバッグが容易

注意点:

  • リトライ処理やエラーハンドリングを自前実装する必要がある
  • プロバイダー切り替え時はコード全体の書き換えが必要
  • RAGなどの実装は一から書く必要がある

エージェント対応:

  • 各社のFunction Calling / Tool Useを直接利用
  • 自由度は高いが、すべて自前実装が必要

評価エコシステム:

  • 特になし(自前で構築するか、外部ツールと組み合わせる)

こんな時に選ぶべき:

  • シンプルなチャットボットを作りたい
  • プロトタイプを素早く作りたい
  • フレームワークの挙動を完全にコントロールしたい
  • 学習目的でLLMの仕組みを理解したい

2. LangChain

例:langchainlangchain-openailanggraph

最も人気のあるLLMフレームワークです。「何でもできる」汎用性が売りです。

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

llm = ChatOpenAI(model="gpt-4o")
prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful assistant."),
    ("user", "{input}")
])
chain = prompt | llm
response = chain.invoke({"input": "Hello!"})

特徴:

  • エコシステムが巨大で、連携ツールやサンプルコードが豊富
  • LLMプロバイダーの切り替えが容易
  • コミュニティが活発で、困ったときに情報が見つかりやすい

注意点:

  • 過度な抽象化でシンプルなことも複雑になりがち
  • 破壊的変更が多く、バージョンアップで動かなくなることがある
  • 学習コストが高い(Chain、Agent、Toolなどの概念理解が必要)
  • 抽象化の層が深く、デバッグが困難

エージェント対応:

  • LangGraphによる本格的なエージェント構築が可能
  • ツール定義、マルチエージェント、ワークフロー制御など充実
  • エージェント周りは最も成熟している

評価エコシステム:

  • LangSmithによるトレーシング・評価が強力
  • プロンプトのバージョン管理、A/Bテストなども可能
  • 有料だが、本番運用には非常に便利

こんな時に選ぶべき:

  • 複数のツールやAPIを組み合わせたエージェントを作りたい
  • 様々なLLMプロバイダーを切り替えながら使いたい
  • 豊富なサンプルコードを参考にしながら開発したい
  • LangSmithで評価・監視まで一気通貫でやりたい

3. LlamaIndex

例:llama-indexllama-index-core

RAG(Retrieval-Augmented Generation)に特化したフレームワークです。データの取り込みから検索、回答生成まで一貫してサポートします。

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

# ドキュメント読み込み → インデックス作成 → クエリ
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("このドキュメントの要約は?")

特徴:

  • RAG構築が圧倒的に簡単(数行で完成)
  • 多様なデータソース対応(PDF、Notion、Slack、DBなど100以上)
  • 検索手法が豊富(ベクトル検索、キーワード検索、ハイブリッドなど)
  • LangChainより学習コストが低い

注意点:

  • RAG以外の用途には弱い
  • 独自の検索ロジックを入れづらい場合がある
  • LangChainに比べて情報が少なめ

エージェント対応:

  • LlamaIndex Workflowsでエージェント構築が可能
  • RAGと組み合わせたエージェントには強い
  • ただしLangGraphほどの柔軟性はない

評価エコシステム:

  • LlamaCloudでトレーシング・評価が可能
  • RAGの評価指標(Faithfulness、Relevancyなど)が充実
  • RAG特化なら十分な機能

こんな時に選ぶべき:

  • 社内ドキュメント検索システムを作りたい
  • PDFやWebページを元に回答するチャットボットを作りたい
  • RAGの精度を追求したい(チャンク戦略、リランキングなど)

4. Semantic Kernel

例:semantic-kernel(Python / C# / Java)

Microsoftが開発するエンタープライズ向けフレームワークです。C#がメインですが、PythonやJavaもサポートしています。

import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion

kernel = sk.Kernel()
kernel.add_service(OpenAIChatCompletion(
    service_id="chat",
    ai_model_id="gpt-4o"
))

# プラグインとして機能を追加
@kernel.function(name="get_weather")
def get_weather(location: str) -> str:
    return f"{location}の天気は晴れです"

特徴:

  • エンタープライズ向け設計(セキュリティ、スケーラビリティ考慮)
  • Azure OpenAI Serviceとの親和性が高い
  • 型安全(特にC#では堅牢な開発が可能)
  • プラグインアーキテクチャで機能の追加・管理が整理されている

注意点:

  • コミュニティがLangChainより小さい
  • Pythonは二番手(C#が最も充実)
  • 日本語の学習リソースが少ない

エージェント対応:

  • Agent Frameworkでマルチエージェント構築が可能
  • プラグインベースで機能拡張しやすい
  • Microsoft Copilot Studioとの連携も視野に入る

評価エコシステム:

  • 単体での評価機能は限定的
  • Azure AI Studio / Prompt Flowとの組み合わせが前提
  • Application Insightsでの監視は容易

こんな時に選ぶべき:

  • C#/.NETでLLMアプリを開発したい
  • Azure OpenAI Serviceを使う予定がある
  • エンタープライズ環境で堅牢なシステムを構築したい
  • Microsoft製品(Teams、SharePointなど)と連携したい

5. Azure Prompt Flow

例:Azure AI Studio内のツール、promptflow CLI/SDK

MicrosoftのAzure AI Studioに統合されたワークフロー構築・評価ツールです。GUIとコードの両方で開発できます。

# flow.dag.yaml の例
inputs:
  question:
    type: string
nodes:
  - name: llm_call
    type: llm
    source:
      type: code
      path: llm_call.py
    inputs:
      prompt: ${inputs.question}
outputs:
  answer:
    type: string
    reference: ${llm_call.output}

特徴:

  • GUIでフローを構築できるビジュアルエディタ
  • プロンプトの品質評価を体系的に実施可能
  • プロンプトやフローのバージョン管理が容易
  • Azure MLとの統合で本番デプロイメントがスムーズ
  • 非エンジニアとの協業がしやすい

注意点:

  • Azure環境が前提(ローカル実行も可能だが制限あり)
  • 複雑なロジックはコード側で書く必要がある
  • Azure AI Studioの利用料金が発生

エージェント対応:

  • フロー内でツール呼び出しは可能
  • ただし複雑なエージェントには向かない
  • Semantic Kernelと組み合わせるのが現実的

評価エコシステム:

  • 評価機能が最も充実している
  • 組み込みの評価指標(Groundedness、Relevance、Coherenceなど)
  • カスタム評価指標も定義可能
  • バッチ評価、A/Bテストなど本格的なLLMOpsが可能

こんな時に選ぶべき:

  • プロンプトの評価・改善を体系的に行いたい
  • 非エンジニア(PMやドメインエキスパート)と協業したい
  • Azure環境で本番運用する予定がある
  • MLOpsの知見を活かしてLLMOpsを実践したい

比較表:一目でわかるフレームワーク選び

項目 素のSDK LangChain LlamaIndex Semantic Kernel Prompt Flow
学習コスト
RAG構築 △ 自前実装 ◎ 最強
エージェント △ 自前実装 ◎ LangGraph ○ Workflows ○ Agent Framework
評価エコシステム × ◎ LangSmith ○ LlamaCloud ◎ 最強
Azure親和性
コミュニティ ◎ 最大
安定性 △ 変更多い
本番運用実績

実用的な選択フローチャート

ステップ1: 主な用途を確認

  • シンプルなチャット機能 → 素のSDK
  • RAGがメイン → LlamaIndex
  • 複雑なエージェント → LangChain
  • Azure環境で運用 → Semantic Kernel + Prompt Flow

ステップ2: エージェント要件を確認

  • エージェント不要 → ステップ3へ
  • シンプルなツール呼び出し → 素のSDK or LlamaIndex
  • 複雑なマルチエージェント → LangChain(LangGraph)
  • Azureエコシステム内 → Semantic Kernel

ステップ3: 評価・運用要件を確認

  • 評価は後回し → 用途に合わせて選択
  • 本格的な評価が必要 → LangSmith or Prompt Flow を併用
  • Azure統一 → Prompt Flow
  • マルチクラウド → LangSmith

組み合わせパターン

実務では単一のフレームワークだけでなく、組み合わせて使うことも多いです。

パターン1:RAG + 評価

  • LlamaIndex + Prompt Flow
  • RAGの精度を継続的に改善したい場合に

パターン2:エージェント + RAG

  • LangChain(LangGraph)+ LlamaIndex
  • 検索結果を元に行動するエージェントを作りたい場合に

パターン3:Azure統一構成

  • Semantic Kernel + Prompt Flow
  • エンタープライズでAzure縛りがある場合に

パターン4:最小構成

  • 素のSDK + 外部評価ツール(Braintrustなど)
  • フレームワーク依存を最小限にしたい場合に

まとめ

初心者の方は素のSDKから始めて、必要に応じてフレームワークを導入するのが現実的なアプローチです。

各フレームワークの選択基準:

  • 素のSDK:確実に動かしたい時、学習目的
  • LangChain:エージェントを本格的に作りたい時、エコシステムを活用したい時
  • LlamaIndex:RAGを最短で構築したい時
  • Semantic Kernel:Azure + エンタープライズ環境の時
  • Prompt Flow:評価・LLMOpsを本格的にやりたい時

プロジェクトの要件と制約を考慮して、最適なフレームワークを選択しましょう。不明な点があれば、まず素のSDKで動作確認してから、段階的にフレームワークを導入することをお勧めします。

またこのほかにもDify、Flowise、Haystack などのフレームワークも存在していますが、基本この5つのどれか(または組み合わせ)を採用しておけばよいと思います。

ではまた

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。
エンジニア募集中!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です