ローカルLLMをAPI化する方法|vLLM・FastAPIで自社AIサーバーを構築

kento_morota 14分で読めます
社内のAI・IT活用、技術がわかる相手に無料相談。 相談 →
目次

ローカルLLMをチーム全体や社内システムから利用するには、APIサーバーとして提供する仕組みが必要です。個人のPCで動かすだけでなく、APIとして公開することで、Webアプリケーション、チャットボット、業務システムなど多様なサービスからAIの機能を呼び出せるようになります。

本記事では、ローカルLLMをAPIサーバーとして構築する方法を、Ollama、vLLM、FastAPIの3つのアプローチで解説します。OpenAI APIと互換性のある形で構築すれば、既存のツールやライブラリをそのまま活用できます。

ローカルLLMをAPI化するメリット

ローカルLLMをAPI化することで得られるメリットは多岐にわたります。

複数ユーザー・複数システムからの利用

APIサーバーとして構築すれば、社内の複数のユーザーや業務システムから同時にAIを利用できます。チャットボット、文書要約、コーディング支援など、さまざまな用途で1つのサーバーを共有できます。

OpenAI API互換でエコシステムを活用

OpenAI APIと同じインターフェースで構築すれば、LangChain、LlamaIndex、各種チャットUIなど、OpenAI API対応のツールやライブラリがそのまま使えます。エンドポイントURLを変更するだけで、クラウドからローカルに切り替えることも可能です。

セキュリティとコストの両立

データを社外に出さないセキュリティを確保しながら、クラウドAPI利用料の削減も実現できます。特に利用頻度が高い場合、ローカルAPIサーバーのコストパフォーマンスは非常に高くなります。

方法1:OllamaでのAPIサーバー構築(初心者向け)

最も手軽にローカルLLMをAPI化する方法は、Ollamaを使う方法です。インストールするだけで自動的にAPIサーバーが起動します。

セットアップ手順

# Ollamaのインストール
curl -fsSL https://ollama.com/install.sh | sh

# モデルのダウンロード
ollama pull llama4-scout:8b
ollama pull qwen3:8b

# APIサーバーは自動で起動(デフォルト: localhost:11434)
# 確認
curl http://localhost:11434/api/tags

社内ネットワークからアクセス可能にする

デフォルトではlocalhostのみからアクセス可能です。社内の他のPCからアクセスできるようにするには、環境変数を設定します。

# /etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"

# 設定を反映
sudo systemctl daemon-reload
sudo systemctl restart ollama

OpenAI互換APIの利用

Ollamaは/v1/chat/completionsエンドポイントでOpenAI互換APIを提供します。

# OpenAI互換APIでのリクエスト
curl http://192.168.1.100:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3:8b",
    "messages": [
      {"role": "system", "content": "あなたは親切なアシスタントです"},
      {"role": "user", "content": "中小企業のDX推進のポイントを教えてください"}
    ]
  }'

PythonのOpenAIライブラリからも利用できます。

from openai import OpenAI

client = OpenAI(
    base_url="http://192.168.1.100:11434/v1",
    api_key="dummy"  # Ollamaでは不要だがライブラリの仕様上必要
)

response = client.chat.completions.create(
    model="qwen3:8b",
    messages=[
        {"role": "system", "content": "あなたは親切なアシスタントです"},
        {"role": "user", "content": "売上データの分析方法を教えてください"}
    ]
)
print(response.choices[0].message.content)

方法2:vLLMでの高性能APIサーバー構築(本格運用向け)

vLLMは、高スループット・低レイテンシでのLLM推論に特化したサーバーエンジンです。複数リクエストの同時処理に優れており、本格的な業務利用に適しています。

vLLMの特徴

  • PagedAttention:GPUメモリを効率的に管理し、同時処理能力を向上
  • Continuous Batching:複数リクエストを動的にバッチ処理
  • OpenAI互換API:標準で対応
  • 高いスループット:Ollamaの数倍の同時処理性能

インストールとセットアップ

# vLLMのインストール(CUDA環境が必要)
pip install vllm

