2024年12月10日火曜日

LiteLLMを介してOpenAI Chat Completions APIでCohereのAPIを呼び出す

色々な生成AIのAPIをOpenAIのChat Completions APIで呼び出せるLiteLLMを介して、APEXアプリケーションからCohereを呼び出してみます。使用するAPEXアプリケーションは、こちらの記事「OllamaのStructured outputsの動作を確認する」で使用したAPEXアプリケーションです。Cohereを呼び出すための変更は行いません。CohereのAPIを呼び出すため、あらかじめCohereにSign Upし、APIキーを取得しておく必要があります。

LiteLLMはCohereの他にも、沢山の生成AIの呼び出しに対応しています。今回の記事ではCohereを呼び出しますが、より認証が難しいAzure OpenAI、Amazon BedrockまたはGoogle Vertex AIへの中継も機能として提供されています。

LiteLLMの無償利用の範囲には含まれないようですが、Spend Tracking、Budets、Logging、Alerting、ベータ・ステータスですがGuardrailsなどにも対応しているようです。

macOSのpodmanでLLMのコンテナを実行し、APEXアプリケーションが発行するOpenAI互換のAPI呼び出しをCohereに中継してもらいます。

LiteLLMのドキュメントのGetting Started - E2E Tutorialに沿って、作業を行います。

最初に、最新のLiteLLMのコンテナ・イメージをpullします。arm64とamd64版の双方があります。

podman pull ghcr.io/berriai/litellm:main-latest

% podman pull ghcr.io/berriai/litellm:main-latest

Trying to pull ghcr.io/berriai/litellm:main-latest...

Getting image source signatures

Copying blob sha256:d7861abab26c06aeabf9d3d53a791fdc9daa6b86198ce0fe0f437bba4e7cdf98

Copying blob sha256:55af26b7addf6c0f6fe5fed39393a1379356bb864caac1da91a0fd2fa77b911b

Copying blob sha256:59f5764b1f6d170ea07ca424965974024a14970ff826e9ffa3489c90dc040c24

Copying blob sha256:20b492075b4353011babc89e95b38477fb4360025e713cc90ed74110226c6d51

Copying blob sha256:580c698f01d552ba082146d79a5d345685322cbf4d7806f9bc89ef1198965c74

Copying blob sha256:17c53b71cbcc94ad3da5b596e2c5abc0fea084c0caf7e5e2a12becd8e778a3d6

Copying blob sha256:f47962b1d4a5184e79a14d73a365a228436bc6103409080d8f0b3b8185b4198f

Copying blob sha256:5dea7a5f6a24a4e9fe8953430961ee7db0a9c5038941bbad9823b620814f224d

Copying blob sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1

Copying blob sha256:41a1b9d022e146cad2686d48059b8f903055aa30d85615d7462c7e91f9045398

Copying blob sha256:9359a9a66c90420ec1dc0169db5d58ce3be80f63f8dc45588e96a00884426b76

Copying blob sha256:968c6af1cc6ed48480181a4b39c06da65ce88ee4e3c2de8b952a695c22f4b64d

Copying blob sha256:063443d269af824376c7c21c5a2d45c0ca7114b120c59edf6af1a232f14fe8c1

Copying blob sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1

Copying config sha256:b3a579138ec25f4dc7c2848684bd0aac13afb4151014fcb4f777f9f06a51c4ed

Writing manifest to image destination

b3a579138ec25f4dc7c2848684bd0aac13afb4151014fcb4f777f9f06a51c4ed

% 


LiteLLMの構成ファイルを作成します。config.yamlとします。Cohereのcommad-r-plusを呼び出すための最低限の設定をファイルに記述します。

model_listの直下にあるmodel_nameは、LiteLLMへ発行するAPIに指定するLiteLLMとしてのモデル名です。以下ではcohere-command-r-plusとしています。litellm_paramsmodelcohere/command-r-plusとしています。生成AIのプロバイダとそのプロバイダが提供しているモデル名を/で連結します。最初の部分がプロバイダの指定になります。openai、azure、bedrockなどの設定があります。今回の設定では、Cohereのcommand-r-plusを呼び出すようにしています。
model_list:
  - model_name: cohere-command-r-plus
    litellm_params:
      model: cohere/command-r-plus
      api_key: [CohereのAPIキー]

