0 / 0
資料の 英語版 に戻る
チャットAPIによるエージェント主導型ワークフローの構築
最終更新: 2025年1月29日
チャットAPIによるエージェント主導型ワークフローの構築

watsonx.aiチャット API と、ツール呼び出しをサポートする基盤モデルを使用して、エージェント駆動型アプリケーションを構築します。

エージェント型アプリケーションは、foundation modelモデルがユーザーとのインタラクションの流れを制御するエージェントとして機能することを可能にする。 あなたは、foundation modelモデルが使用できるツールを含む相互作用のパラメータを定義するが、foundation modelモデルが相互作用の現在の状態に基づいて次の最適なステップを決定することを許可する。 ツール・コールはファンクション・コールと呼ばれることもある。

実際のワークフローでは、すべてのインタラクションの開始時に、常に1つのツールを呼び出したいかもしれない。 後で、ユーザーがタスクに関するフォローアップの質問にどのように答えるかによって、異なるプロンプトを使いたいかもしれません。 あるいは、ワークフローを完成させるために必要な様々なサードパーティツールを呼び出したいかもしれない。 このようなオプションを定義しておき、時期が来たらfoundation modelモデルにプロンプトを返させたり、使用するツールを選ばせたりすることができる。

例えば、レストラン予約アプリは以下の情報を収集し、予約を作成する必要があるかもしれない:

  • 場所
  • ゲスト数
  • 日付と時刻

情報を収集する順番が重要なのは、1テーブルに入れるゲストの数が限られている場所や、天気の良い日には外の席の方が多く利用できるような場所に限られるかもしれない。 エージェントが予約リクエストを完了する前に、サードパーティの天気予報アプリのような追加ツールを呼び出すタイミングを、foundation modelモデルに判断させることができる。

対応基礎モデル

エージェント型ワークフローを構築する際には、以下の要件を満たすfoundation modelモデルを選択する:

  • チャットタスクの処理
  • ツール・コールをサポート
  • 次の行動を選択できる

以下のモデルIDを持つFoundationモデルは、チャットAPIを使った会話型ワークフローの中で、様々なツールを呼び出すために使うことができます:

チャットAPIからのツール呼び出しをサポートする基盤モデルのリストをプログラムで取得するには、List the available foundation modelsメソッドリクエストを送信する際に'filters=task_function_callingパラメータを指定します。

APIリファレンスを参照。

例:

curl -X GET \
  'https://{region}.ml.cloud.ibm.com/ml/v1/foundation_model_specs?version=2024-10-10&filters=task_function_calling'

これらの基礎モデルは、watsonx.ai、CrewAIのようなサードパーティのツールから推論することができる。 CrewAIは、エージェント型アプリケーションを構築するためのPythonフレームワークです。 詳しくはCrewAIのドキュメントをご覧ください。

サンプル・ノートブック

以下のサンプルノートブックがあります:

API の詳細

APIメソッドの詳細については、APIリファレンス・ドキュメントを参照のこと。

ツール・コールのリクエスト例

以下の例では、足し算の関数と掛け算の関数の2つのツールを定義している。 この例では、ユーザーの入力をfoundation modelに送信し、質問に答えるために使用するツールをモデルに選択させる。

以下の例では、変数'{url}をインスタンスに適した値、例えば'us-south.ml.cloud.ibm.comに置き換える。 独自のベアラートークンとプロジェクトIDを追加する。

curl -X POST \
  'https://{url}/ml/v1/text/chat?version=2024-10-08' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer eyJraWQiOi...'
  --data '{
      "model_id": "mistralai/mistral-large",
      "project_id": "4947c695-a374-428c-acca-332c1a1dc9e9",
      "messages": [
        {
          "role": "user",
          "content": [
            {
              "type": "text",
              "text": "What is 2 plus 4?"
            }
          ]
        }
      ],
      "tools": [
        {
          "type": "function",
          "function": {
            "name": "add",
            "description": "Adds the values a and b to get a sum.",
            "parameters": {
              "type": "object",
              "properties": {
                "a": {
                  "description": "A number value",
                  "type": "float"
                },
                "b": {
                  "description": "A number value",
                  "type": "float"
                }
              },
              "required": [
                "a",
                "b"
              ]
            }
          }
        },
        {
          "type": "function",
          "function": {
          "name": "multiply",
            "description": "Multiplies the values a and b.",
            "parameters": {
              "type": "object",
              "properties": {
                "a": {
                  "description": "A number value",
                  "type": "float"
                },
                "b": {
                  "description": "A number value",
                  "type": "float"
                }
              },
              "required": [
                "a",
                "b"
              ]
            }
          }
        }
      ],
      "tool_choice_option": "auto",
      "max_tokens": 300,
      "time_limit": 1000
      }'

