PSSLの佐々木です
LLMアプリを作ろうとすると、LangChain、LlamaIndex、Semantic Kernel…と様々なフレームワークが出てきます。「結局どれを使えばいいの?」と迷ってしまうことはありませんか?
例えばPythonでRAGアプリを作ろうとGoogle検索すると、LangChainのサンプル、LlamaIndexのサンプル、素のSDKで書いてる記事…と情報が錯綜していて混乱します。とほほ。。
この記事では、各LLMフレームワークの種類とその特徴、そして「どんな時に使うべきか」を明確にします。
主要なLLMフレームワークの種類
1. 素のSDK(OpenAI SDK / Anthropic SDK など)
例:openai、anthropic、google-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
例:langchain、langchain-openai、langgraph
最も人気のある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-index、llama-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つのどれか(または組み合わせ)を採用しておけばよいと思います。
ではまた