proxy_settings:
    allowed_models: [
      "cohere-command-r-plus"
    ]
LiteLLMのコンテナを実行します。以下のコマンドを実行します。

デタッチ・オプション(-d)、および削除オプション(--rm)を加えているので、podman runで作成されたコンテナlitellmはバックグラウンドで実行されます。また、litellmを停止するとコンテナは削除されます。カレント・ディレクトリに作成したconfig.yamlは、コンテナ内の/app/config.yamlにマップされます。マップされたファイルを構成ファイルとして参照するように--config /app/config.yamlオプションを与えています。--port 8000でLiteLLMのサーバーがポート8000番で接続を待ち受けるようにし、podmanの-p 8000:8000オプションで、コンテナのポート8000をホストのポート8000にマップしています。

以上のオプション指定により起動したLiteLLMのProxy Serverに対して、APEXアプリケーションからOpenAI互換のChat Completions APIを発行します。
podman run -d --rm --name litellm \
-v ${PWD}/config.yaml:/app/config.yaml \
-p 8000:8000 \
ghcr.io/berriai/litellm:main-latest \
--config /app/config.yaml \
--port 8000

% podman run -d --rm --name litellm \

-v ${PWD}/config.yaml:/app/config.yaml \

-p 8000:8000 \

ghcr.io/berriai/litellm:main-latest \

--config /app/config.yaml \

--port 8000

c21b84100cf7d7c1c7bec15d71d8537f31e7dcdf5363875bb3f2ffc01a1929a4

% 


podman logs litellmを実行し、コンテナ内のサーバーの起動を確認します。

podman logs litellm

% podman logs litellm

INFO:     Started server process [1]

INFO:     Waiting for application startup.

INFO:     Application startup complete.

INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

ynakakoshi@Ns-Macbook litellm-proxy % 


ローカル環境で動作しているAPEXアプリケーションにサインインし、問合せを行っているモデルを確認します。

API Endpointの指定は以下になります。APEXが動作しているOracle Database 23ai Freeがコンテナで動作しているため、コンテナからホスト・マシンを指すhost.containers.internalがホスト名になります。

http://host.containers.internal:8000/v1/chat/completions

Model NameはLiteLLMのmodel_nameとして設定したcohere-command-r-plus、CohereのAPIキーはLiteLLMに設定してあるため、Credential Static IDの設定は不要です。

以上の設定を行い、以下のメッセージを送信しました。

あなたは誰ですか?

以下のレスポンスが得られました。

私はCohereによって構築されたCommand R+という大規模な言語モデルです。私は人間ユーザーに包括的な応答を提供するように訓練されたAIアシスタント チャットボットです。

LiteLLM経由で、正しくCohereのcommand-r-plusが呼び出されているようです。


Oracle APEXのアプリケーションはOracle Databaseで実行されるため、生成AIもOracle Databaseから呼び出す必要があります。Amazon Bedrock、Azure OpenAI、Google Vertex AIなど、APIの呼び出し形式や認証方式はそれぞれ異なります。OpenAIもですが、PL/SQLで記述されたクライアント・ライブラリは提供されていないので、それぞれの生成AIのプロバイダに合わせたREST APIのメッセージを作るところから、PL/SQLでコーディングする必要があります。

Oracle APEX 24.1から提供されているパッケージAPEX_AIでも、現時点では構成できる生成AIプロバイダはOpenAI、Cohere、Oracle生成AIサービスの3つに限定されています。

LiteLLMのProxy Serverを使うと、OpenAIのAPIひとつで各種生成AIを呼び出せるようになるため、PL/SQLのコーディング量は減ります。無償で使える機能の範囲は広くはないようですが、Oracle Databaseから生成AIを呼び出すにあたって、検討の価値があるオプションのひとつです。

今回の記事は以上になります。