サンプル出力は、モデル(この場合はmistral-large)がタスクに使用する正しいツール、「add関数を選択できることを示している。

{
  "id": "chat-a00942a130e84f83bc0090c38c2f419f",
  "model_id": "mistralai/mistral-large",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "tool_calls": [
          {
            "id": "chatcmpl-tool-77cbe4e94d88489383a0c6ed1b644674",
            "type": "function",
            "function": {
              "name": "add",
              "arguments": "{\"a\": 2, \"b\": 4}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "created": 1728413314,
  "model_version": "2.0.0",
  "created_at": "2024-10-08T18:48:34.818Z",
  "usage": {
    "completion_tokens": 25,
    "prompt_tokens": 189,
    "total_tokens": 214
  },
  "system": {
    "warnings": [
      {
        "message": "This model is a Non-IBM Product governed by a third-party license that may impose use restrictions and other obligations. By using this model you agree to its terms as identified in the following URL.",
        "id": "disclaimer_warning",
        "more_info": "https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/fm-models.html?context=wx"
      }
    ]
  }
}

granite-3-2b-instructによるツール呼び出しリクエストの例

次のリクエストは、足し算のための関数と掛け算のための関数の2つのツールを定義し、granite-3-2b-instruct foundation modelモデルにどちらのツールを使うかを尋ねるものである。

Graniteは、リクエストとともにシステム・プロンプトを提供すると、よりよくツールを呼び出すことができる。 以下のシステムプロンプトが使用される:

あなたは IBMが開発した Granite です。 あなたは、以下のツールにアクセスできる便利なAIアシスタントです。 ユーザーの問い合わせに回答するためにツールが必要な場合は、使用するツールのJSONリストを続けて記述した <|tool_call|> で応答します。 提供されたツールのリストに該当するツールがない場合は、そのリクエストに応えることができないことをユーザーに通知してください。

以下の例では、変数'{url}をインスタンスに適した値、例えば'us-south.ml.cloud.ibm.comに置き換える。 独自のベアラートークンとプロジェクトIDを追加する。

curl -X POST \
  'https://{url}/ml/v1/text/chat?version=2024-10-08' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer eyJraWQiOi...'

リクエストのボディには、以下のJSONスニペットが含まれている:

{
  "model_id": "ibm/granite-3-2b-instruct",
  "project_id": "4947c695-a374-428c-acca-332c1a1dc9e9",
  "messages": [
    {
      "role":"system",
      "content":[
        {
          "type":"text",
          "text":"You are Granite, developed by IBM. You are a helpful AI assistant with access to the following tools. When a tool is required to answer the user's query, respond with <|tool_call|> followed by a JSON list of tools used. If a tool does not exist in the provided list of tools, notify the user that you do not have the ability to fulfill the request."
      }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "What is 2 times 4?"
        }
      ]
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "add",
        "description": "Adds the values a and b to get a sum.",
        "parameters": {
          "type": "object",
          "properties": {
            "a": {
              "description": "A number value",
              "type": "float"
            },
            "b": {
              "description": "A number value",
               "type": "float"
            }
          },
          "required": [
            "a",
            "b"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "multiply",
        "description": "Multiplies the values a and b.",
        "parameters": {
          "type": "object",
          "properties": {
            "a": {
              "description": "A number value",
              "type": "float"
            },
            "b": {
              "description": "A number value",
               "type": "float"
            }
          },
          "required": [
            "a",
            "b"
          ]
        }
      }
    }
  ],
  "tool_choice_option": "auto",
  "max_tokens": 300,
  "time_limit": 10000
}

granite-3-2b-instructの foundation modelは、クエリに答えるための正しいツールを選択することができる。

返答は次のようになる:

{
  "id": "chat-34589b74fbd54d38ae2e0034cb6ea793",
  "model_id": "ibm/granite-3-2b-instruct",
  "model": "ibm/granite-3-2b-instruct",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "<tool_call>[{\"name\": \"multiply\", \"arguments\": {\"a\": 2, \"b\": 4}}]"
      },
      "finish_reason": "stop"
    }
  ],
  "created": 1736191541,
  "model_version": "1.1.0",
  "created_at": "2025-01-06T19:25:41.341Z",
  "usage": {
    "completion_tokens": 28,
    "prompt_tokens": 348,
    "total_tokens": 376
  }
}

詳細情報

親トピック 生成的AIソリューションのコーディング