AIエージェント入門

【2026年最新】Mistral Small 4セルフホストAgent実装ガイド

この記事の結論

Mistral Small 4(Apache 2.0、128エキスパートMoE)をセルフホストしてAIエージェントを構築する手順をコード付きで解説。




「Apache 2.0で商用無料なのに、MoEで6Bしかアクティブしない。これ、セルフホストエージェントの本命では?」

Mistral Small 4が2026年3月にリリースされた直後、検証環境にセットアップして試してみました。119Bのパラメータを持ちながら推論時にアクティブになるのは6.5B。ライセンスはApache 2.0で商用利用も制限なし。セルフホストしてデータを外に出さずにエージェントを動かしたい開発者にとって、かなり現実的な選択肢になっています。

この記事では、vLLMとOllamaを使ったセルフホスト構築手順から、LangGraph・CrewAIとの連携、クラウドAPIとのコスト比較まで、コピペ可能なPythonコードとともに全公開します。

対象読者: PythonとDockerが使えて、APIキーに依存せずLLMをセルフホストしたいエージェント開発者。GPUは必須です(最低でも48GB VRAM)。

AIエージェントの構築パターン全般についてはAIエージェント構築完全ガイドもあわせてご覧ください。


Mistral Small 4とは何か — MoEアーキテクチャの実力

Mistral Small 4(モデルID: Mistral-Small-4-119B-2603)は2026年3月にリリースされた、Apache 2.0ライセンスのオープンウェイトモデルです。

最大の特徴はMixture-of-Experts(MoE)アーキテクチャ。128個の「エキスパート」と呼ばれるサブネットワークを持ちながら、1トークン処理するときにアクティブになるのは4つだけです。

項目 Mistral Small 4 Mistral Small 3 GPT-5.4 Mini(参考)
総パラメータ数 119B 22B 非公開
推論時アクティブパラメータ 6.5B 22B 非公開
コンテキスト長 256K tokens 128K tokens 128K tokens
マルチモーダル テキスト+画像 テキストのみ テキスト+画像
ライセンス Apache 2.0 Apache 2.0 商用利用制限あり
API入力単価 $0.15/1M tokens $0.10/1M tokens $0.75/1M tokens
API出力単価 $0.60/1M tokens $0.30/1M tokens $4.50/1M tokens

料金情報の最終確認: 2026-03-27(Mistral公式ドキュメントおよびTokenCostより)

MoEの面白いところは「大きいのに軽い」という点です。GPT-5.4 Miniと比べると入力で5倍、出力で7.5倍安い。しかも前世代(Small 3)と同じインフラで3倍のスループットが出ます。

エージェント開発者にとって一番重要なのはツールコール(Function Calling)のネイティブサポートです。Single-turnでもMulti-turnでも安定して動作します。


まず試したい「5分セットアップ」3選

1. Ollamaで即試す(開発・検証用)

とにかく手っ取り早く動かしたいならOllamaが最速です。コマンド1行で動きます。

# Ollamaをインストール済みであることを前提
# 必要VRAM: 最低48GB(量子化版は24GB〜)

ollama run mistral-small-4

# または量子化版(VRAM節約、品質やや低下)
ollama run mistral-small-4:q4_k_m

ポイント: Ollamaは開発・検証用途向けです。シングルユーザーでの低レイテンシを重視した設計のため、複数リクエストを並列処理する本番環境にはvLLMが適しています。

Ollamaが起動したらOpenAI互換APIとして利用できます。

from openai import OpenAI

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
# 動作環境: Python 3.11+, openai>=1.0.0
# pip install openai

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",  # Ollamaはapi_keyを検証しないがrequired
)

response = client.chat.completions.create(
    model="mistral-small-4",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Pythonでフィボナッチ数列を出力するコードを書いて"}
    ],
    temperature=0.3,
)
print(response.choices[0].message.content)

2. vLLMでOpenAI互換サーバーを立てる(本番用)

