はじめに
この記事では、以下の3点をお伝えしています:
- AI初心者の新入社員3名でwatsonx Orchestrateを使い、オンボーディング業務を自動化するエージェントを作成したので、そのアセットの共有
- タスク管理83%削減、情報検索90%削減、問題解決75%削減を実現するエージェントの作成方法の共有
- 4週間解決できなかったノーコードでのエージェント開発特有の壁を、IBM Bobを使って即座に突破した経験の共有
今回用いたwatsonx Orchestrateは無料でお試しいただくことが可能です。
この記事では作成の方法も紹介しているので、ぜひ記事を見ながら一緒にAIエージェントを作成してみましょう。
👉 無料トライアルはこちらから
目次
私たちが作成したエージェントについて
↑オンボーディング支援エージェントの実際の動き(GIFのため画質が悪く恐縮ですが、なんとなくイメージを見ていただければと思います。。。)
システム概要
親エージェント1つ + 子エージェント4つで構成されるオンボーディング支援エージェントを作成しました。
私たちが入社した際、オンボーディングに非常に苦労した思い出があります。
苦労したところといえば、「あと何をすれば完了なのかな...?」「このドキュメントだけじゃやりからがわからない!」「あれいつまでにやらないといけないんだっけ?」などなど、、、とにかくわからないことだらけでした。
わからない人向けに担当の人事が疑問に対応してくれるslackチャンネルが用意されていましたが、とにかく質問が多くパンク状態で、ほとんどAIチャットボット任せで、わからないことを解決するのに苦労していました。
そのような新人三人の共通の思い出から、この状態を解決するエージェントを作ろうということになり、オンボーディングエージェントの開発が始まりました。
今回作成したエージェントの全体アーキテクチャ:
ユーザー
↓
親エージェント(司令塔)
↓ // 適当な子エージェントにタスクを振り分ける
├─ Onboarding Checklist Agent(進捗管理)
├─ Onboarding Planning Agent(タスク管理)
├─ Onboarding FAQ Agent(質問回答)
└─ Issue Resolution Agent(エスカレーション)
導入効果(数値)
| 項目 | Before | After | 削減率 |
|---|---|---|---|
| タスク管理時間 | 30分/日 | 5分/日 | 83%削減 |
| 情報検索時間 | 30分/回 | 3分/回 | 90%削減 |
| 先輩への質問 | 10回/週 | 2回/週 | 80%削減 |
| 問題解決時間 | 2日 | 0.5日 | 75%削減 |
※ 上記の数値は私たちの経験やwatsonx Orchestrateの事例を参照して算出しております。
開発の流れ(約1ヶ月)
4つの子エージェントの作成
本記事はこれらの記事で構成されたシリーズものになります。
それぞれの記事では、作成方法に加え、各エージェントの作成の中で私たちが学んだTipsも記載しています。
1記事あたり約5分で読むことができますので、ぜひご一読ください。
| # | Agent名 | できること | 記事リンク |
|---|---|---|---|
| 1 | Onboarding Checklist Agent | ・チェックリスト自動生成 ・進捗率の自動計算 ・未完了タスクの抽出 |
詳細はこちら |
| 2 | Onboarding Planning Agent | ・期限日までの営業日を自動計算 ・タスクを日付順に自動ソート ・期間指定でTo Do List生成 |
詳細はこちら |
| 3 | Onboarding FAQ Agent | ・PDF資料から自動検索(Knowledge Base) ・Slackの過去FAQを自動取得 ・複数ソースを統合して回答 |
詳細はこちら |
| 4 | Issue Resolution Agent | ・未解決の質問をSlackに自動投稿 ・担当者へのメンション付き通知 ・質問内容の自動整理 |
詳細はこちら |
私たちが直面した障壁と対処法
作成の中で、私たちはあるむずかしい問題に直面しました。
それは、エージェントは正常に動いていて、連携も問題ないはずなのに、slackの送信を何度やってもできていないという問題でした。
私たちは先輩達と共に4週間ほどこの壁に向き合っていましたが、最終的にIBM Bobに相談したことでなんと、わずか1週間で解決できました!
その際のBobの活用方法をここからはご紹介いたします。
問題の詳細
症状
親エージェントからOnbording_Issue Resolution(子供エージェント)を呼び出すと、表向きは正常に処理しているが、Reasoningを展開して裏の処理を見てみると、、、
Transferring to chat_with_collaborator_onbording_issue_resolution...
(ここで止まる)
結果: Slackにメッセージが送信されない
4週間の格闘
私たちは4週間の間、先輩にも助けていただきながら壁打ちで様々試してみましたが、、、
- GUI設定の変更 ▶︎ ❌ 効果なし
- Behaviorの調整 ▶︎ ❌ 改善せず
- 公式ドキュメント ▶︎ ❌ 解決策なし
- コミュニティ質問 ▶︎ ❌ 明確な回答なし
と言ったように惨敗。
この時点で、正直諦めかけていました...
Bobとの出会いで即座に解決
そこで、先輩の一人と新人の一人が「今、社内で盛り上がってるBobにやらせてみては?」と提案。
藁にもすがる思いで、半分お試しのような形でBobをメンバーに加えることに。
すると、なんと一瞬で解決してしまい、私たちはBobの偉大さに圧倒されました、、、!(とはいえ、思考しながらBobと対話してくれたのは人間の森さんなので、森さんには感謝です)
ここからは、Bobがどのように問題を解決してくれたのか、Tipsも含めてお伝えします。
1) 根本原因の特定
Bobが3つの原因を特定:
1. 子エージェントが「Agents」セクションに登録
→ 委任(delegate)として扱われ、制御が戻らない
2. 子エージェントに対話的な確認プロセス
→ 親エージェントから呼ばれた際、ユーザーとの対話ができない
3. watsonx.orchestrateの仕様制約
→ エージェントを「Tool」として追加できず、あくまで「Agent」として登録ができる仕様になっている
この説明のおかげで、初めて問題の本質が見えました!
ここで判明したことは、私たちは作成したエージェント同士の繋がりをちゃんと理解していなかったのです。
図で説明すると↓
文字でまとめると↓
- watsonx Orchestrate上でのAgent連携機能の扱いは「完全委託」になる
- 「完全委託」になると、一方通行の処理になり、子供エージェントに対して親エージェントが「あとはお願い」と処理を丸投げすることになる
(※ただし、Tools機能の場合は双方向でAgentがモノとしてToolを使うため該当しない) - 一方通行の処理では親エージェントには戻れないため、ユーザーは親エージェントと対話できなくなり上で紹介した症状のような”Transferring to...” いう状態が続いてた
- 委託した処理がどうなったのかを知るのは子供のみだが、ユーザーは親エージェントとしか対話できないため確認できずブラックボックス化
つまり、子供の処理がブラックボックス化してしまっていたことが原因だったのです。
2) 解決策の検討
子供の処理のブラックボックス化を改善するために、さらにBobに「解決方法を教えて」と指示し、以下の解決策を得ることができました。
Bobが提案した3つの解決策:
1. Onbording_Issue Resolution(子供エージェント)のBehaviorにて「トリガーワード」設定し、モード切り替えを可能にする
2. Onbording_Issue Resolution(子供エージェント)のBehaviorで明示的な制御を追加
3. 親エージェントー子供エージェント間の情報の明示的な受け渡し
「これを現状のOnbording_Issue ResolutionエージェントのBehaviorに組み込ませたい」とBobに指示し、以下のように変更するよう提案をもらい、変更を加えました。
※かなり長文のため折りたたみ形式で掲載しております。
Behavior - 変更前
# Role(役割)
あなたは新入社員向けオンボーディングの「最終対応エージェント」です。
他のオンボーディング用エージェントでは解決できなかった問題を引き継ぎ、ユーザーが不安や疑問を抱えたままにならないよう、解決まで伴走してください。
# User(対象)
あなたの利用者は、新入社員(一般社員)です。
ユーザーは社内制度・手続き・環境・人事関連について十分な前提知識を持っていないことを前提に対応してください。
# Goal(目的)
・ユーザーの問題点を整理し、最終的に「次に何をすればよいか」が明確な状態にすること
・エージェント単独で解決できない場合でも、人事担当者への問い合わせまで確実につなぐこと
# Scope(対応範囲)
・オンボーディング期間中の業務・制度・環境・手続きに関する困りごとを扱います
・ユーザーが他のAgentを使って解決できなかった場合、文章をそのままslackに送信することで、人事担当者への確認にエスカレーションします
# Decision Rules(判断基準)
・不確実な情報を推測で回答しないでください
・ユーザーの不安を軽減することを、スピードや簡潔さより優先してください
・「わからない」や「できない」のような回答はせず、必ず最後はslackへの送信を完了してください
# Interaction Policy(対話方針)
1. 最初に、元となるAgentからユーザーが「解決していない」質問文を取得してください
2. ユーザーに、「この質問内容で間違いないか」という文言と、質問文を提示し確認してください
2-1. 追加情報があれば適宜取得した質問内容に追加してください。その際は違和感のない文章に生成し直してください
2-2. 再度、生成し直した質問文に直して2のステップを実行してください
3. 間違いがなければユーザーに以下を返してください。
「ではこの内容でオンボーディングFAQのslackチャンネルに質問を投稿します。あなたの名前を英語表記で教えてください。(例:Tarou Yamada)」
4. 質問文の前に、3でユーザーから受け取った名前に@をつけて名前情報を追加し、以下のフォーマットで返してください。@のあとは空白を入れないでください。
```
@`3でユーザーから受け取った名前`
質問文
---
この内容でオンボーディングFAQのslackチャンネルに質問を投稿します。問題ないですか?
```
5. 問題がなければチャンネル名# faq-onbording に以下の文章をそのまま投稿してください。
```
@`3でユーザーから受け取った名前`
質問文
```
6. 投稿が完了したら以下を返してください。「#faq-onbording チャンネルへの質問投稿が完了しました。3営業日以内にslackより回答の通知が届きますので、それまでお待ちください。」
# Constraints(回答への制約)
・常に日本語で回答してください
・エージェント間の内部構造や他Agentの仕様は説明しないでください
Behavior - 変更後
# Role(役割)
あなたは新入社員向けオンボーディングの「最終対応エージェント」です。
エージェント単独で解決できない場合に、あなたがslackの投稿を必ず完了させてください。
---
## 動作モード判定
入力メッセージの最初の部分を確認し、以下のいずれかを判定してください:
- 入力に「【親エージェントからの自動実行指示】」という文言が含まれている場合 → 【自動実行モード】
- それ以外の場合 → 【対話モード】
---
## 【自動実行モード】(親エージェントから呼び出された場合)
親エージェントが既にユーザー確認とメンバーID取得を完了しているため、即座にSlack送信を実行します。
### 実行手順
1. 情報の抽出
- 入力メッセージから以下を抽出:
- メンバーID: 「メンバーID:」の後ろにある値(例:xxx)
- 質問文: 「質問文:」の後ろにある内容
- 質問文はユーザーが最初に入力したものをそのまま使用
2. Slack投稿の準備
- 質問文の前にメンバーIDを追加
- @のあとは空白を入れない
- 最終的な投稿内容:
```
<@メンバーID>
質問文
```
3. Slack投稿の実行
- チャンネル名: `#faq-onbording` (Channel ID: `xxx`) に即座に投稿
- 投稿は必ず実行すること
4. 完了報告
- 投稿完了後、以下のメッセージを返す:
```
Slack送信完了: #faq-onbording チャンネルへの質問投稿が完了しました。
```
### 注意事項
- ユーザーへの確認は一切不要(親エージェントが既に確認済み)
- 質問文はそのまま使用し、編集や追加情報の取得は行わない
- メンバーIDもそのまま使用し、再確認しない
- 投稿を必ず実行すること
- 完了報告は必ず返すこと
---
## 【対話モード】(ユーザーから直接呼び出された場合)
ユーザーと対話しながら、質問内容を確認してSlack送信を実行します。
### 実行手順
1. 質問文の取得
- ユーザーから質問文を取得
2. 質問内容の確認
- ユーザーに、「この質問内容で間違いないか」という文言と、質問文を提示し確認
- 提示フォーマット:
```
以下の内容でSlackチャンネルに質問を投稿します。この内容で間違いありませんか?
【質問内容】
質問文
間違いがなければ「はい」、修正や追加がある場合はその内容を教えてください。
```
3. 追加情報の取得(必要に応じて)
- 追加情報があれば適宜取得した質問内容に追加
- その際は違和感のない文章に生成し直す
- 再度、生成し直した質問文で手順2を実行
4. メンバーIDの取得
- 間違いがなければユーザーに以下を返す:
```
ではこの内容でオンボーディングFAQのslackチャンネルに質問を投稿します。
このチャンネルがあるワークスペースにおけるメンバーIDを教えてください。
(例:xxx)
```
5. 最終確認
- 質問文の前に、手順4でユーザーから受け取ったメンバーIDに@をつけて追加し、以下のフォーマットで返す
- @のあとは空白を入れない
```
<@ユーザーから受け取ったメンバーID>
質問文
---
この内容でオンボーディングFAQのslackチャンネルに質問を投稿します。問題ないですか?
```
6. Slack投稿の実行
- 問題がなければチャンネル名 `#faq-onbording` (Channel ID: `xxx`) に以下の文章をそのまま投稿:
```
<@ユーザーから受け取ったメンバーID>
質問文
```
7. 完了報告
- 投稿が完了したら以下を返す:
```
#faq-onbording チャンネルへの質問投稿が完了しました。
3営業日以内にslackより回答の通知が届きますので、それまでお待ちください。
```
---
## Constraints(回答への制約)
- 常に日本語で回答すること
- エージェント間の内部構造や他Agentの仕様は説明しないこと
- 不確実な情報を推測で回答しないこと
- ユーザーの不安を軽減することを、スピードや簡潔さより優先すること
- 「わからない」や「できない」のような回答はせず、必ず最後はslackへの送信を完了すること
- メンバーIDの形式は必ず `<@ID>` とし、@のあとに空白を入れないこと
- 自動実行モードでは、Slack送信を必ず実行し、完了報告を返すこと
- 自動実行モードでは、親エージェントから受け取った情報をそのまま使用すること
---
## 補足情報
### 投稿先設定
- 投稿先チャンネル: `#faq-onbording`
- チャンネルID: `xxx`
- 回答期限: 3営業日以内
### トラブルシューティング
- Slack投稿に失敗した場合は、エラー内容をユーザーに報告し、再試行を提案すること
- メンバーIDの形式が不正な場合は、正しい形式(例:xxx)を再度案内すること
- 自動実行モードで投稿が実行されない場合は、入力メッセージの形式を確認すること
---
## 入力例
### 自動実行モードの入力例
```
【親エージェントからの自動実行指示】メンバーID: xxx、質問文: 福利厚生について教えてください
```
### 対話モードの入力例
```
福利厚生について教えてください
```
ここでの修正ポイント:
親エージェントが「正常に動作した場合」と「正常に動作しなかった場合」の2パターンの動作モードを設けたことです。
【自動実行モード】→通常のモード
- 「親エージェントから呼び出された場合」の専用モード
- 親エージェントが正常に「質問文の確認」と「メンバーID」の取得を完了した際にこのモードは起動する
- このモードを設け、具体的な行動を指示することで、エージェントが期待通りに働くようになった
【対話モード】→イレギュラーが起こった時のモード
- 「ユーザーから直接呼び出された場合」の処理フローを定義
- 親エージェントが正常に情報を与えてこなかった場合にこのモードは起動する
- このモードを設け、このエージェントが代わりにユーザーとやり取りし、「質問文の確認」と「メンバーID」の取得を行うことで、エージェントが期待通りに働くようになった
3) テスト実行
私: 「福利厚生について教えてください」
↓
親エージェント → 子エージェント(自動実行モード起動)
↓
子エージェント: Slack送信実行
↓
成功!!!
【Tips】 Bobの効果的な使い方
私たちはBobを使って今回問題を解決しましたが、どのようにBobを利用して解決できたのかをここで紹介します。
Bobとのやりとりで意識したポイント
-
具体的な情報を提供
- エラーメッセージのスクリーンショット
- 設定ファイルの全文
- 試した手順の詳細
-
対話的に進める
- 一度に全てを解決しようとしない
- Bobの質問に丁寧に答える
-
提案を試してフィードバック
- 実装結果を報告
- うまくいかない場合は詳細を共有
この活動から得た学び
1. AI Agentを触る上で理解しておくべきことがわかった。
watsonx Orchestrateのように、UIベースでAIエージェントを作成できるのは、IT未経験の新人にとってとてもわかりやすく簡単ですが、ただなんとなく触っているだけでは思ったようなAIエージェントは作成できません。
例えば今回の場合だと「エージェント同士が今どのような連携になっているのか」をちゃんと把握する必要があると学ぶことができました。
2. 問題が起こった時に、まず何をすべきかを学ぶことができた。
私たちは、まず自分たちでどうにかしようとしましたが、最も適切なのは、問題を認識したらまずは第三者(先輩やAI)に相談することです。
自分たちが作成したものなので、「間違いがあると思って作成していない」のだから、第三者にみてもらうのは最も良い方法なのだと気づくことができました。
3. AIの適切な使い方を学ぶことができた。
問題解決を一瞬でしてくれたことで、人間では気づけない部分に気づいてくれるAIをメンバーに加えることは、今後の開発やPJにおいてとても効果的になるということを体感することができました。
今回はBobを利用しましたが、Bobの場合だと今の状況を全体的に把握し、修正案をドキュメントにして詳細に教えてくれるため、メンバー間で共有がしやすく特におすすめでした。
開発初心者で、これからエージェント開発に挑戦する方へ向けて
watsonx Orchestrateなど、多くのAIエージェント開発のノーコードツールがあり、今回AI開発初心者の私たちは苦労もありながらも、イメージ通りのAIエージェントを完成させることができました。
ここには、高度なプログラミングスキルや技術的な知識よりも、解決したい課題が何か、解決のために何を用いるかが重要な要素になっていたと振り返ります。
おすすめの進め方
-
小さく始める
- まず1つのエージェントから
- 基本機能だけで動かす
- 徐々に機能を追加
-
AIを活用する
- 困ったときは早めに相談!(Bobは言語化も一緒にしてくれるのでおすすめです!)
- 具体的な情報を共有する
- 対話的に進める
-
失敗を恐れない
- エラーは学習の機会と捉える
- 試行錯誤の過程が成長につながる
まとめ
成果
- 高度なITへの知識がなくても、4つのエージェントをまたがる少し複雑なエージェントを1ヶ月で構築
- watsonx Orchestrateで業務効率の大幅改善を実現(最大90%削減)
- IBM Bobで技術的な壁を突破し、4週間かかっていた問題への対応を1週間で解決
一番大きな学び
技術的な壁は必ず乗り越えられる。
適切なツール(Bob)を使えば、初心者でも高度な問題を解決できる。
諦めずに挑戦し続けることが大切。
関連リンク
-
この記事のシリーズ(#1~#4)
#1 Onboarding Checklist Agent
#2 OnboardingPlanning Agent
#3 Onboarding FAQ Agent
#4 Issue Resolution Agent -
IBM watsonx Orchestrate公式製品サイト
- IBM Bob公式製品サイト



