Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[OutSystems] Agentic AI Specialist 試験範囲補強情報: MC...

[OutSystems] Agentic AI Specialist 試験範囲補強情報: MCP と Action Calling

2026-02-24(火) に開催された OutSystems Users Meetup Online のセッション発表で使用したスライドです。
スライドの内容に対応する解説は、下記で公開しています。

[OutSystems] Agentic AI 試験範囲補強情報: MCP と Action calling
https://qiita.com/moriya-takasi/items/711313f85f2c3feeac60

イベント情報:
【Online OSUG Meetup】OutSystems 認定試験攻略!合格への道と活用術
https://usergroups.outsystems.com/events/details/outsystems-inc-tokyo-presents-online-osug-meetup-outsystems-ren-ding-shi-yan-gong-lue-he-ge-henodao-tohuo-yong-shu-1/

イベント録画:
https://www.youtube.com/watch?v=r2k1ytUFIec

Avatar for moriya.takasi

moriya.takasi

March 04, 2026

More Decks by moriya.takasi

Other Decks in Programming

Transcript

  1. Agentic AI Specialist 試験範囲補強情報: MCP と Action Calling [Online OSUG

    Meetup] 2026-02-24 Tue 守谷 崇(OutSystems MVP) @伊藤忠テクノソリューションズ
  2. 問題:ODC の Agentic App は、サーバーアクション (ツール)が大規模言語モデル(LLM)によって確実に 解釈され呼び出されることをどのように保証しますか? サーバーアクションのロジックを Agentic App

    のランタイム環境内で 自動的に Python スクリプトへ変換 することによって。 アクションの名前、説明、パラ メータの型を分析し、それらを LLM 向けの構造化された JSON ス キーマに変換することによって。 LLM が入力パラメータを知る必要 なく呼び出せる、直接的で同期的 な REST API エンドポイントを作 成することによって。 LLM はアクションの定義を無視し、 必要な入力を推測するためにシス テムプロンプトのみに依存する。 https://learn.outsystems.com/training/journeys/agentic-ai-exam-3546/sample-exam/odc/3544 から抜粋した内容を機械翻訳
  3. 問題:ODC の Agentic App は、サーバーアクション (ツール)が大規模言語モデル(LLM)によって確実に 解釈され呼び出されることをどのように保証しますか? サーバーアクションのロジックを Agentic App

    のランタイム環境内で 自動的に Python スクリプトへ変換 することによって。 アクションの名前、説明、パラ メータの型を分析し、それらを LLM 向けの構造化された JSON ス キーマに変換することによって。 LLM が入力パラメータを知る必要 なく呼び出せる、直接的で同期的 な REST API エンドポイントを作 成することによって。 LLM はアクションの定義を無視し、 必要な入力を推測するためにシス テムプロンプトのみに依存する。 https://learn.outsystems.com/training/journeys/agentic-ai-exam-3546/sample-exam/odc/3544 から抜粋した内容を機械翻訳
  4. システムプロンプト(BuildMessages で設定) "あなたは担当者リストの専門エージェントです。 提供されたツールを組み合わせて、ユーザーの 質問に正確に答えてください。 ## ツールの特性とヒント - 担当者を特定する必要がある場合は、まず `SearchContacts`

    を使用してください。 - `SearchContacts` の結果だけでは不足してい る情報(詳細な連絡先など)が必要な場合のみ、 `GetContactDetail` を使用してください。 - リストの人数を数えたり、特定の条件でフィル タリングしたりする場合は、ツールから得られ たデータをもとに、あなた自身で推論・集計し て回答してください。 ## 制約事項 - ツールで得られない情報を、自身の知識で捏造 しないでください。 - 解決できない場合は「その質問に答えることは できません」と回答してください。" 担当者リストの名前を検 索して見つかった名前と Id のリストを返す 指定された Id を持つ担当 者の詳細情報を返す
  5. { "messages": [{"role": "user", "content": [{"text": "米田さんのメールアドレスを教えて"}]}], "system": [{"text": "あなたは担当者リストの専門エージェントです。提供されたツールを組み合わせて、ユーザーの質問に正確に答えてください。¥r¥n¥r¥n##

    ツールの特性とヒント¥r¥n- 担当者を特定する必要がある場合は、まず `SearchContacts` を使用してください。¥r¥n- `SearchContacts` の結果だけでは不足している情報(詳細な連絡先など)が必要な場合のみ、`GetContactDetail` を使用してください。¥r¥n- リストの人数を数えたり、特定の条件でフィルタリングし たりする場合は、ツールから得られたデータをもとに、あなた自身で推論・集計して回答してください。¥r¥n¥r¥n## 制約事項¥r¥n- ツールで得られない情報を、自身の知識で捏造しないでください。¥r¥n- 解決できない場合は「その質問に答えることは できません」と回答してください。"}], "inferenceConfig": {}, "toolConfig": { "tools": [ {"toolSpec": { "name": "SearchContacts", "description": "提供された文字列を使って、担当者リストの名前とフリガナを、部分一致で検索するのに使う。見つかった担当者の Id と名前は、リスト形式で返される。名前以外の担当者情報が必要な場合は、このツールで得られ た Id を、別のツールで使って確認すること。", "inputSchema": {"json": {"type": "object", "properties": { "QueryParam_Name": {"type": "string", "description": "担当者リストの、名前またはフリガナの部分一致検索をするのに使う文字列"} }, "required": ["QueryParam_Name"] }} }}, {"toolSpec": { "name": "GetContactDetail", "description": "担当者リストから、指定された Id を持つ担当者の、完全な詳細情報(メールアドレス、電話番号、住所など)を返す。指定する Id は、別のツールで確認しておく必要がある。", "inputSchema": {"json": {"type": "object", "properties": { "Id": { "description": "担当者の識別子(別のツールで得ることができる)", "maximum": 9223372036854775807, "type": "integer", "minimum": -9223372036854775808 } }, "required": ["Id"] }} }} ] }, "additionalModelRequestFields": {} } { "output": { "message": {"role": "assistant", "content": [{ "toolUse": { "toolUseId": "tooluse_eMPD8yx9LZc9nVKszDoEey", "name": "SearchContacts", "input": {"QueryParam_Name": "米田"} } }] } }, "stopReason": "tool_use", "metrics": {"latencyMs": 1075}, "usage": {"inputTokens": 1764, "outputTokens": 57, "totalTokens": 1821} } ↑アプリから LLM ↓LLM からアプリ 3回中1回目
  6. { "messages": [{"role": "user", "content": [{"text": "米田さんのメールアドレスを教えて"}]}], "system": [{"text": "あなたは担当者リストの専門エージェントです。提供されたツールを組み合わせて、ユーザーの質問に正確に答えてください。¥r¥n¥r¥n##

    ツールの特性とヒント¥r¥n- 担当者を特定する必要がある場合は、まず `SearchContacts` を使用してください。¥r¥n- `SearchContacts` の結果だけでは不足している情報(詳細な連絡先など)が必要な場合のみ、`GetContactDetail` を使用してください。¥r¥n- リストの人数を数えたり、特定の条件でフィルタリングし たりする場合は、ツールから得られたデータをもとに、あなた自身で推論・集計して回答してください。¥r¥n¥r¥n## 制約事項¥r¥n- ツールで得られない情報を、自身の知識で捏造しないでください。¥r¥n- 解決できない場合は「その質問に答えることは できません」と回答してください。"}], "inferenceConfig": {}, "toolConfig": { "tools": [ {"toolSpec": { "name": "SearchContacts", "description": "提供された文字列を使って、担当者リストの名前とフリガナを、部分一致で検索するのに使う。見つかった担当者の Id と名前は、リスト形式で返される。名前以外の担当者情報が必要な場合は、このツールで得られ た Id を、別のツールで使って確認すること。", "inputSchema": {"json": {"type": "object", "properties": { "QueryParam_Name": {"type": "string", "description": "担当者リストの、名前またはフリガナの部分一致検索をするのに使う文字列"} }, "required": ["QueryParam_Name"] }} }}, {"toolSpec": { "name": "GetContactDetail", "description": "担当者リストから、指定された Id を持つ担当者の、完全な詳細情報(メールアドレス、電話番号、住所など)を返す。指定する Id は、別のツールで確認しておく必要がある。", "inputSchema": {"json": {"type": "object", "properties": { "Id": { "description": "担当者の識別子(別のツールで得ることができる)", "maximum": 9223372036854775807, "type": "integer", "minimum": -9223372036854775808 } }, "required": ["Id"] }} }} ] }, "additionalModelRequestFields": {} } { "output": { "message": {"role": "assistant", "content": [{ "toolUse": { "toolUseId": "tooluse_eMPD8yx9LZc9nVKszDoEey", "name": "SearchContacts", "input": {"QueryParam_Name": "米田"} } }] } }, "stopReason": "tool_use", "metrics": {"latencyMs": 1075}, "usage": {"inputTokens": 1764, "outputTokens": 57, "totalTokens": 1821} } ↑アプリから LLM ↓LLM からアプリ ユーザープロンプト システムプロンプト ツール情報(アクション名、Description、入力パラメーター情報) 3回中1回目
  7. { "messages": [{"role": "user", "content": [{"text": "米田さんのメールアドレスを教えて"}]}], "system": [{"text": "あなたは担当者リストの専門エージェントです。提供されたツールを組み合わせて、ユーザーの質問に正確に答えてください。¥r¥n¥r¥n##

    ツールの特性とヒント¥r¥n- 担当者を特定する必要がある場合は、まず `SearchContacts` を使用してください。¥r¥n- `SearchContacts` の結果だけでは不足している情報(詳細な連絡先など)が必要な場合のみ、`GetContactDetail` を使用してください。¥r¥n- リストの人数を数えたり、特定の条件でフィルタリングし たりする場合は、ツールから得られたデータをもとに、あなた自身で推論・集計して回答してください。¥r¥n¥r¥n## 制約事項¥r¥n- ツールで得られない情報を、自身の知識で捏造しないでください。¥r¥n- 解決できない場合は「その質問に答えることは できません」と回答してください。"}], "inferenceConfig": {}, "toolConfig": { "tools": [ {"toolSpec": { "name": "SearchContacts", "description": "提供された文字列を使って、担当者リストの名前とフリガナを、部分一致で検索するのに使う。見つかった担当者の Id と名前は、リスト形式で返される。名前以外の担当者情報が必要な場合は、このツールで得られ た Id を、別のツールで使って確認すること。", "inputSchema": {"json": {"type": "object", "properties": { "QueryParam_Name": {"type": "string", "description": "担当者リストの、名前またはフリガナの部分一致検索をするのに使う文字列"} }, "required": ["QueryParam_Name"] }} }}, {"toolSpec": { "name": "GetContactDetail", "description": "担当者リストから、指定された Id を持つ担当者の、完全な詳細情報(メールアドレス、電話番号、住所など)を返す。指定する Id は、別のツールで確認しておく必要がある。", "inputSchema": {"json": {"type": "object", "properties": { "Id": { "description": "担当者の識別子(別のツールで得ることができる)", "maximum": 9223372036854775807, "type": "integer", "minimum": -9223372036854775808 } }, "required": ["Id"] }} }} ] }, "additionalModelRequestFields": {} } { "output": { "message": {"role": "assistant", "content": [{ "toolUse": { "toolUseId": "tooluse_eMPD8yx9LZc9nVKszDoEey", "name": "SearchContacts", "input": {"QueryParam_Name": "米田"} } }] } }, "stopReason": "tool_use", "metrics": {"latencyMs": 1075}, "usage": {"inputTokens": 1764, "outputTokens": 57, "totalTokens": 1821} } ↑アプリから LLM ↓LLM からアプリ ユーザープロンプト システムプロンプト ツール情報(アクション名、Description、入力パラメーター情報) アクションの名前、説明、パラ メータの型を分析し、それらを LLM 向けの構造化された JSON ス キーマに変換することによって。 3回中1回目
  8. { "messages": [{"role": "user", "content": [{"text": "米田さんのメールアドレスを教えて"}]}], "system": [{"text": "あなたは担当者リストの専門エージェントです。提供されたツールを組み合わせて、ユーザーの質問に正確に答えてください。¥r¥n¥r¥n##

    ツールの特性とヒント¥r¥n- 担当者を特定する必要がある場合は、まず `SearchContacts` を使用してください。¥r¥n- `SearchContacts` の結果だけでは不足している情報(詳細な連絡先など)が必要な場合のみ、`GetContactDetail` を使用してください。¥r¥n- リストの人数を数えたり、特定の条件でフィルタリングし たりする場合は、ツールから得られたデータをもとに、あなた自身で推論・集計して回答してください。¥r¥n¥r¥n## 制約事項¥r¥n- ツールで得られない情報を、自身の知識で捏造しないでください。¥r¥n- 解決できない場合は「その質問に答えることは できません」と回答してください。"}], "inferenceConfig": {}, "toolConfig": { "tools": [ {"toolSpec": { "name": "SearchContacts", "description": "提供された文字列を使って、担当者リストの名前とフリガナを、部分一致で検索するのに使う。見つかった担当者の Id と名前は、リスト形式で返される。名前以外の担当者情報が必要な場合は、このツールで得られ た Id を、別のツールで使って確認すること。", "inputSchema": {"json": {"type": "object", "properties": { "QueryParam_Name": {"type": "string", "description": "担当者リストの、名前またはフリガナの部分一致検索をするのに使う文字列"} }, "required": ["QueryParam_Name"] }} }}, {"toolSpec": { "name": "GetContactDetail", "description": "担当者リストから、指定された Id を持つ担当者の、完全な詳細情報(メールアドレス、電話番号、住所など)を返す。指定する Id は、別のツールで確認しておく必要がある。", "inputSchema": {"json": {"type": "object", "properties": { "Id": { "description": "担当者の識別子(別のツールで得ることができる)", "maximum": 9223372036854775807, "type": "integer", "minimum": -9223372036854775808 } }, "required": ["Id"] }} }} ] }, "additionalModelRequestFields": {} } { "output": { "message": {"role": "assistant", "content": [{ "toolUse": { "toolUseId": "tooluse_eMPD8yx9LZc9nVKszDoEey", "name": "SearchContacts", "input": {"QueryParam_Name": "米田"} } }] } }, "stopReason": "tool_use", "metrics": {"latencyMs": 1075}, "usage": {"inputTokens": 1764, "outputTokens": 57, "totalTokens": 1821} } ↑アプリから LLM ↓LLM からアプリ ユーザープロンプト システムプロンプト ツール情報(アクション名、Description、入力パラメーター情報) 「ツール使え」の指示 使うアクション名と各パラメーターに指定する値 アクションの名前、説明、パラ メータの型を分析し、それらを LLM 向けの構造化された JSON ス キーマに変換することによって。 3回中1回目
  9. { "messages": [ {"role": "user", "content": [{"text": "米田さんのメールアドレスを教えて"}]}, {"role": "assistant",

    "content": [{"toolUse": { "toolUseId": "tooluse_eMPD8yx9LZc9nVKszDoEey", "name": "SearchContacts", "input": {"QueryParam_Name": "米田"} }}]}, {"role": "user", "content": [{"toolResult": { "toolUseId": "tooluse_eMPD8yx9LZc9nVKszDoEey", "content": [{"text": "{¥"List¥":[{¥"Id¥":495,¥"Name¥":¥"¥¥u7C73¥¥u7530 ¥¥u8B19¥¥u4FE1¥"}]}"}] }}]} ], "system": [{"text": "あなたは担当者リストの専門エージェントです。提供されたツールを組み合わせて、ユーザーの質問に正確に答えてください。¥r¥n¥r¥n## ツールの特性とヒント¥r¥n- 担当者を特定する必要がある場合は、まず `SearchContacts` を使用してください。¥r¥n- `SearchContacts` の結果だけでは不足している情報(詳細な連絡先など)が必要な場合のみ、`GetContactDetail` を使用してください。¥r¥n- リストの人数を数えたり、特定の条件でフィルタリングし たりする場合は、ツールから得られたデータをもとに、あなた自身で推論・集計して回答してください。¥r¥n¥r¥n## 制約事項¥r¥n- ツールで得られない情報を、自身の知識で捏造しないでください。¥r¥n- 解決できない場合は「その質問に答えることは できません」と回答してください。"}], "inferenceConfig": {}, "toolConfig": {"tools": [ {"toolSpec": {"name": "SearchContacts", "description": "提供された文字列を使って、担当者リストの名前とフリガナを、部分一致で検索するのに使う。見つかった担当者の Id と名前は、リスト形式で返される。名前以外の担当者情報が必要な場合は、このツールで得られた Id を、別のツールで使って確認すること。", "inputSchema": {"json": {"type": "object", "properties": {"QueryParam_Name": {"type": "string", "description": "担当者リストの、名前またはフリガナの部分一致検索をするのに使う文字列"}}, "required": ["QueryParam_Name"] }} }}, {"toolSpec": {"name": "GetContactDetail", "description": "担当者リストから、指定された Id を持つ担当者の、完全な詳細情報(メールアドレス、電話番号、住所など)を返す。指定する Id は、別のツールで確認しておく必要がある。", "inputSchema": {"json": {"type": "object", "properties": {"Id": {"description": "担当者の識別子(別のツールで得ることができる)", "maximum": 9223372036854775807, "type": "integer", "minimum": -9223372036854775808}}, "required": ["Id"] }} }} ]}, "additionalModelRequestFields": {} }, { "output": {"message": {"role": "assistant", "content": [ {"text": "検索結果では、¥"米田 祥信¥"という担当者が見つかりました。さらに詳細な情報が必要であれば、次のようにして取得できます。"}, {"toolUse": { "toolUseId": "tooluse_MHjsFTQmwe3uTpN2scw5tP", "name": "GetContactDetail", "input": {"Id": 495} }} ] }}, "stopReason": "tool_use", "metrics": {"latencyMs": 1812}, "usage": {"inputTokens": 1867, "outputTokens": 106, "totalTokens": 1973} } ↑アプリから LLM ↓LLM からアプリ 3回中2回目
  10. { "messages": [ {"role": "user", "content": [{"text": "米田さんのメールアドレスを教えて"}]}, {"role": "assistant",

    "content": [{"toolUse": { "toolUseId": "tooluse_eMPD8yx9LZc9nVKszDoEey", "name": "SearchContacts", "input": {"QueryParam_Name": "米田"} }}]}, {"role": "user", "content": [{"toolResult": { "toolUseId": "tooluse_eMPD8yx9LZc9nVKszDoEey", "content": [{"text": "{¥"List¥":[{¥"Id¥":495,¥"Name¥":¥"¥¥u7C73¥¥u7530 ¥¥u8B19¥¥u4FE1¥"}]}"}] }}]} ], "system": [{"text": "あなたは担当者リストの専門エージェントです。提供されたツールを組み合わせて、ユーザーの質問に正確に答えてください。¥r¥n¥r¥n## ツールの特性とヒント¥r¥n- 担当者を特定する必要がある場合は、まず `SearchContacts` を使用してください。¥r¥n- `SearchContacts` の結果だけでは不足している情報(詳細な連絡先など)が必要な場合のみ、`GetContactDetail` を使用してください。¥r¥n- リストの人数を数えたり、特定の条件でフィルタリングし たりする場合は、ツールから得られたデータをもとに、あなた自身で推論・集計して回答してください。¥r¥n¥r¥n## 制約事項¥r¥n- ツールで得られない情報を、自身の知識で捏造しないでください。¥r¥n- 解決できない場合は「その質問に答えることは できません」と回答してください。"}], "inferenceConfig": {}, "toolConfig": {"tools": [ {"toolSpec": {"name": "SearchContacts", "description": "提供された文字列を使って、担当者リストの名前とフリガナを、部分一致で検索するのに使う。見つかった担当者の Id と名前は、リスト形式で返される。名前以外の担当者情報が必要な場合は、このツールで得られた Id を、別のツールで使って確認すること。", "inputSchema": {"json": {"type": "object", "properties": {"QueryParam_Name": {"type": "string", "description": "担当者リストの、名前またはフリガナの部分一致検索をするのに使う文字列"}}, "required": ["QueryParam_Name"] }} }}, {"toolSpec": {"name": "GetContactDetail", "description": "担当者リストから、指定された Id を持つ担当者の、完全な詳細情報(メールアドレス、電話番号、住所など)を返す。指定する Id は、別のツールで確認しておく必要がある。", "inputSchema": {"json": {"type": "object", "properties": {"Id": {"description": "担当者の識別子(別のツールで得ることができる)", "maximum": 9223372036854775807, "type": "integer", "minimum": -9223372036854775808}}, "required": ["Id"] }} }} ]}, "additionalModelRequestFields": {} }, { "output": {"message": {"role": "assistant", "content": [ {"text": "検索結果では、¥"米田 祥信¥"という担当者が見つかりました。さらに詳細な情報が必要であれば、次のようにして取得できます。"}, {"toolUse": { "toolUseId": "tooluse_MHjsFTQmwe3uTpN2scw5tP", "name": "GetContactDetail", "input": {"Id": 495} }} ] }}, "stopReason": "tool_use", "metrics": {"latencyMs": 1812}, "usage": {"inputTokens": 1867, "outputTokens": 106, "totalTokens": 1973} } ↑アプリから LLM ↓LLM からアプリ ユーザープロンプト ツール情報(アクション名、Description、入力パラメーター情報) 次の「ツール使え」の指示 使うアクション名と各パラメーターに指定する値 ツール(アクション)使用指示の内容と実行結果 システムプロンプト 3回中2回目
  11. { "messages": [ {"role": "user", "content": [{"text": "米田さんのメールアドレスを教えて"}]}, {"role": "assistant",

    "content": [{"toolUse": { "toolUseId": "tooluse_eMPD8yx9LZc9nVKszDoEey", "name": "SearchContacts", "input": {"QueryParam_Name": "米田"} }}]}, {"role": "user", "content": [{"toolResult": { "toolUseId": "tooluse_eMPD8yx9LZc9nVKszDoEey", "content": [{"text": "{¥"List¥":[{¥"Id¥":495,¥"Name¥":¥"¥¥u7C73¥¥u7530 ¥¥u8B19¥¥u4FE1¥"}]}"}] }}]}, {"role": "assistant", "content": [ {"text": "検索結果では、¥"米田 祥信¥"という担当者が見つかりました。さらに詳細な情報が必要であれば、次のようにして取得できます。"}, {"toolUse": {"toolUseId": "tooluse_MHjsFTQmwe3uTpN2scw5tP", "name": "GetContactDetail", "input": {"Id": 495}}} ]}, {"role": "user","content": [{"toolResult": { "toolUseId": "tooluse_MHjsFTQmwe3uTpN2scw5tP", "content": [{"text": "{¥"Contact¥":{¥"Id¥":495,¥"Name¥":¥"¥¥u7C73¥¥u7530 ¥¥u8B19¥¥u4FE1¥",¥"NameKana¥":¥"¥¥u30E8¥¥u30CD¥¥u30C0 ¥¥u30B1¥¥u30F3¥¥u30B7¥¥u30F3¥",¥"PostalCode¥":¥"312-0056¥",¥"Address¥":¥"¥¥u8328¥¥u57CE¥¥u770C¥¥u3072¥¥u305F¥¥u3061¥¥u306A¥¥u304B¥¥u5E02¥¥u9752¥¥u8449¥¥u753A2-19¥",¥"Phone¥":¥"0293-14- 1429¥",¥"Fax¥":null,¥"Email¥":¥"[email protected]¥"}}"}] }}]} ], "system": [{"text": "あなたは担当者リストの専門エージェントです。提供されたツールを組み合わせて、ユーザーの質問に正確に答えてください。¥r¥n¥r¥n## ツールの特性とヒント¥r¥n- 担当者を特定する必要がある場合は、まず `SearchContacts` を使用してください。¥r¥n- `SearchContacts` の結果だけでは不足している情報(詳細な連絡先など)が必要な場合のみ、`GetContactDetail` を使用してください。¥r¥n- リストの人数を数えたり、特定の条件でフィルタリングし たりする場合は、ツールから得られたデータをもとに、あなた自身で推論・集計して回答してください。¥r¥n¥r¥n## 制約事項¥r¥n- ツールで得られない情報を、自身の知識で捏造しないでください。¥r¥n- 解決できない場合は「その質問に答えることは できません」と回答してください。"}], "inferenceConfig": {}, "toolConfig": {"tools": [ {"toolSpec": {"name": "SearchContacts", "description": "提供された文字列を使って、担当者リストの名前とフリガナを、部分一致で検索するのに使う。見つかった担当者の Id と名前は、リスト形式で返される。名前以外の担当者情報が必要な場合は、このツールで得られた Id を、別のツールで使って確認すること。", "inputSchema": {"json": {"type": "object", "properties": {"QueryParam_Name": {"type": "string", "description": "担当者リストの、名前またはフリガナの部分一致検索をするのに使う文字列"}}, "required": ["QueryParam_Name"] }} }}, {"toolSpec": {"name": "GetContactDetail", "description": "担当者リストから、指定された Id を持つ担当者の、完全な詳細情報(メールアドレス、電話番号、住所など)を返す。指定する Id は、別のツールで確認しておく必要がある。", "inputSchema": {"json": {"type": "object", "properties": {"Id": {"description": "担当者の識別子(別のツールで得ることができる)", "maximum": 9223372036854775807, "type": "integer", "minimum": -9223372036854775808}}, "required": ["Id"] }} }} ]}, "additionalModelRequestFields": {} } { "output": {"message": {"role": "assistant", "content": [{"text": "この結果より、米田さんのメールアドレスは「[email protected]」であることがわかりました。"}]}}, "stopReason": "end_turn", "metrics": {"latencyMs": 976}, "usage": {"inputTokens": 2157, "outputTokens": 48, "totalTokens": 2205} } ↑アプリから LLM ↓LLM からアプリ ユーザープロンプト 2回目のツール使用指示の内容と実行結果 ツール情報(アクション名、Description、入力パラメーター情報) 最終的な回答 1回目のツール使用指示の内容と実行結果 システムプロンプト 3回中3回目
  12. Action Calling を使うときの注意点 • アクション名、Description、入力パラメーター情報(名前、 データ型、Description)が LLM に渡されるので、使い方 を推測しやすいような内容で設定する。 •

    システムプロンプトで、各アクションがどういうときに使 うものなのかを書いておくと、適切に使ってもらいやすい。 • やりとりが肥大化しやすいので詳細でありつつ簡潔に。 • (悲報)ODC PE のお試し LLM では、トークン量とリク エスト回数の速度制限がきつくて、試しにくい。
  13. まとめ • エージェントアクションに Action Calling でサーバー アクションを設定すると、LLM が判断してアクション を実行する。 •

    名前や Description を適切に設定しておく必要あり。 • Action Calling は、MCP の仕組みを利用している。 楽しい開発を!