複数ユーザーへの同時提供、高スループットが必要な本番環境はvLLMを使います。

# 必要: Python 3.11+, CUDA 12.1+, GPU 4x H100(公式推奨)
# pip install vllm huggingface-hub

# Hugging Faceからウェイトをダウンロード(242GB、BF16精度)
huggingface-cli download mistralai/Mistral-Small-4-119B-2603

# vLLMサーバー起動
vllm serve mistralai/Mistral-Small-4-119B-2603 \
  --max-model-len 262144 \
  --tensor-parallel-size 4 \
  --gpu-memory-utilization 0.85 \
  --host 0.0.0.0 \
  --port 8000

# NVFP4量子化版(メモリ節約版、H100 2枚で動作)
vllm serve mistralai/Mistral-Small-4-119B-2603-NVFP4 \
  --max-model-len 262144 \
  --tensor-parallel-size 2 \
  --gpu-memory-utilization 0.8

ポイント:

  • --tensor-parallel-sizeはGPU枚数に合わせる(H100 4枚なら4)
  • NVFP4量子化版はH100 2枚でも動作。品質はほぼ同等
  • --max-model-len 262144は256Kトークン(最大コンテキスト)の指定

起動後のAPIアクセス:

from openai import OpenAI

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
# 動作環境: Python 3.11+, openai>=1.0.0, vLLM起動済み

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed-for-local",
)

response = client.chat.completions.create(
    model="mistralai/Mistral-Small-4-119B-2603",
    messages=[{"role": "user", "content": "こんにちは"}],
    max_tokens=512,
)
print(response.choices[0].message.content)

3. Mistral API(クラウド)で即動作確認

GPUがない環境での動作確認、または本番はAPIを使う場合はMistral公式APIが最もシンプルです。

import os
from mistralai import Mistral

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
# 動作環境: Python 3.11+, mistralai>=1.0.0
# pip install mistralai

client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

response = client.chat.complete(
    model="mistral-small-2603",
    messages=[
        {"role": "user", "content": "日本語で自己紹介してください"}
    ],
)
print(response.choices[0].message.content)

ポイント: APIモデルIDは mistral-small-2603(2603はリリース月: 2026年3月)。


3つのデプロイ戦略 — 用途別の選び方

セルフホスト vs クラウドAPI、どちらを選ぶかは月間利用量と要件で決まります。

デプロイ方式 用途 必要GPU コスト目安 データセキュリティ
Ollama(ローカル) 開発・検証・個人利用 48GB VRAM〜 電気代のみ 完全オンプレ
vLLM(本番セルフホスト) 大量リクエスト処理 4x H100推奨 $3〜5/時(H100) 完全オンプレ
Mistral API 素早い立ち上げ、スモールスタート 不要 $0.15/$0.60 per 1M tokens Mistralの利用規約に準拠

月次コスト試算(1日1万リクエスト、入力5K+出力1Kトークン/件)

  • Mistral API: 約$405/月
  • GPT-5.4 Mini API: 約$2,475/月(6倍以上)
  • vLLM セルフホスト: 約$2,000〜3,000/月(H100 4枚のクラウドレンタル)

月間1億トークン未満ならAPIが割安。それ以上ならセルフホストの償却が始まります。GDPRや社内データポリシーが厳しい場合はセルフホスト一択。


LangGraph連携:ツールコール付きエージェント実装

Mistral Small 4はOpenAI互換のAPIを提供しているため、LangGraphとの連携はシームレスです。

以下は、Web検索ツールと電卓ツールを持つシンプルなReActエージェントの実装例です。

import os
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langgraph.prebuilt import create_react_agent

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
# 動作環境: Python 3.11+, langgraph>=0.2.0, langchain-openai>=0.1.0
# pip install langgraph langchain-openai

# vLLMセルフホストの場合
llm = ChatOpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed",
    model="mistralai/Mistral-Small-4-119B-2603",
    temperature=0,
)

