Managed Inference and Agent アドオンでの Heroku ツールの使用
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2025年01月24日(金)
Table of Contents
Heroku Managed Inference and Agent アドオンは現在パイロット段階です。パイロットの一環として提供される製品は本番環境での使用を目的としたものではなく、ベータサービスとみなされています。また、https://www.salesforce.com/company/legal/agreements.jsp のベータサービス条件が適用されます。
Heroku Managed Inference and Agent アドオンは、基本的な推論の域を超えて機能を拡張し、厳選された対応ツールセットを自動で実行します。
これらのツールを使用すると、Web サイトの検索、PDF の読み取り、Heroku データベースとのやり取り、LLM で作成されたコードの実行、さらには Heroku にすでにデプロイされているカスタムコードとの統合などを行えるエージェントワークフローを作成できるようになります。
Heroku ツールは、v1/chat/completions API と互換性があります。Managed Inference アドオンが、LLM から送信された、tools オブジェクト経由での呼び出しを許可されている認識済みのツール (type="heroku_tool"
) を呼び出すリクエストを処理すると、そのツールが自動的に実行されます。
リクエストが 29 秒を超えてタイムアウトするのを防ぐために、すべての推論リクエストでストリーミングを使用することをお勧めします。重要な注意事項: ツール呼び出しでストリーミングを使用する場合、Managed Inference アドオンは増分更新ではなく、各ツール呼び出しの後に完全な応答をストリーミングします。個々のツール呼び出しに 55 秒以上かかる場合は、タイムアウトが発生します。
ツール呼び出しと推論リクエストが 29 秒以内に完了する場合は、ストリーミングを使用しないことを選択できます。応答にはツール呼び出しの全履歴とそれぞれの出力が含まれます。
この記事に記載されているツールでは、簡略化された表記法を使用して詳細を指定します。Managed Inference のアドオンは、入力パラメータ、説明、その他のメタデータなど、必要なすべての情報を各ツールの API リクエストに自動で追加します。この抽象化により、LLM は余分な構成を必要とせずに、必要なすべてのツールの詳細にアクセスできるようになります。
target_app_name
パラメータを受け付けるツールの場合は、対象のアプリに Managed Inference and Agent アドオンがアタッチされていることを確認してください。アドオンをアタッチすると、対象のアプリ内で One-off dyno を起動する権限がアドオンに付与されます。
Heroku ツール: web_browsing_single_page
web_browsing_single_page
ツールを使用すると、LLM が Web ページを取得できるようになります。
例:
{
"model": "claude-3-5-sonnet-latest",
"messages": [
{
"role": "user",
"content": "Who won the Formula 1 2024 Belgian Grand Prix? You can use the Wikipedia for the 2024 Belgian Grand Prix: https://en.m.wikipedia.org/wiki/2024_Belgian_Grand_Prix"
}
],
"tools": [
{
"type": "heroku_tool",
"function": {
"name": "web_browsing_single_page"
}
}
],
"tool_choice": "auto"
}
Heroku ツール: web_browsing_multi_page
web_browsing_multi_page
ツールを使用すると、LLM が Web ページを取得したり、リンクをクリックして目的地に到達したりできるようになります。
例:
{
"model": "claude-3-5-sonnet-latest",
"messages": [
{
"role": "user",
"content": "Visit devcenter.heroku.com and tell me which regions Heroku Private Spaces are available in."
}
],
"tools": [
{
"type": "heroku_tool",
"function": {
"name": "web_browsing_multi_page"
}
}
],
"tool_choice": "auto"
}
Heroku ツール: database_get_schema
database_get_schema
ツールを使用すると、LLM がアプリにアタッチされた Heroku Postgres データベースのスキーマをクエリできるようになります。このツールは One-off dyno を起動して指定されたデータベースのパブリックスキーマを調査し、LLM がその構造を理解できるようにします。
任意でエイリアスを使用してデータベースアタッチメント名を指定できます。エイリアスを指定しない場合、ツールはデフォルトで DATABASE
を使用します。これは、Heroku Postgres アドオンの標準エイリアスです。
すべてのデータベースツールにおいて、本番環境でデータをクエリする場合は、Heroku Postgres のフォロワーデータベースを使用することをお勧めします。フォロワーデータベースを使用すると、本番データベースに単発的なクエリによる追加の負荷がかからなくなります。フォロワーデータベースはデフォルトで読み取り専用でもあるため、LLM がデータを変更することはできません。
例:
{
"model": "claude-3-5-sonnet-latest",
"messages": [
{
"role": "user",
"content": "Hi, can you tell me about my database's schema?"
}
],
"tools": [
{
"type": "heroku_tool",
"function": {
"name": "database_get_schema"
},
"runtime_params": {
"target_app_name": "$APP_NAME",
"tool_params": {
"db_attachment": "DATABASE"
}
}
}
],
"tool_choice": "auto"
}
Heroku ツール: database_run_query
database_run_query
ツールは、target_app_name
Heroku アプリ内で One-off dyno を起動し、その後 db_attachment
で指定されたデータベースに対して SQL クエリを実行します。このツールは、特に database_get_schema
ツールと組み合わせると便利です。
すべてのデータベースツールにおいて、本番環境でデータをクエリする場合は、Heroku Postgres のフォロワーデータベースを使用することをお勧めします。フォロワーデータベースを使用すると、本番データベースに単発的なクエリによる追加の負荷がかからなくなります。フォロワーデータベースはデフォルトで読み取り専用でもあるため、LLM がデータを変更することはできません。
{
"model": "claude-3-5-sonnet-latest",
"messages": [
{
"role": "user",
"content": "How many unique user accounts have been created since 2021-01-01?"
}
],
"tools": [
{
"type": "heroku_tool",
"function": {
"name": "database_get_schema"
},
"runtime_params": {
"target_app_name": "$APP_NAME",
"tool_params": {
"db_attachment": "DATABASE"
}
}
},
{
"type": "heroku_tool",
"function": {
"name": "database_run_query"
},
"runtime_params": {
"target_app_name": "$APP_NAME",
"tool_params": {
"db_attachment": "DATABASE"
}
}
}
],
"tool_choice": "auto"
}
Heroku ツール: code_exec_*
code_exec_*
ツールを使用すると、エージェントが自ら生成したコードを実行できるようになります。またこのツールは、コードを実行する前にパッケージや依存関係をインストールする機能も備えています。LLM は環境準備のための shell_command
と、言語固有のコードである code
の 2 つのパラメータを指定します。コードの実行中にエラーが発生した場合、エージェントはエラーメッセージを読み取り、コードまたは依存関係を調整して自動的に再試行します。
現在は code_exec_go
、code_exec_node
、code_exec_python
、code_exec_ruby
の 4 つのプログラミング言語がサポートされています。
これらのコード実行ツールのいずれかを使い始める前に、次のコード実行アプリケーションのいずれかをアカウントにデプロイし、使用する LLM モデルリソースをそのアプリにアタッチする必要があります。これらのコード実行アプリケーションでは、アクティブに稼働中の dyno は必要ありません。以下のサポートされているプログラミング言語ごとに、Heroku へのワンクリックデプロイボタンが用意されています。
例:
{
"model": "claude-3-5-sonnet-latest",
"messages": [
{
"role": "user",
"content": "Use the code exec tool to take the sha256 of the following string: 'Heroku Rocks'"
}
],
"tools": [
{
"type": "heroku_tool",
"function": {
"name": "code_exec_python"
},
"runtime_params": {
"target_app_name": "$APP_NAME"
}
}
],
"tool_choice": "auto"
}
Heroku ツール: dyno_run_command
dyno_run_command
ツールを使用すると、エージェントは Heroku アプリにすでにデプロイ済みの任意のコードを実行できるようになります。このツールは既存のコードを LLM で使用できるようにするのに役立ちます。実行するエントリポイントの cmd
コマンドを指定するとともに、関数が行う処理を説明する description
と、期待される parameters
も提供する必要があります。
例:
{
"model": "claude-3-5-sonnet-latest",
"messages": [
{
"role": "user",
"content": "Create a Trello card with the content `Call mom` in the TODO list."
}
],
"tools": [
{
"type": "heroku_tool",
"function": {
"name": "dyno_run_command"
},
"runtime_params": {
"target_app_name": "$APP_NAME",
"tool_params": {
"cmd": "create_card"
}
},
"description": "This tool is able to create Trello cards in the TODO list.",
"parameters": {
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "The content for the Trello card"
}
},
"required": ["content"]
}
}
],
"tool_choice": "auto"
}
追加の説明とパラメータのフィールドに注意してください。
Heroku ツール: pdf_read
pdf_read
ツールを使用すると、LLM が URL から PDF を読み取ることができるようになります。単一の Web ページにアクセスする場合と同程度のレイテンシーが発生します。
例:
{
"model": "claude-3-5-sonnet-latest",
"messages": [
{
"role": "user",
"content": "Write me a 200 word summary for the paper https://arxiv.org/pdf/2401.18059v1"
}
],
"tools": [
{
"type": "heroku_tool",
"function": {
"name": "pdf_read"
}
}
],
"tool_choice": "auto"
}
Heroku ツール: search_web
search_web
ツールを使用すると、LLM が Web サイトを検索できるようになります。このツールでは複数の Web ページを読み取る必要があるため、約 6 ~ 7 秒のレイテンシーが発生します。
例:
{
"model": "claude-3-5-sonnet-latest",
"messages": [
{
"role": "user",
"content": "What are the current NFL standings?"
}
],
"tools": [
{
"type": "heroku_tool",
"function": {
"name": "search_web"
}
}
],
"tool_choice": "auto"
}