# APIサーバーの起動
vllm serve meta-llama/Llama-4-Scout-8B-Instruct \
  --host 0.0.0.0 \
  --port 8000 \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.9 \
  --dtype auto

量子化モデルの利用

量子化モデルを使用することで、限られたGPUメモリでも大きなモデルを動かせます。

# AWQ量子化モデルでの起動
vllm serve TheBloke/Llama-4-Scout-8B-Instruct-AWQ \
  --host 0.0.0.0 \
  --port 8000 \
  --quantization awq \
  --max-model-len 4096

vLLM APIへのアクセス

# curlでのリクエスト
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta-llama/Llama-4-Scout-8B-Instruct",
    "messages": [
      {"role": "user", "content": "Pythonで簡単なWebスクレイピングの例を示してください"}
    ],
    "temperature": 0.7,
    "max_tokens": 1024
  }'

方法3:FastAPIでカスタムAPIサーバーを構築

独自のビジネスロジックや認証機能を組み込みたい場合は、FastAPIを使ってカスタムAPIサーバーを構築する方法が最適です。

基本的な構成

from fastapi import FastAPI, HTTPException, Depends
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from pydantic import BaseModel
from openai import OpenAI
import uvicorn

app = FastAPI(title="社内AIサーバー")
security = HTTPBearer()

# Ollamaをバックエンドとして使用
client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="dummy"
)

# リクエスト/レスポンスモデル
class ChatRequest(BaseModel):
    message: str
    model: str = "qwen3:8b"
    max_tokens: int = 1024

class ChatResponse(BaseModel):
    response: str
    model: str
    usage: dict

# 簡易認証
API_KEYS = {"team-a-key-xxx", "team-b-key-yyy"}

def verify_token(credentials: HTTPAuthorizationCredentials = Depends(security)):
    if credentials.credentials not in API_KEYS:
        raise HTTPException(status_code=401, detail="Invalid API Key")
    return credentials.credentials

@app.post("/api/chat", response_model=ChatResponse)
async def chat(request: ChatRequest, token: str = Depends(verify_token)):
    try:
        response = client.chat.completions.create(
            model=request.model,
            messages=[
                {"role": "system", "content": "あなたは社内アシスタントです。丁寧に回答してください。"},
                {"role": "user", "content": request.message}
            ],
            max_tokens=request.max_tokens,
        )
        return ChatResponse(
            response=response.choices[0].message.content,
            model=request.model,
            usage={
                "prompt_tokens": response.usage.prompt_tokens,
                "completion_tokens": response.usage.completion_tokens,
            }
        )
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8080)

FastAPIカスタムサーバーのメリット

  • 認証・認可:APIキーやJWTトークンによるアクセス制御
  • ログ記録:利用状況の記録、監査ログの出力
  • レート制限:リクエスト数の制限による負荷管理
  • プロンプト管理:業務ごとのシステムプロンプトを一元管理
  • 前後処理:入力のバリデーションや出力のフォーマット加工

3つの方法の比較と選び方

用途や技術レベルに応じて最適な方法を選びましょう。

比較項目 Ollama vLLM FastAPI + Ollama
難易度 低 中 中〜高
セットアップ 5分 30分〜 1時間〜
同時処理性能 低〜中 高 バックエンド依存
カスタマイズ性 低 中 高
認証機能 なし 基本的 自由に実装可能
適した規模 個人〜小チーム チーム〜部門 部門〜全社
GPU要件 CPU可 NVIDIA GPU必須 バックエンド依存

おすすめの選び方:

  • まず試したい:Ollamaでスタート
  • 高負荷な本番利用:vLLMを導入
  • 独自のビジネスロジックが必要:FastAPIでカスタム構築

本番運用のためのベストプラクティス

APIサーバーを本番環境で安定して運用するためのポイントを解説します。

Docker化による環境管理

Docker(docker-compose)を使って環境を管理することで、セットアップの再現性と運用の安定性が向上します。

