AI エージェントスタジオでの AI エージェントワークフローの作成Summary<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } これらの一般的なガイドラインを使用して、AI エージェントスタジオで効果的な AI エージェントとエージェント型ワークフローを作成します。この記事では、明確なエージェント指示の記述方法、ツールとエージェントチームの設計方法、AI エージェントの実行の仕組み、および一般的な質問への回答について説明します。 AI エージェントを作成するための一般的なガイドライン 明確なエージェント型ワークフローの名前と説明を記述する エージェント型ワークフローの名前と説明を明確に記述して定義します。これらはユーザーの要求に基づいてスキルディスカバリーを促進するためです。 代わりに: 名前:ライセンス処理中説明:ソフトウェアライセンス割り当ては、ソフトウェアライセンスを割り当てるために使用されます。 次を使用します: 名前:ソフトウェアライセンス割り当て説明:ソフトウェアライセンスの割り当てプロセスでは、要求ユーザーの詳細を確認し、要求されたソフトウェアライセンスが利用可能かどうかを確認します。ユーザーが適格基準を満たしている場合、システムはライセンスの割り当てに進み、必要なソフトウェアへのシームレスなアクセスを確保します。 明確で正しい英語で指示を書く 言語品質が低いと、誤解や実行エラーにつながる可能性があります。 この代わりに:toolAを実行して結果を表示します。混乱させないでくださいこれを使用します:ツール A を実行して必要なデータをフェッチし、結果をユーザーに表示します。 論理ワークフローとしての指示の構造化 セクションとサブセクションを使用してユースケースの手順を構造化し、論理的なワークフローを作成します。これは、読者が予想されるフローを理解してナビゲートするのに役立ちます。 代わりに:ユーザーとライセンスの詳細を取得します。ユーザーが適格である場合は、ライセンスを割り当てます。次を使用します: インシデントを開いたユーザーの詳細をフェッチします。要求されたソフトウェアライセンスの詳細を確認します。ユーザーが要求されたソフトウェアライセンスにアクセスする資格があるかどうかを確認します。 ユーザーが適格である場合は、ソフトウェアライセンスを割り当てます。ユーザーが対象外の場合は、対象外であることをユーザーに通知します。 指示をエージェントの名前と説明に合わせます 想定されるエージェントが正しく選択されるように、エージェントの名前と説明に類似した用語を使用します。 コンテキスト: エージェント名:通知エージェントエージェントの説明:このエージェントは、指定されたユーザーのリストに通知を送信できます。 この代わりに:問題が発生したことをユーザーに伝えます。(これによりオーケストレーターが混乱し、通知エージェントではなくコミュニケーター エージェントが選択される可能性があります)。次を使用します:問題が発生したことをユーザーに通知します。(これは、オーケストレーターが通知エージェントを選択する必要があることを理解するのに役立ちます)。 各指示を 1 つのアクションに制限する 各指示は、1 つのアクションに焦点を当てる必要があります。1 つの指示に複数のアクションを組み合わせると、エージェントが 1 つのアクションを完了し、他のアクションを見落とす可能性があるため、実行中にステップがスキップされる可能性があります。バンドルされたアクションを個別の順序付けされた指示に分割します。 代わりにレコードを要約してユーザーに表示し、同じデータでレコードメモを更新します。次を使用します: レコードの詳細を要約します。要約されたレコードの詳細をユーザーに表示します。レコードサマリーでレコードを更新します。 指示では内部システム用語を使用しないでください 手順には、内部システム用語 (short_term_memory、スクラッチパッド、XML タグ内の変数など) を含めないでください。これらは価値を付加せず、エージェントを混乱させる可能性があります。 代わりに:ユーザーアカウントのロックステータスを取得し、後で処理するために情報をメモリに保存します。次を使用します: ユーザーアカウントのロックステータスを取得します。ユーザーアカウントがロックされている場合は、ユーザーアカウントのロックを解除します。(データを直接参照します。エージェントのメモリ内で使用できます)。 代わりに:ユーザーアカウントのステータスを変数 に格納します。次を使用します:ユーザーアカウントがロックされている場合は、ユーザーアカウントのロックを解除します。 ユーザーとして一貫して人間に対処します 指示に相手とのコミュニケーションが含まれる場合は、「エージェント」や「あなたと話しかけるエンティティ」などのあいまいな言葉ではなく、「ユーザー」と呼びます。 ユーザーに何かを表示するには: これの代わりに:欠落しているユーザーのリストをエージェントに表示します。これを使用:欠落しているユーザーのリストをユーザーに表示します。 ユーザーに何かを尋ねるには: この代わりに:レコード番号を検索します。次を使用します:ユーザーにレコード番号を尋ねます。 ステップの順序付けと各分岐の定義 順序付けされた手順として指示を記述し、各条件分岐で何が起こるかを詳しく説明します。あいまいな参照、未定義のツール、不明瞭な分岐は、実行エラーとループの原因となります。 これの代わりに:ライセンス ID の確認方法を指定せず、ゲスト ユーザーをループに送り込み、未定義の「適切なツール」を参照し、「他のことをする」、「前進する」、「何が問題なのかを把握する」などの曖昧な指示を使用するステップシーケンス。以下を使用します:適格基準を確認し、ソフトウェアライセンスを割り当てるには、次の手順を順を追って実行します。 ステップ 1: ライセンス ID が利用可能かどうかを確認します。ライセンス ID がない場合は、ユーザーにライセンス ID の入力を求めます。ステップ 2:ユーザーの詳細をフェッチして、ユーザータイプを特定します。ステップ3:ユーザータイプが「マネージャー」の場合は、次の手順に従います。 要求されたソフトウェアライセンスが利用可能かどうかを確認します。可能な場合は、ユーザーに割り当てます。ライセンスが正常に割り当てられたら、ユーザーに通知します。ライセンスが利用できない場合は、要求されたライセンスが利用できないことをユーザーに通知します。 ステップ4:ユーザータイプが「正社員」の場合は、次の手順に従います。 ユーザーのライセンス割り当てタスクを作成します。タスクが作成されたら、ライセンス割り当てタスクが作成され、マネージャーの承認を待っていることをユーザーに通知します。ライセンスの割り当ては、マネージャーの承認に基づいて処理されます。 ステップ5:ユーザータイプが「ゲスト」の場合は、次の手順に従います。 ゲストユーザーのロールを確認します。要求されたソフトウェアライセンスの対象となるロールのリストを取得します。ゲストユーザーのロールとソフトウェアライセンス適格性ロールを比較して、ゲストユーザーが要求されたライセンスの対象であるかどうかを判断します。ゲストユーザーが適格である場合は、一時的なライセンス割り当てタスクを作成します。ゲストユーザーに対して一時的なライセンス割り当てタスクが作成されたことをユーザーに通知します。ゲストユーザーが対象外の場合は、ロールがないため、ゲストユーザーに要求されたソフトウェアライセンスにアクセスする資格がないことをユーザーに通知します。 説明書のツール情報を言い換えないでください 冗長なツール情報は避けてください。エージェントにマッピングされたツールとその説明は既に利用可能であるため、「これらのツールが提供されました」や「以下のツールが提供されています」などの指示を追加しないでください。 これの代わりに:ABC 機能を備えたツール X が提供されます。次を使用します: ツール X を使用してデータを抽出します。XYZ の詳細をフェッチします。 エージェントとツールに一意の名前と説明を付ける 一意の名前と明確な説明は、オーケストレーターが各タスクに適切なエージェントを選択し、各エージェントが適切なツールを選択するのに役立ちます。これをエージェントとツールの両方に適用します。 エージェントの場合: この代わりに:類似の説明を持つ「Analyzer」という名前の複数のエージェント。 エージェント 1:データアナライザーエージェント:説明:このエージェントはデータを分析します。エージェント 2:コンテンツ アナライザー エージェント:説明:このエージェントはコンテンツを分析します。 次を使用します: エージェント 1:データアナライザーエージェント:説明:トランザクションデータの抽出と分析、結果の表示、およびユーザーからのフィードバックの取得を担当します。エージェント 2:ログアナライザーエージェント:説明:システムログを確認し、異常にフラグを立てて、それらをユーザーに伝達します。 ツールの場合: 代わりに:目的が異なる 2 つのツールに、明確に定義されていない説明で、名前が似ています。 エージェント 1:インシデントアナライザー — ツール:ユーザーの詳細を取得 — 説明:ユーザーの詳細を取得エージェント 2:ユーザーアナライザー - ツール:ユーザーの詳細を取得 - 説明:ユーザーの詳細を取得します 使用してください:ツールの名前と説明は、その機能を明確に示しています。 エージェント 1:インシデントアナライザー — ツール:ユーザーステータスの取得 — 説明:ユーザーアカウントがアクティブかどうかを確認します。エージェント 2:ユーザーアナライザー - ツール:ユーザーの詳細を取得 - 説明:名前、部門、マネージャー、その他の個人情報やチーム情報などのユーザーの詳細をフェッチします。 エージェント間でツール入力に明確な名前を付ける 混乱を防ぐために、チーム内の複数のエージェント間でツールに一意の入力を使用します。 この代わりに:両方のツール入力に sys_id という名前を付けます。 エージェント 1:インシデントアナライザーエージェント — ツール:インシデントの詳細を取得 — 入力:sys_idエージェント 2:ユーザーアナライザー:ツール:ユーザーの詳細を取得:入力:sys_id これを使用します:ツールの入力を区別するわかりやすい名前を指定します。 エージェント 1:インシデントアナライザーエージェント — ツール:インシデントの詳細を取得 — 入力:incident_sys_idエージェント 2:ユーザーアナライザー:ツール:ユーザーの詳細を取得:入力:user_sys_id ツール入力を明確に説明する 一貫した実行パターンを確保するために、ツールを設計するときは常に入力を明確に記述してください。 代わりに: 入力名:user_id - 説明:ユーザーの ID。 次を使用します: 入力名:user_id - 説明:ユーザーの 32 文字の英数字で構成される一意の識別子。 説明:user_idには、sys_id、フルネーム、ユーザー名、またはメールなどがあります。ツールを実行するために選択する入力のタイプを LLM が明確に理解できるようにすることが重要です。 必要なツール入力を必須としてマーク ツールで特定の入力が常に存在する必要がある場合、その機能がツール (フローアクション、サブフローなど) で使用可能であれば、必須としてマークします。ない場合は、ツール入力の説明に記載してください。 代わりに: ツール名: インシデントの詳細を取得 — 入力: incident_number — 説明: インシデント番号 次を使用します。 ツール名: インシデントの詳細を取得 - 入力: incident_number - 説明: インシデントレコードの一意の識別子。これは必須入力です。インシデント番号はパターン「INCXXXXXX」に従います。 大きな出力には出力変換を使用します 大きな出力を処理するための適切な変換戦略を選択します。たとえば、「検索結果のサマリー」のような出力変換は、特に RAG をツールとして使用する場合に、関連情報のみをフィルタリングして保持するのに役立ちます。 代わりに:完全な検索結果をエージェントに直接渡します。これを使用します:出力変換「検索結果のサマリー」を使用して、実行に必要なコンテキスト情報のみをフィルタリングして渡します。例:類似のインシデントをフェッチする場合、RAG ツールは検索クエリと意味的に類似したすべてのインシデントを取得します。「検索結果のサマリー」変換戦略を適用すると、最も関連性の高いコンテキスト情報のみが選択され、転送されます。 トークン制限内に収まるようにツール出力を処理します モデルのトークン制限を超えるツール出力は切り捨てられます。ツールコードに、データを適切に処理または要約し、データ損失を防ぐための後処理ロジックが含まれていることを確認します。 代わりに:トークン制限を考慮せずにツールから大量のデータを生成し、それをエージェントに渡します。これを使用します:重要で意味のあるデータのみをフェッチし、必要に応じて要約します。例:チームにアサインされたすべてのインシデントをフェッチすると、過剰なデータが生成される可能性があります。理想的なアプローチは、インシデントを取得し、インシデントレコードから必要な属性のみを抽出し、必要に応じてデータを要約することです。 アクション可能なステートメントを使用して、エージェント間でフローを転送します アクション可能なステートメントを使用して、エージェントの名前や他のエージェントにマッピングされているツールの名前を使用せずに、実行フローをチーム内の別のエージェントに転送します。 代わりに:incident_numberの値を INCxxxxxx として「インシデントアナライザーエージェント」の「インシデントの詳細を取得」を呼び出します。次を使用します: 取得したインシデント番号を使用してインシデントの詳細をフェッチします。取得したインシデントの詳細から、アサインされたユーザーのユーザーの詳細をフェッチします。 複雑なタスクに専用のスキルツールを使用する 複雑なタスクにカスタムスキルツールを使用すると、エージェントの動作が予測可能、再利用可能、および保守可能になります。大規模なデータセットの処理、特定の制約の下での構造化コンテンツの生成、または確定的な結果を伴う複数ステップのロジックの実行を伴うエージェントワークフローの場合は、organize_general_knowledgeや数学などの組み込みツールに依存するのではなく、専用のスキルツールを実装します。 組み込みツールは軽量のメモリ内操作をサポートしており、出力をメモリに保持したり、エージェント間の共有を有効にしたりすることなく、エージェントに一時的な推論スペースを提供します。これらは、迅速なデータ構造化と基本的な推論タスクに最適です。出力 (コンテンツ、形式、または構造) を正確に制御する必要があるユースケースでは、カスタムスキルツールの柔軟性と信頼性が向上します。例 1: 次のベストアクションエージェント。計画を生成する際、スキルツールは書式設定、スタイリング、構造の一貫性を確保しますが、これは、出力を明示的にガイドまたは保持できないビルトインツールでは簡単に実現できません。例 2: HTML 応答の生成、特定のルールを含む項目別リストの作成、詳細な基準に対する大きなドキュメントの検証などのタスクは、スキルツールの方が適切に処理できます。そうしないと、エージェントに必要な指示の複雑さが大幅に増し、実行中にあいまいになったり、ステップが見落とされたりする可能性があります。 AI エージェントの実行の仕組み AI エージェントまたはエージェント型ワークフローが実行されると、各実行が記録されるため、エージェントが何をしたか、なぜ実行したかを確認できます。これらの実行レコードは、AI エージェントスタジオの [アクティビティ] ページで確認できます。このページでは、エージェント型ワークフローと AI エージェントの両方の実行が一覧表示され、それらのトラブルシューティングを行うことができます。単一の実行を詳細にレビューするには、[テスト] ページでエージェントを手動でテストするときに利用できる意思決定ログを使用します。 意思決定ログには、LLM がユースケース、エージェント、およびツールの詳細の指示をどのように分析するかが示されます。これらには次のものが含まれます。 オーケストレーターログ:ユースケースで定義された指示に基づいて生成されます。このログには、生成されたサブタスクとオーケストレーターが委任するエージェントが記載されています。ユースケースの手順を絞り込んで、この動作を調整します。エージェントログ:エージェントで定義された指示に基づいて生成されます。各エージェントログには、次のものが含まれます。 思考は、実行フローでこれまでに起こったことと、次に実行するアクションを示します。エージェントの指示は、この思考を生成し、フローを制御する責任があります。それに応じて指示を調整します。アクションの推論は、エージェントがツールとその入力を実行することを選択した理由を記述します。間違ったツールが選択された場合は、名前、説明、入力、入力説明などのツールの詳細を確認してください。[アクションの入力] には、ツールを実行するために選択されたデータが表示されます。このデータは、エージェントのメモリから選択されます。間違った入力が選択された場合は、メモリに保存されている入力の詳細に合わせて入力の説明を調整します。アクションの出力は、ツールが正常に実行されたかどうか、およびツールから返された出力を理解するのに役立ちます。 ツール実行出力を含む、現在の会話で生成されたすべてのデータはメモリに保存され、sn_aia_messageテーブル ([メッセージ] 列) に保持されます。 AI エージェントワークフローに関する FAQ スキルが検出されないのはなぜですか? スキルディスカバリーがインスタンスで機能しているかどうかを確認します。そうでない場合は、それぞれのチームにサポートを求めてください。スキル検出は機能しているものの、ユースケースまたはエージェントが検出されない場合は、ユースケースの名前と説明、およびエージェントの名前と説明を確認してください。 問題メッセージが表示されて実行がすぐに終了するのはなぜですか? 実行がすぐに終了すると、 申し訳ありません。この要求を完了しようとしてこちら側で問題が発生しました。後でもう一度質問してみてください。: sys_generative_ai_logテーブルに移動し、インスタンスで LLM 呼び出しが成功したかどうかを確認します。エラーが発生した場合は、インスタンスの生成 AI コントローラーのセットアップを確認してください。Planner および ReAct LLM 呼び出しが成功した場合、タスクに適したエージェントを選択できませんでした。タスク内の専門用語が、エージェントの名前、説明、ロール、指示、および習熟度と一致しているかどうかを確認します。 実行中に誤ったエージェントが選択されるのはなぜですか? チーム内のエージェントの名前と説明が一意であることを確認します。コンテキストが重複するエージェントが複数あると、オーケストレーターがどのエージェントがタスクに最も適しているかについて混乱する可能性があります。 メモリを参照する命令を記述するにはどうすればよいですか? エージェントの記憶を参照するために特定の用語は必要ありません。たとえば、次のように指示を直接記述します。 抽出されたインシデントの詳細に関するメッセージをユーザーに表示します。 別のエージェントに引き継ぐための指示を記述するにはどうすればよいですか? 実行フローを引き継ぐために、別のエージェントの名前や別のエージェントにマッピングされたツールの名前について決して言及しないでください。これは現在のエージェントを混乱させ、チーム内の他のエージェントのツールや名前を認識しません。代わりに、タスクを説明するアクション可能なステートメントを使用してください。 例 1: インシデントの詳細をフェッチします。(ここでの「インシデントの詳細を取得」は別のエージェントのツールです)。例 2: インシデントの詳細から、アサインされたユーザーのユーザー情報をフェッチします。(ここでの「ユーザーの詳細を取得」は、別のエージェントにマッピングされたツールです。 ユーザーに質問したり、ユーザーに何かを表示したりするための指示を記述するにはどうすればよいですか? 指示はエージェントを参照してはなりません。たとえば、「エージェントにインシデント番号の入力を依頼する」は正しくありません。たとえば、ユーザーにインシデント番号を入力するように依頼する、ユーザーに対するステートメントの宛先です。入力を求めずに何かを表示するには、「表示する」や「ディスプレイ」などの用語でユーザーに向けて記述します。 インシデントの詳細を取得できなかったことをユーザーに通知します。 複数のエージェント間でメモリを共有するにはどうすればよいですか? 「ツールからの値を に保存する」や「メモリに保存する」などの用語は使用しないでください 。エージェントのために何かをメモリに保存するという概念がないため、エージェントはこれを解釈できません。メモリは内部で維持されます:ユーザーに伝達されたすべてのツール出力と情報が保存され、すべてのエージェント間で共有されます。指示内のデータを参照するには、ツール出力から返された用語に沿ったアクション可能なステートメントを使用して、参照されるデータのコンテキストをエージェントに明確にします。例:取得したインシデントの詳細から、アサインされたユーザーのユーザーの詳細をフェッチします。 エージェントの実行を終了するための指示を記述するにはどうすればよいですか? 「会話を終了する」、「実行を停止する」、「フローを終了する」、「実行を終了する」などのステートメントは使用しないでください。特定の指示は必要ありません。エージェントが指示に従ってアクションアイテムを実行すると、完了します。 Related Links<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 高度な AI エージェント指示ガイド:ServiceNow エディション