# Mistral APIの場合はこちら
# llm = ChatOpenAI(
#     base_url="https://api.mistral.ai/v1",
#     api_key=os.environ["MISTRAL_API_KEY"],
#     model="mistral-small-2603",
# )

@tool
def calculator(expression: str) -> str:
    """数式を計算する。例: '2 + 2 * 3'"""
    try:
        # evalは実際の本番環境では使わないこと
        result = eval(expression, {"__builtins__": {}}, {})
        return f"計算結果: {result}"
    except Exception as e:
        return f"計算エラー: {str(e)}"

@tool
def get_weather(city: str) -> str:
    """都市の天気を取得する(デモ用)"""
    # 実際には外部APIを呼び出す
    return f"{city}の天気: 晴れ、気温22度"

tools = [calculator, get_weather]
agent = create_react_agent(llm, tools)

# エージェントを実行
result = agent.invoke({
    "messages": [{"role": "user", "content": "東京の天気を確認して、気温をFに換算してください"}]
})
print(result["messages"][-1].content)

ポイント: temperature=0にするとツール選択の一貫性が上がります。エージェント用途では0〜0.2が推奨です。

CrewAI連携:マルチエージェントシステム

複数のエージェントが協調して動くマルチエージェントシステムをCrewAIで構築する例です。

import os
from crewai import Agent, Task, Crew, LLM

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
# 動作環境: Python 3.11+, crewai>=0.60.0
# pip install crewai

# セルフホストvLLMに接続
llm = LLM(
    model="openai/mistralai/Mistral-Small-4-119B-2603",
    base_url="http://localhost:8000/v1",
    api_key="not-needed",
    temperature=0.1,
)

# 調査エージェント
researcher = Agent(
    role="技術調査員",
    goal="MoEアーキテクチャの最新動向を調査する",
    backstory="AIアーキテクチャの専門家。常に最新の技術トレンドを追っている。",
    llm=llm,
    verbose=True,
)

# 執筆エージェント
writer = Agent(
    role="テクニカルライター",
    goal="調査結果をわかりやすい日本語の技術記事に変換する",
    backstory="複雑な技術概念を非専門家にも理解できるよう説明するのが得意。",
    llm=llm,
    verbose=True,
)

# タスク定義
research_task = Task(
    description="Mistral Small 4のMoEアーキテクチャについて調査し、主な特徴を3点まとめる",
    expected_output="箇条書き3点の技術概要",
    agent=researcher,
)

writing_task = Task(
    description="調査結果をもとに、200字の日本語解説文を書く",
    expected_output="200字程度の日本語解説",
    agent=writer,
    context=[research_task],
)

crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    verbose=True,
)

result = crew.kickoff()
print(result)

ポイント: CrewAIでのLLMモデル指定は "openai/モデルID" の形式。vLLMがOpenAI互換APIを提供しているため、このプレフィックスで接続できます。

Reasoning機能の活用:複雑な推論タスクへの応用

Mistral Small 4には reasoning_effort パラメータが実装されており、推論の深さを調整できます。

from mistralai import Mistral
import os

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
# 動作環境: Python 3.11+, mistralai>=1.0.0
# pip install mistralai

client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

# 複雑な問題には高い推論努力を設定
response = client.chat.complete(
    model="mistral-small-2603",
    messages=[
        {
            "role": "user",
            "content": "次のビジネス課題を分析してください:顧客離脱率が四半期で3%増加した。考えられる原因と対策を体系的に提示してください。"
        }
    ],
    # reasoning_effort: "low"(高速)| "medium"(バランス)| "high"(深い推論)
    extra_body={"reasoning_effort": "high"},
    temperature=0.1,
    max_tokens=2048,
)

print(response.choices[0].message.content)

ポイント: reasoning_effort="high"にすると内部でChain-of-Thoughtを展開し、単純なコード補完では "low" で高速化できます。エージェントの役割に応じて使い分けましょう。


セキュリティと運用ルール

セルフホストLLMをエージェントのバックエンドとして使う際に気をつけるべき点をまとめます。

