【ローカルAI】Meta公式「Llama Stack」超入門!オープンソースLLMで自律型エージェントを構築する完全手順
AI開発のトレンドは、クラウド依存から「ローカル環境での自律型AIエージェントの実行」へとシフトしつつあります。セキュリティやコスト、応答速度の観点から、ローカルLLM(Large Language Model)を活用したシステム構築の需要が急増しているためです。
こうした背景の中、Metaが公式に発表したフレームワークが「Llama Stack」です。Llama Stackは、LlamaモデルをベースにしたAIエージェント、RAG(検索拡張生成)、ツール利用(Tool Use)などをシームレスに実装・標準化するためのAPI仕様および実装群です。
本記事では、Llama Stackの基本コンセプトから、ローカルLLM実行エンジン(Ollama)との連携、Pythonを用いたエージェント構築の具体的なコード、そして環境構築時に陥りがちなトラブルシューティングまで、シームレスに解説します。
Llama Stackとは? 概要と標準化されるAPIスタック
これまで、ローカル環境でLLMを動かし、さらに自律型エージェントを構築するには、LangChainやLlamaIndex、あるいは各種独自の推論エンジンを個別に組み合わせる必要があり、システム構成が複雑化しがちでした。
「Llama Stack」は、こうした課題を解決するためにMetaが主導している標準化プロジェクトです。LLMの推論だけでなく、メモリ(Memory)、エージェント(Agentic Loop)、ツール実行(Tool Execution)、評価(Evaluation)といった、モダンなAIアプリケーションに必要なコンポーネントを統一されたAPIとして定義しています。
詳細な仕様や開発ロードマップは、公式の Llama Stack GitHubリポジトリ や、Llama公式ドキュメント で公開されています。
Llama Stackの主なコンポーネント
- Inference(推論): Llamaモデルによるテキスト生成や構造化出力。
- Agents(エージェント): ループ処理、プランニング、ツール呼び出しを統合した実行環境。
- Memory(メモリ): 会話履歴の永続化や、ベクトルデータベースを用いたRAG機能。
- Telemetry(テレメトリ): エージェントの動作ログやパフォーマンスのモニタリング。
Llama Stackのアーキテクチャ
Llama Stackは、アプリケーション開発者(Client)と、実際の推論エンジン(Provider)の間に位置する「ミドルウェアレイヤー」として機能します。
+-------------------------------------------------+
| Client Application (Python / TS) |
+-------------------------------------------------+
|
v (Llama Stack API)
+-------------------------------------------------+
| Llama Stack |
+-------------------------------------------------+
|
v (Adapter)
+-------------------------------------------------+
| Providers (Ollama, vLLM, Together AI, etc.) |
+-------------------------------------------------+
開発者はクライアントSDKを利用して共通のAPIを叩くだけで、バックエンドがローカルのOllamaであろうと、クラウドのTogether AIであろうと、コードを書き換えることなくシームレスに切り替えることができます。これにより、プロトタイピングはローカルで行い、本番環境はクラウドの高性能APIへ移行するといった運用が極めて容易になります。
なお、ローカルでLLMを動作させる基礎知識や設定については、Ollamaを使った完全ローカルAI開発環境構築ガイド も非常に参考になります。
ローカル環境でのLlama Stack構築手順
それでは、実際に完全ローカル環境でLlama Stackを起動し、自律型エージェントを動作させる手順を解説します。今回は、ローカル推論プロバイダとしてデファクトスタンダードである「Ollama」を使用します。
1. 前提条件と環境準備
- OS: macOS, Linux, または WSL2 (Windows)
- Python: 3.10 以上
- Docker: インストール済みであること(推奨)
まず、Pythonの仮想環境を作成し、必要なパッケージをインストールします。
# 仮想環境の作成と有効化
python3 -m venv llama-stack-env
source llama-stack-env/bin/activate
# Llama Stack CLIおよびクライアントのインストール
pip install llama-stack llama-stack-client
2. バックエンド(Ollama)の準備
Ollamaがインストールされていない場合は、公式よりインストールを完了させておいてください。Llama Stackで動作させるための軽量かつ強力なモデルである llama3.1(または llama3.2)をプルしておきます。
# Ollamaでモデルを起動
ollama run llama3.1
3. Llama Stackの起動(Docker経由)
Llama Stackは、テンプレート設定を用いて、各プロバイダに対応したサーバーコンテナを起動できます。今回はOllamaをバックエンドに指定してサーバーを立ち上げます。
# Llama StackのDockerイメージをビルドまたは取得し、起動する
llama-stack-connection-test --provider-type ollama
より確実な起動方法として、CLIを使用して設定ファイル(テンプレート)を生成し、ローカルでサーバープロセスを開始します。
# 利用可能なテンプレートの一覧表示
llama-stack config show
# Ollama用の設定ファイルをビルドして実行
llama-stack-server --config run-local-ollama.yaml
※ run-local-ollama.yaml は、利用環境のホストやポート、モデル名に合わせて書き換える必要があります。デフォルトでは http://localhost:11434 のOllamaエンドポイントへ接続し、Llama Stack自体は http://localhost:5001 でAPIを提供します。
Pythonで自律型エージェントを構築する
Llama Stackが起動したら、Pythonクライアントを使用して「Web検索ツールを利用して最新情報を回答する自律型エージェント」を構築してみましょう。
ここでは、エージェントがユーザーの質問に対し、自動的にツールを呼び出すか(Tool Call)、直接回答するかを自律的に判断するループ(Agentic Loop)を実装します。
実装コード(agent.py)
import os
from llama_stack_client import LlamaStackClient
from llama_stack_client.types import UserMessage
def main():
# Llama Stack サーバーのクライアントを初期化
client = LlamaStackClient(base_url="http://localhost:5001")
# 1. エージェント設定の定義
# 使用するモデルと、エージェントに付与するカスタムツールを定義します
agent_config = {
"model": "meta-llama/Llama-3.1-8B-Instruct",
"instructions": "あなたは優秀な自律型アシスタントです。必要に応じて提供されたツールを活用してください。",
"tools": [
{
"type": "web_search",
"description": "最新のニュースやWebの情報を検索するためのツール"
}
],
"enable_session_persistence": False
}
# 2. エージェントの作成
print("Initializing Agentic Loop via Llama Stack...")
agent_session = client.agents.create_session(
agent_config=agent_config
)
session_id = agent_session.session_id
print(f"Session Created: {session_id}")
# 3. ユーザーからの質問(ツール使用が必要な問い)
user_query = "2024年の最新のAIトレンドと、MetaのLlama StackについてWebで調べて要約してください。"
print(f"\nUser: {user_query}")
# 4. エージェントの実行(インタラクションの開始)
response_stream = client.agents.create_turn(
session_id=session_id,
messages=[UserMessage(role="user", content=user_query)]
)
# 5. レスポンスのストリーミング解析
print("\nAgent: ", end="")
for chunk in response_stream:
# 途中で発生するイベント(ツールの呼び出し、思考プロセス、最終テキストなど)をハンドリング
if hasattr(chunk, 'event') and chunk.event.payload:
payload = chunk.event.payload
if payload.event_type == "text_delta":
print(payload.text, end="", flush=True)
elif payload.event_type == "tool_call":
print(f"\n[Tool Call] {payload.tool_name} を実行中... Args: {payload.arguments}\n")
if __name__ == "__main__":
main()
コードのポイント
LlamaStackClientは、ローカルのLlama Stackサーバー(localhost:5001)と通信します。コード自体は、将来的にプロバイダをローカルからクラウド(Together AIなど)に変更しても、一切変更する必要がありません。create_turnを呼び出すことで、エージェントは自動的に「思考 -> ツール実行 -> 結果確認 -> 最終回答」というエージェント・ループを実行します。
他フレームワークとの比較や、より軽量なエージェントの実装方法については、smolagentsを使ったAIエージェント開発ガイド も参考になります。
トラブルシューティング:構築時に遭遇しやすいエラーと解決策
Llama Stackの構築時、特にコンテナや複数サービス(Ollama、Docker、Llama Stack)を跨ぐ構成では、いくつかの代表的なエラーに遭遇することがあります。ここではその原因と解決方法を示します。
エラー例:「Failed to connect to provider ‘ollama’ at http://localhost:11434」
Llama Stackサーバー起動時に、バックエンドであるOllamaへの接続に失敗するエラーです。
原因1: Dockerコンテナの内外による名前解決ミス
Llama StackをDockerコンテナとして起動し、Ollamaをローカルマシン(ホストOS)上で直接起動している場合、コンテナ内から見た localhost はコンテナ自身を指すため、ホストOS上で動くOllama(11434 ポート)にアクセスできません。
解決策
Llama Stackの起動設定(YAMLファイル)において、Ollamaの接続先URLを以下のように変更します。
- macOS / Windows (Docker Desktop使用時):
http://host.docker.internal:11434に変更します。 - Linux:
Docker起動オプションに
--net=hostを付与するか、ホストのローカルIP(例:http://192.168.x.x:11434)を直接指定します。
原因2: Ollamaのバインド設定不足
Ollamaが外部(またはコンテナ内)からのリクエストを受け付けるように設定されていない可能性があります。
解決策
環境変数 OLLAMA_HOST を 0.0.0.0 に設定してOllamaプロセスを再起動します。
# macOS / Linux の場合
OLLAMA_HOST=0.0.0.0 ollama serve
まとめと今後の展望
Metaの「Llama Stack」は、乱立していたAIエージェント開発のフレームワークに「標準APIスタック」という明確な基準をもたらす画期的なプロジェクトです。これにより、開発者は特定のLLMエンジンやベンダーロックインに悩まされることなく、ローカル環境で検証したエージェントをそのまま本番クラウド環境へとシームレスにスケールさせることが可能になります。
自律型AIエージェントの社会実装が進む中、完全ローカルで動作するセキュアなシステム基盤として、Llama Stackは今後さらに重要な選択肢となっていくでしょう。ぜひ、本ガイドを参考に自分だけの自律型エージェントの構築に挑戦してみてください。