以下の内容はhttps://kazuhira-r.hatenablog.com/entry/2026/03/09/003402より取得しました。


LiteLLM Proxy(LLM Gateway)でOllamaへのプロキシサーバーを立ててみる

これは、なにをしたくて書いたもの?

モデルプロバイダーに対するプロキシサーバー、というか各プロバイダーに対するAPIの読み替えができるソフトウェアを
探していたのですが、LiteLLMというものがあったので試してみることにしました。

LiteLLM

LiteLLMのGitリポジトリーはこちら。

GitHub - BerriAI/litellm: Python SDK, Proxy Server (AI Gateway) to call 100+ LLM APIs in OpenAI (or native) format, with cost tracking, guardrails, loadbalancing and logging. [Bedrock, Azure, OpenAI, VertexAI, Cohere, Anthropic, Sagemaker, HuggingFace, VLLM, NVIDIA NIM] · GitHub

ドキュメントはこちら。

LiteLLM - Getting Started | liteLLM

LiteLLMは入出力をバックエンドにしているモデルプロバイダーのエンドポイントに読み替えられるソフトウェアです。

プロキシサーバーとして実行する形態と、Python SDKを使ってアプリケーション内で使う方法の2つの使い方があります。
プロキシサーバーとして実行する形態は、LLM Gatewayと呼ぶようです。

今回関心があるのはLLM Gatewayの方ですね。

サポートしているモデルプロバイダーですが、それはそれはたくさんあります…。

Providers | liteLLM

今回は、モデルプロバイダーとしてOllamaを使おうと思います。

Ollama | liteLLM

使い方や設定はこのあたりを見ていけばよさそうです。

Getting Started Tutorial | liteLLM

Overview | liteLLM

CLI - Quick Start | liteLLM

ひとまず使ってみましょう。

環境

今回の環境はこちら。

$ python3 --version
Python 3.12.3


$ uv --version
uv 0.10.9

Ollama。

$ bin/ollama --version
ollama version is 0.17.7

LiteLLM Proxy(LLM Gateway)をインストールする

まずはLiteLLM Proxy(LLM Gateway)をインストールしましょう。

インストールはpipパッケージとDockerイメージの2つの方法がありますが、今回はpipパッケージとしてインストールします。

プロジェクトを作成。

$ uv init --vcs none litellm-proxy
$ cd litellm-proxy

LiteLLM Proxy(LLM Gateway)をインストール。[proxy]が必要なことに注意しましょう。

$ uv add 'litellm[proxy]'

プロジェクトの情報。

pyproject.toml

[project]
name = "litellm-proxy"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "litellm[proxy]>=1.82.0",
]

インストールされたライブラリーの一覧。

$ uv pip list
Package                   Version
------------------------- ------------
aiohappyeyeballs          2.6.1
aiohttp                   3.13.3
aiosignal                 1.4.0
annotated-doc             0.0.4
annotated-types           0.7.0
anyio                     4.12.1
apscheduler               3.11.2
attrs                     25.4.0
azure-core                1.38.2
azure-identity            1.25.2
azure-storage-blob        12.28.0
backoff                   2.2.1
boto3                     1.40.76
botocore                  1.40.76
certifi                   2026.2.25
cffi                      2.0.0
charset-normalizer        3.4.5
click                     8.3.1
croniter                  6.0.0
cryptography              46.0.5
distro                    1.9.0
dnspython                 2.8.0
email-validator           2.3.0
fastapi                   0.135.1
fastapi-sso               0.16.0
fastuuid                  0.14.0
filelock                  3.25.0
frozenlist                1.8.0
fsspec                    2026.2.0
gunicorn                  23.0.0
h11                       0.16.0
hf-xet                    1.3.2
httpcore                  1.0.9
httpx                     0.28.1
httpx-sse                 0.4.3
huggingface-hub           1.6.0
idna                      3.11
importlib-metadata        8.7.1
isodate                   0.7.2
jinja2                    3.1.6
jiter                     0.13.0
jmespath                  1.1.0
jsonschema                4.26.0
jsonschema-specifications 2025.9.1
litellm                   1.82.0
litellm-enterprise        0.1.33
litellm-proxy-extras      0.4.50
markdown-it-py            4.0.0
markupsafe                3.0.3
mcp                       1.26.0
mdurl                     0.1.2
msal                      1.35.1
msal-extensions           1.3.1
multidict                 6.7.1
oauthlib                  3.3.1
openai                    2.26.0
orjson                    3.11.7
packaging                 26.0
polars                    1.38.1
polars-runtime-32         1.38.1
propcache                 0.4.1
pycparser                 3.0
pydantic                  2.12.5
pydantic-core             2.41.5
pydantic-settings         2.13.1
pygments                  2.19.2
pyjwt                     2.11.0
pynacl                    1.6.2
pyroscope-io              0.8.16
python-dateutil           2.9.0.post0
python-dotenv             1.2.2
python-multipart          0.0.22
pytz                      2026.1.post1
pyyaml                    6.0.3
redis                     7.3.0
referencing               0.37.0
regex                     2026.2.28
requests                  2.32.5
rich                      13.7.1
rpds-py                   0.30.0
rq                        2.7.0
s3transfer                0.14.0
shellingham               1.5.4
six                       1.17.0
sniffio                   1.3.1
soundfile                 0.12.1
sse-starlette             3.3.2
starlette                 0.52.1
tiktoken                  0.12.0
tokenizers                0.22.2
tqdm                      4.67.3
typer                     0.24.1
typing-extensions         4.15.0
typing-inspection         0.4.2
tzlocal                   5.3.1
urllib3                   2.6.3
uvicorn                   0.41.0
uvloop                    0.21.0
websockets                15.0.1
yarl                      1.23.0
zipp                      3.23.0