# docker-compose.yml
version: "3.8"
services:
  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    restart: always

  webui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    depends_on:
      - ollama
    restart: always

volumes:
  ollama_data:

リバースプロキシの設定

Nginxをリバースプロキシとして配置することで、SSL対応やアクセス制限を追加できます。

# /etc/nginx/conf.d/llm-api.conf
server {
    listen 443 ssl;
    server_name llm.internal.example.com;

    ssl_certificate /etc/ssl/certs/internal.pem;
    ssl_certificate_key /etc/ssl/private/internal.key;

    # IPアドレスによるアクセス制限
    allow 192.168.1.0/24;
    deny all;

    location /v1/ {
        proxy_pass http://localhost:11434/v1/;
        proxy_set_header Host $host;
        proxy_read_timeout 300s;
    }
}

モニタリングとアラート

安定運用のために、以下の項目を監視しましょう。

  • GPU使用率・VRAM使用量:nvidia-smiで確認
  • レスポンスタイム:異常に遅い場合はモデルサイズや同時接続数を見直し
  • エラー率:OOMエラーやタイムアウトの発生頻度
  • ディスク容量:モデルファイルとログの肥大化に注意
# GPU状態の継続的な監視
watch -n 1 nvidia-smi

# Ollamaのログ確認
journalctl -u ollama -f

既存システムとの連携例

構築したAPIサーバーを既存の業務システムと連携させる例を紹介します。

RAGシステムとの統合

RAG(検索拡張生成)と組み合わせることで、社内文書をベースにした質問応答システムを構築できます。LangChainを使えば、ローカルAPIサーバーとベクトルデータベースを簡単に統合できます。

Slack・Teams連携

SlackやMicrosoft TeamsのBotとしてAPIを呼び出すことで、チャットツール上からAIを利用できる環境を構築できます。FAQ対応ボットとして活用すれば、社内の問い合わせ対応コストを削減できます。

バッチ処理での活用

議事録の要約や定型文書の生成など、定期的に実行するバッチ処理にもAPIサーバーは最適です。cronジョブからAPIを呼び出すスクリプトを設定すれば、自動化が完了します。

まとめ:ローカルLLMをAPIで組織全体に展開する

ローカルLLMをAPIサーバー化することで、個人の利用から組織全体での活用へとステップアップできます。

本記事のポイント:

  • Ollamaは最も手軽にAPI化できる方法(初心者におすすめ)
  • vLLMは高スループットの本番運用に最適
  • FastAPIを使えば認証やビジネスロジックを自由に組み込める
  • OpenAI互換APIで既存のツール・ライブラリをそのまま活用可能
  • Docker化、リバースプロキシ、モニタリングで安定運用を実現

まずはOllamaのセットアップから始めて、社内LANでのAPI公開を試してみましょう。利用が拡大してきたらvLLMやFastAPIへの移行を検討してください。パフォーマンス最適化やセキュリティ対策も忘れずに行い、安全で快適な自社AIサーバーを実現しましょう。

#API#vLLM#ローカルLLM
ManageAI 先行モニター企業 募集中|先着5社・2026年11月末まで

生成AIの利用費、「誰が・何のために・いくら」まで見えていますか?

株式会社カイダンと共同開発したAI利用ガバナンスSaaS「ManageAI」は、OpenAI・Azure OpenAI・Claude・AWS Bedrock・Google Vertex AIの費用と利用状況を、部署・利用者・プロジェクト別に可視化します。導入は読み取り専用キーの登録だけ。初期費用0円・月額5万円(税別)で先行モニター企業を募集しています。

ニュースリリースを読む
共有:
無料メルマガ

週1回、最新の技術記事をお届け

AI・クラウド・開発の最新記事を毎週月曜にメールでお届けします。登録は無料、いつでも解除できます。

※ プライバシーポリシーに基づき管理します

関連記事

