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のドキュメントをご覧ください。
サンプル・ノートブック
以下のサンプルノートブックがあります:
サードパーティのツールを呼び出すチャットを構築するには、REST API を使用します: watsonxと mistral-largeて、簡単なチャット会話とツールの呼び出しを行う。
PythonSDKを使用して、システム・プロンプト、アシスタント、ユーザーなど、さまざまなユーザー・タイプの間で会話を行い、さまざまなツールを呼び出して、ユーザー入力に基づいて数式を実行する。 watsonxとmistral-large/mistral-largeを使って簡単なチャット会話とツールコールをするを参照
PythonSDKを使用して、会話に含める情報を取得するツールを呼び出します。LangChainを使用して電卓関数を記述・実装し、LangGraphを使用したワークフローを説明することも含まれます。 簡単な計算を実行するツールのサポートで、'watsonx、およびmistralai/mistral-largeを使用する を参照。
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ソリューションのコーディング