OllamaをバックエンドにしてLiteLLM Proxy(LLM Gateway)を設定する

では、本題に入りましょう。LiteLLM Proxy(LLM Gateway)のバックエンドにOllamaを設定します。

このあたりを見ながら、設定ファイルを用意。

config.yaml

model_list:
  - model_name: "gemma3"
    litellm_params:
      model: "ollama_chat/gemma3:4b"
  - model_name: "llama3.2"
    litellm_params:
      model: "ollama_chat/llama3.2:3b"

Ollama | liteLLM

Overview | liteLLM

model_nameはAPI呼び出しを行う時のモデル名です。実際のOllamaのモデルはlitellm_paramsmodelで指定します。

ollama_chatというのは、モデルプロバイダーごとのprefixと思えばよさそうです。

この設定ファイルを--configオプションで指定して、LiteLLM Proxy(LLM Gateway)を起動。

$ uv run litellm --config config.yaml

こんな表示が出てきます。4000ポートでリッスンしているようです。

LiteLLM: Proxy initialized with Config, Set models:
    gemma3
    llama3.2
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:4000 (Press CTRL+C to quit)

まずはGemma3にアクセスしてみます。

$ curl -s -X POST -H 'Content-Type: application/json' localhost:4000/chat/completions -d \
  '{
      "model": "gemma3",
      "messages": [
        {
          "role": "user",
          "content": "あなたの自己紹介をしてください"
        }
      ]
  }' | jq

レスポンス。

{
  "id": "chatcmpl-5321b0c9-adec-4488-a15f-dd719723174b",
  "created": 1772982917,
  "model": "gemma3",
  "object": "chat.completion",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "こんにちは!私はGemmaです。Google DeepMindによってトレーニングされた、大規模言語モデルです。\n\n私はオープンウェイトモデルであり、広く一般に公開されています。テキストと画像をインプットとして受け取り、テキストのみを出力することができます。\n\n私の作成者は、Birmingham大学のチームです。\n\nより詳しく知りたい場合は、私のリポジトリ ([https://github.com/gemma/gemma](https://github.com/gemma/gemma)) をご覧ください。\n",
        "role": "assistant"
      }
    }
  ],
  "usage": {
    "completion_tokens": 102,
    "prompt_tokens": 14,
    "total_tokens": 116
  }
}

返ってきましたね。

Llama 3.2。

$ curl -s -X POST -H 'Content-Type: application/json' localhost:4000/chat/completions -d \
  '{
      "model": "llama3.2",
      "messages": [
        {
          "role": "user",
          "content": "あなたの自己紹介をしてください"
        }
      ]
  }' | jq

こちらもOKです。

{
  "id": "chatcmpl-df2831dc-74de-4238-b39a-daf7f8797ebd",
  "created": 1772982975,
  "model": "llama3.2",
  "object": "chat.completion",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "私は、Meta の機械学習モデルです。私は、さまざまなトピックで助言し、情報を提供することができます。私は人工知能の分野でActive Learningを使用して、自分の知識を広げ ongoinglyします。",
        "role": "assistant"
      }
    }
  ],
  "usage": {
    "completion_tokens": 58,
    "prompt_tokens": 33,
    "total_tokens": 91
  }
}

ドキュメントを見ているとAuthorization: BearerでAPIキーを指定していますが、今回は省略しています。

Virtual Keys | liteLLM

ひとまず動いたのでこれでよしとしましょう。

おわりに

LiteLLM Proxy(LLM Gateway)でOllamaへのプロキシサーバーを立ててみました。

けっこう苦労するのかなと思っていたのですが、割とあっさりと動きました。   ちょっとドキュメントがとっつきにくい気がするのですが、こういうのこそ触ってみないとわからないなという感じです。

LiteLLM Proxyを使って、少しやってみたいことがあるのですが…それはまたの機会に。




以上の内容はhttps://kazuhira-r.hatenablog.com/entry/2026/03/09/003402より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14