チェック項目 内容 対策
プロンプトインジェクション ユーザー入力でシステムプロンプトを書き換えられる 入力のサニタイゼーション、システムプロンプトの分離
APIキー管理 Mistral APIキーのハードコード 環境変数(os.environ)またはSecretsManagerを使用
ネットワーク露出 vLLMサーバーが外部からアクセス可能 ファイアウォール設定、VPN経由のアクセスに限定
コスト暴走 エージェントのループによるAPI使用量爆発 最大イテレーション数の設定、APIトークン上限アラート
出力検証 ハルシネーションによる誤情報の外部送信 人間のレビューステップを設ける(high-stakes用途)

特にvLLMサーバーは --host 0.0.0.0 で起動すると全インターフェースに公開されます。本番環境では必ずnginxやAPIゲートウェイを挟み、認証を設けてください。


【要注意】よくある失敗パターンと回避策

失敗1:GPU要件を甘く見て起動できない

❌ RTX 3090(24GB)1枚でフルモデルを動かそうとする
⭕ 量子化版(q4_k_m)を使うか、Mistral APIで代替する

なぜ重要か: Mistral Small 4のフルモデルはBF16精度で242GB。H100 4枚未満での動作はサポート対象外です。量子化(NVFP4/Q4)を使えばH100 2枚で動かせますが、品質のトレードオフがあります。

失敗2:vLLMのタイムアウトを設定せずにエージェントがループ

max_tokens を設定せず、エージェントが無限に推論を続ける
max_tokens=2048 など上限を設け、LangGraphの recursion_limit も設定する

なぜ重要か: セルフホストはAPI料金の上限がないため、ループが起きてもアラートが来ません。実際にエージェントが無限ループして翌朝サーバーが止まっていた、という事例があります。

失敗3:温度パラメータが高くてツールコールが不安定

temperature=0.8 でエージェントを動かす
temperature=0 または 0.1 に設定する

なぜ重要か: ツールコール(Function Calling)は決定論的な出力を期待します。温度が高いとJSONの構造が崩れてパースエラーが発生します。

失敗4:コンテキスト長を活かしすぎてメモリ不足

❌ 256KトークンのPDFを一度にコンテキストに詰め込む
⭕ RAG(検索拡張生成)でチャンク分割してから処理する

なぜ重要か: 256Kトークンフル使用はVRAM消費が大きく急増します。エージェントでは長いコンテキストより、適切なチャンキングとベクトル検索の組み合わせのほうが精度・コスト両面で優れることが多いです。


参考・出典


まとめ:今日から始める3つのアクション

  1. 今日やること: Ollama で ollama run mistral-small-4 を実行し、ローカルでの動作を確認する(GPUが48GB未満の場合は :q4_k_m 量子化版を試す)
  2. 今週中: Mistral APIキーを取得し、LangGraphのサンプルコードをそのまま試してみる。ツールコールの安定性をGPT-5.4 Miniと比較してみる
  3. 今月中: 社内のプライベートデータを扱うエージェント向けに、vLLMサーバーをクラウドGPU(Lambda Labs、RunPod等)上に構築し、コスト対効果を測定する

あわせて読みたい:


著者: 佐藤傑(さとう・すぐる)
株式会社Uravation代表取締役。X(@SuguruKun_ai)フォロワー10万人超。
100社以上の企業向けAI研修・導入支援。著書累計3万部突破。
SoftBank IT連載7回執筆(NewsPicks最大1,125ピックス)。

ご質問・ご相談は お問い合わせフォーム からお気軽にどうぞ。

Need help moving from reading to rollout?

この記事を読んで導入イメージが固まってきた方へ

Uravationでは、AIエージェントの要件整理、PoC設計、社内導入、研修まで一気通貫で支援しています。

この記事をシェア

X Facebook LINE

※ 本記事の情報は2026年3月時点のものです。サービスの料金・仕様は変更される可能性があります。最新情報は各サービスの公式サイトをご確認ください。

関連記事