Related / 9 articles

  1. AI・機械学習

    Stable Diffusionの使い方とビジネス利用の注意点|ローカル画像生成入門

    自社PCで動かせる画像生成AI「Stable Diffusion」の始め方をビジネス目線で解説します。実行ツールの選び方とVRAMを軸にした必要スペック、商用利用で最重要となるモデルのライセンス確認、中小企業での現実的な活用シーン、クラウド型とローカル型の選び方をまとめました。

  2. AI・機械学習

    Claude CodeのSkills(エージェントスキル)とは?作り方と活用例を解説

    Claude Codeに定型ワークフローを覚えさせる「Agent Skills」を解説。SKILL.mdの書き方、スラッシュコマンドやサブエージェントとの使い分け、チームで再利用できるスキル設計のコツを実例つきでまとめました。

  3. AI・機械学習

    ベクトルデータベース比較|Chroma・Qdrant・FAISS・pgvectorの選び方を解説

    RAG構築に欠かせないベクトルデータベースを比較解説。Chroma・Qdrant・FAISS・pgvector・Milvus/Weaviateの特徴と使いどころ、状況別の選び方の早見表、検索品質を左右する前工程の重要性まで、中小企業の社内文書検索を想定して実務目線でまとめました。

  4. AI・機械学習

    Whisperで無料の文字起こし環境を作る|ローカル実行なら会議音声が社外に出ない

    OpenAIの音声認識モデルWhisperを自社PCで動かし、無料かつセキュアな文字起こし環境を作る手順を解説。日本語向けのモデルサイズの選び方、インストールから実行までの3ステップ、精度を上げる録音のコツ、ローカルLLMと組み合わせた議事録自動化まで紹介します。

  5. AI・機械学習

    vLLMとは?Ollamaとの違いと使い方|社内LLMサーバーを高速化する本命ツール

    複数人で使う社内LLMサーバーの本命「vLLM」を解説。PagedAttentionと連続バッチングで速くなる仕組み、Ollamaとの使い分け、インストールからOpenAI互換サーバーの起動、動作確認と調整までの導入手順、導入前に知っておきたい注意点をまとめました。

  6. AI・機械学習

    AIエンジニアとは?仕事内容・必要スキル・なり方・年収まで完全ガイド

    AIエンジニアとは何かを解説。主な仕事内容とデータサイエンティストや機械学習エンジニアとの違い、必要なスキルと役立つ資格、学習ロードマップ、年収と将来性、企業が採用・育成・外注で確保する方法まで、目指す個人にも採用したい企業にも役立つ内容です。

  7. AI・機械学習

    中小企業のAIエンジニア確保術|採用・育成・外注どれを選ぶべきか比較

    中小企業のAIエンジニア確保の方法として、正社員採用・既存社員の育成・外部委託の3つの選択肢を比較します。それぞれが向いているケースや外部委託のメリットと注意点、目的から逆算した現実的な使い分けと進め方まで、自社に合ったAI人材確保の考え方を解説します。

  8. AI・機械学習

    AIエンジニアの年収と将来性|需要が伸び続ける理由とキャリアの広げ方

    AIエンジニアの年収水準と将来性を解説します。AI活用の中小企業への広がりやIT人材不足など需要が伸び続ける3つの背景、技術×ドメイン知識・ビジネス設計力・MLOpsといった年収を高めるスキルの掛け合わせ方、今後のキャリアパスの選択肢まで紹介します。

  9. AI・機械学習

    未経験からAIエンジニアになるには?学習ロードマップ6ステップと転職のコツ

    未経験からAIエンジニアになるための学習ロードマップを6ステップで解説します。Pythonの基礎、データ処理と統計、機械学習、深層学習・生成AIの学び方からポートフォリオ作り、資格の活用、前職の業務知識で差別化する転職活動のコツまで紹介します。

ManageAI

先行モニター企業 募集中

生成AIのコストを「部署別」に、請求書より先に。

先着5社限定・2026年11月末まで。初期費用0円・月額5万円(税別)で、正式版と同等の機能に加え、開発者と伴走者による導入支援を追加費用なしで提供します。プロンプト原文は一切取得しません。

株式会社カイダン × Harmonic Society株式会社の共同事業|読み取り専用キーの登録だけで導入できます