Heroku Inference
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2025年03月27日(木)
Table of Contents
Heroku Managed Inference and Agent アドオンは現在パイロット段階です。パイロットの一環として提供される製品は本番環境での使用を目的としたものではなく、ベータサービスとみなされています。また、https://www.salesforce.com/company/legal/agreements.jsp のベータサービス条件が適用されます。
Heroku Managed Inference and Agent アドオンを使用すると、対応している言語 (チャット) モデル、埋め込みモデル、拡散 (画像) モデルなど、さまざまな大規模な基盤 AI モデルに簡単にアクセスできます。
これらのモデルを使用するには、Heroku Managed Inference and Agent アドオンから 1 つ以上のモデルリソースを Heroku アプリにアタッチします。アドオンはアプリに環境設定を追加し、プロビジョニングされたモデルの呼び出しを可能にします。Heroku AI CLI プラグインまたは直接 curl リクエストを介してモデルを呼び出すことができます。
すべての利用可能なモデルは Amazon Bedrock でホストされています。Heroku はモデルにアクセスするための OpenAI 互換 API を提供します。
Python、Ruby、JavaScript (Node.js) のクイックスタートガイドを参照してください。
ツール
このアドオンを使用すると、大規模言語モデル (LLM) は組み込みの再試行機能とエラー修正機能を利用して、Heroku でツールを自動的に実行できるようになります。ユーザーが作成したカスタムツールと、Heroku が提供するコード実行などの組み込みツールの両方がサポートされます。
有効にするとアプリの LLM は、バックグラウンドで Heroku の制御ループをトリガーして dyno をプロビジョニング、実行、プロビジョニング解除するツールを呼び出します。このアクションの追跡情報はモデルの出力に含まれます。
詳細は、Heroku ツールを参照してください。
利点
Heroku がアドオンを所有し、管理します。ユーザーのデータ (外部で実行される特定の Heroku ツール)に送信されるデータは除く) が安全な AWS アカウントの外部に送信されることはありません。推論プロンプトと完了は、ユーザーが制御する Heroku Logplex を介して一時的にのみログに記録されます。
使用可能なモデル
以下のモデルが利用可能です。
リージョン: us
モデルドキュメント | 種類 | API エンドポイント | モデルソース | 説明 |
---|---|---|---|---|
claude-3-5-sonnet-latest | text → text |
v1/chat/completions | Anthropic | チャットとツール呼び出しをサポートする最先端の大規模言語モデル。 |
claude-3-5-haiku | text → text |
v1/chat/completions | Anthropic | チャットとツール呼び出しをサポートする、迅速で手頃な価格の大規模言語モデル。 |
cohere-embed-multilingual | text → embedding |
v1/embeddings | Cohere | 複数の言語をサポートする最先端の埋め込みモデル。このモデルは検索拡張生成 (RAG) 検索の開発に役立ちます。 |
stable-image-ultra | text → image |
v1/images/generations | Stability AI | 最先端の拡散 (画像生成) モデル。 |
リージョン: eu
モデルドキュメント | 種類 | API エンドポイント | モデルソース | 説明 |
---|---|---|---|---|
claude-3-5-sonnet | text → text |
v1/chat/completions | Anthropic | チャットとツール呼び出しをサポートする最先端の大規模言語モデル。 |
claude-3-haiku | text → text |
v1/chat/completions | Anthropic | チャットとツール呼び出しをサポートする、迅速で手頃な価格の大規模言語モデル。 |
cohere-embed-multilingual | text → embedding |
v1/embeddings | Cohere | 複数の言語をサポートする最先端の埋め込みモデル。このモデルは検索拡張生成 (RAG) 検索の開発に役立ちます。 |
CLI プラグインをインストールする
Heroku はモデルリソースを操作するための AI CLI プラグインを提供します。
まだインストールしていない場合は、Heroku CLI をインストールします。次に、Heroku AI プラグインをインストールします。
heroku plugins:install @heroku/plugin-ai
すべてのプラグインコマンドについての詳細は、Heroku AI CLI プラグインコマンドリファレンスを参照してください。
AI モデルリソースへのアクセスをプロビジョニングする
モデルを使用するには、まずモデルリソース $MODEL_ID
を作成してアプリ $APP_NAME
にアタッチする必要があります。
アプリがない場合は、heroku create <your-new-app-name>
を使用してアプリを作成できます。
heroku ai:models:list
を実行すると利用可能なモデルを表示できます。使用するモデルを決定したら、次のコマンドを実行します。
heroku ai:models:create -a $APP_NAME $MODEL_ID
1 つのアプリに複数のモデルリソースをアタッチできます。デフォルトでは、アプリにアタッチする最初のモデルリソースには INFERENCE
というエイリスがあります。以降のアタッチメントにはランダムなエイリアス名が付けられるため、エイリアスに --as
フラグを指定することをお勧めします。具体的には、埋め込みモデルと拡散モデルに対して EMBEDDING
と DIFFUSION
の --as
値を使用することをお勧めします。
heroku ai:models:create -a $APP_NAME cohere-embed-multilingual --as EMBEDDING
heroku ai:models:create -a $APP_NAME stable-image-ultra --as DIFFUSION
チャットモデルには INFERENCE
というエイリアス、埋め込みモデル (cohere-embed-multilingual
) には EMBEDDING
というエイリアス、画像モデル (stable-image-ultra
) には DIFFUSION
というエイリアスを使用することをお勧めします。コード例はこのパターンに従っているため、コマンドの簡単なコピーと貼り付けにもこれらのエイリアスを使用することをお勧めします。
同じタイプの複数のモデルリソースを 1 つのアプリにアタッチする場合は、独自のエイリアスを指定し、使用しているコード例を結果の環境設定に置き換える必要があります。
モデルリソースの環境設定
モデルリソースをアプリにアタッチすると、アプリには 3 つの新しい環境設定が追加されます。これらの変数は、heroku config -a $APP_NAME
を呼び出すと確認できます。アプリのモデルリソースに INFERENCE
というエイリアス (デフォルト) がある場合、3 つの新しい環境設定は次のようになります。
INFERENCE_KEY
INFERENCE_MODEL_ID
INFERENCE_URL
これらの環境設定を現在の環境の環境変数として保存するには、次のコマンドを実行します。
export INFERENCE_KEY=$(heroku config:get INFERENCE_KEY -a $APP_NAME)
export INFERENCE_MODEL_ID=$(heroku config:get INFERENCE_MODEL_ID -a $APP_NAME)
export INFERENCE_URL=$(heroku config:get INFERENCE_URL -a $APP_NAME)
または、次を使用して環境設定を一度に表示およびエクスポートすることもできます。
eval $(heroku config -a $APP_NAME --shell | grep '^INFERENCE_' | tee /dev/tty | sed 's/^/export /')
後続のコマンドでは、アプリの <MODEL_RESOURCE>
をいずれかの --as
エイリアス (デフォルトで "INFERENCE"
) で指定できます。または、inference-production-curved-41276
など、モデルリソースの Slug で指定することもできます。heroku ai:models:info -a $APP_NAME
を実行し、アタッチされたモデルリソースの Slug とエイリアスを表示します。
言語固有の例
各エンドポイントには、Python、Ruby、JavaScript の言語固有のクイックスタートガイドがあります。
AI モデルリソースの呼び出し
API / curl リクエスト経由
標準的なモデル呼び出しは次のようになります。
curl $INFERENCE_URL/v1/chat/completions \
-H "Authorization: Bearer $INFERENCE_KEY" \
-d '{
"model": '"\"$INFERENCE_MODEL_ID\""',
<other model keyword-arguments, varies model to model>
}'
ただし、完全なエンドポイント URL は使用しているモデルによって異なります。たとえば、次のようになります。
- チャット (
claude-3-5-sonnet-latest
、claude-3-5-sonnet
、claude-3-5-haiku
、claude-3-haiku
) モデルは/v1/chat/completions
エンドポイントを使用します。 - 埋め込みモデル
cohere-embed-multilingual
は/v1/embeddings
エンドポイントを使用します。 - 拡散モデル
stable-image-ultra
はv1/images/generations
エンドポイントを使用します。
各モデルについての詳細は、モデルカードを参照してください。
リクエストが 29 秒を超えてタイムアウトするのを防ぐために、すべての推論リクエストでストリーミングを使用することをお勧めします。重要な注意事項: ツール呼び出しでストリーミングを使用する場合、Managed Inference アドオンは増分更新ではなく、各ツール呼び出しの後に完全な応答をストリーミングします。個々のツール呼び出しに 55 秒以上かかる場合は、タイムアウトが発生します。
Heroku AI プラグイン経由
標準的なモデル呼び出しは次のようになります。
heroku ai:models:call <MODEL_RESOURCE> -a $APP_NAME --prompt 'What is 1+2?'
各モデルについての詳細は、モデルカードを参照してください。
モニタリングとログ記録
モデルリソースの統計情報と現在の状況を表示するには、ai
プラグインを使用します。
heroku ai:models:info <MODEL_RESOURCE> -a $APP_NAME # model resource can be the resource ID or alias.
AI モデルリソースのプロビジョニング解除
heroku ai:models:create
コマンドのみを使用してモデルリソースを作成およびアタッチする場合は、heroku ai:models:destroy
を使用してそのリソースを破棄できます。
ただし、場合によってはユーザーが heroku ai:models:attach
を介して単一のモデルリソースを複数のアプリにアタッチすることもあります。複数のアプリに接続されたモデルリソースを破棄するには、まず、heroku ai:models:detach
を指定した 1 つのアプリを除き、すべてのアプリからリソースをデタッチする必要があります。次に、heroku ai:models:destroy
を実行するか、--force
フラグを指定して destroy コマンドを実行します。
AI モデルリソースの破棄
警告 この操作により、すべての関連データが破棄され、元に戻すことはできません。
AI モデルリソースを破棄するには、次のコマンドを実行します。
heroku ai:models:destroy <MODEL_RESOURCE> --app $APP_NAME
モデルリソースを破棄するときに、モデルリソースのエイリアスまたはリソース ID を指定できます。
AI モデルリソースのデタッチ
特定のアプリに対して create
の次に attach
モデルリソースを選択する場合、次を指定して AI モデルリソースを特定のアプリからデタッチできます。
heroku ai:models:detach <MODEL_RESOURCE> --app $APP_NAME
モデルリソースをデタッチするときに、モデルリソースのエイリアスまたはリソース ID を指定できます。
このアドオンは使用した分が請求されます。デタッチされた AI モデルリソースに対しては請求されません。また、アクティブに使用されていないアタッチされた AI モデルリソースに対しても請求されません。