ローカル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サーバーを実現しましょう。
関連記事
Claude CodeでREST API開発|設計からテストまでAI駆動で高速構築
Claude Codeでコードレビュー|AIを活用した品質チェックとレビュー効率化
Claude Codeのコンテキスト管理術|大規模プロジェクトで精度を維持する方法
Claude Codeのカスタムスラッシュコマンド作成ガイド|独自ワークフローの自動化
Claude Codeでデータベース移行・マイグレーション|安全なスキーマ変更の実践
Claude Codeでデバッグを効率化|バグ修正・エラー解析の実践テクニック
Claude Codeでドキュメント自動生成|README・API仕様書・技術文書の効率的な作り方
Claude Codeでエラーハンドリング実装|堅牢なアプリケーションを構築するパターン集