生成AIAI導入エージェント

AIエージェントを業務システムにつなぐ前に決める、権限と自動実行の境界

木村 優志

AIエージェントを業務システムにつなぐ前に決める、権限と自動実行の境界

「CRMを見て次のアクションを提案してほしい」「メールの下書きを作ってほしい」「社内文書を調べて回答してほしい」。生成AIの相談では、こうした要望が短期間で「AIエージェントに業務システムを操作させたい」へ進むことがあります。

技術的には、すでにその接続手段はそろいつつあります。OpenAIやAnthropic、GoogleのFunction Calling/Tool Use、LangGraphやLlamaIndexのようなエージェント実装、そして外部システムを共通のツールとして公開するModel Context Protocol(MCP)があります。Salesforce、HubSpot、kintone、Microsoft Graph、Slack、Google Driveなどに対する公式APIやMCPサーバーを使えば、LLMは検索し、下書きを作り、場合によってはレコードを更新できます。

しかし、接続できることと、自動実行してよいことは別です。業務システムへつなぐ前に決めるべきなのは、モデル名よりも、どの権限で、どの操作まで、誰の承認なしで実行させるかです。

本記事では、CRM更新、メール送信、社内検索を例に、権限と自動実行の境界をどう決めるかを整理します。あわせて、実装で使う具体的なツールも挙げます。

エージェントの実装は「モデル」ではなく「ツール呼び出し」が中心になる

業務向けエージェントは、次のような構成になることが一般的です。

利用者の指示
  → LLM(OpenAI / Claude / Gemini など)
  → ツール呼び出し(Function Calling / MCP / 独自API)
  → 業務システム(CRM、メール、チャット、文書保管)
  → 結果をLLMが要約・提示、または人が承認

ここで使う主な部品は、次のとおりです。

  • LLM API:OpenAI Responses / Chat Completions、Anthropic Messages、Google Gemini API
  • エージェント実行基盤:LangGraph、LlamaIndex Workflows、自前のオーケストレータ
  • ツール接続:各SaaSのREST API、またはMCPサーバー
  • 認証:Microsoft Entra ID(旧Azure AD)、Google Workspace、Okta、各SaaSのOAuth
  • 監査ログ:アプリケーションログ、クラウド監査ログ、SaaS側のアクティビティログ

モデルは回答文を作りますが、業務への影響を決めるのはツール側の権限です。search_contactsだけを渡したエージェントと、update_dealsend_emailまで渡したエージェントでは、失敗したときの被害範囲がまったく違います。

最初に決めるのは「読める/下書きできる/実行できる」の3段階

業務操作は、少なくとも次の3段階に分けます。

段階エージェントができること
参照のみデータを読む、要約する、候補を出すCRMの商談を検索し、状況を整理する
下書き書き込み用の内容を作るが、保存は人が行うメール本文、CRM更新案、タスク案を提示する
自動実行人がその場で承認しなくても書き込む/送信する商談ステージを更新する、メールを送る

多くの導入では、最初から自動実行を目指す必要はありません。参照と下書きだけでも、探す時間と転記の手間は減らせます。自動実行は、評価セットで失敗パターンを確認し、影響の小さい操作から広げる方が安全です。

受託開発では、この段階を要件として明示します。「CRM連携」だけでは、参照なのか更新なのかが分からず、提案機能と見積もりが割れます。

例1:CRM更新 —— Salesforce / HubSpot / kintone

営業支援の相談では、次のような流れがよく出ます。

商談メモやメールを読む
  → 次回アクションとCRM更新案を作る
  → (人が確認)
  → CRMへ登録する

実装で使うツールの例です。

  • Salesforce:REST API、Bulk API、Apexを経由したカスタム処理。商談・取引先・活動の参照と更新
  • HubSpot:CRM API(Contacts / Deals / Notes / Tasks)
  • kintone:REST API(レコード取得・登録・更新)。日本企業の業務アプリ基盤として多い
  • Microsoft Dynamics 365:Dataverse Web API
  • 接続層:各社公式API、またはCRM向けMCPサーバー。社内ではLangGraphのToolとしてラップすることもある

ここで決めるべき境界は、次の点です。

  • 商談の検索・要約は自動でよいか
  • メモや活動履歴の追記は自動でよいか
  • 金額、確度、ステージ変更は人の承認が必要か
  • 担当者変更や取引先の新規作成は禁止するか
  • エージェントが使うアカウントは個人の権限か、専用の連携アカウントか

実務では、次のような権限設計が現実的です。

許可:商談の参照、メモ下書きの作成
条件付き許可:メモの追記(特定フィールドのみ)
禁止:金額・契約条件・ステージの自動更新、レコード削除

Salesforceでは、接続アプリのOAuthスコープに加え、プロファイル/権限セット、オブジェクト権限、項目レベルセキュリティ、レコード共有で「読めるオブジェクト」と「更新できる項目」を分けます。OAuthスコープだけで項目単位の更新範囲を制御できるわけではありません。HubSpotならPrivate Appのスコープ、kintoneならAPIトークンがアクセスできるアプリとフィールドを最小にします。

「CRMを更新できるエージェント」を作るのではなく、更新してよいフィールドだけを持つツールを渡します。LLMに広いupdate_recordを渡すと、意図しない項目まで書き換える余地が残ります。

例2:メール送信 —— Microsoft Graph / Gmail API / SendGrid

メールは、下書きと送信の差が特に大きい操作です。

実装で使うツールの例です。

  • Microsoft 365:Microsoft Graph(Mail.ReadMail.ReadWriteMail.Send
  • Google Workspace:Gmail API。gmail.composeは下書き作成と送信の両方を許可するため、権限だけで「下書きのみ」に分けられない
  • トランザクションメール:SendGrid、Amazon SES(通知メール向け。顧客との個別商談メールとは用途が違う)
  • 下書きの確認UI:自社Web画面、Slackへの承認依頼、Teams Adaptive Card

推奨する進め方は明確です。

  1. まずは下書き作成まで(Graphの下書き、Gmailの drafts)
  2. 送信先、件名、本文、添付を人が確認する
  3. 定型通知など影響の小さいものだけ、送信を自動化する

自動送信を許可する場合でも、次を固定します。

  • 送信元アドレス(個人メールか共有メールか)
  • 送信してよい宛先ドメイン
  • BCCや社外アドレスを含む場合の追加承認
  • 添付ファイルの種類とサイズ
  • 送信前の禁止語・個人情報チェック

Microsoft Graphでは、下書きの作成・更新にMail.ReadWrite、送信にMail.Sendが必要です。したがって、送信を伴わない下書き段階ではMail.Sendを付与しない設計にできます。一方でGmailのgmail.composeは下書きと送信の両方を許可します。Gmailで下書き承認を実現するなら、APIスコープへの依存だけでは不十分で、エージェントに送信ツールを公開せず、承認済みの処理だけが送信APIを呼ぶようアプリケーション側で分離する必要があります。

誤送信の影響は検索ミスより大きいため、送信権限を付与する場合も、宛先・添付・送信条件をアプリケーション側で検証します。

例3:社内検索 —— SharePoint / Google Drive / Box / Slack

社内検索は「読むだけ」に見えますが、権限設計を誤ると機密情報の横断検索になります。

実装で使うツールの例です。

  • Microsoft 365:SharePoint / OneDrive、Microsoft Graph Search、Azure AI Search
  • Google Workspace:Google Drive API、Vertex AI Search
  • Box:Box API、Box AI関連の検索・要約機能
  • Notion / Confluence:公式API、または検索用インデックス
  • チャット文脈:Slack API、Slack MCP server、Microsoft Teams
  • RAG基盤:pgvector、OpenSearch、Azure AI Search、LlamaIndexのRetriever

ここで重要なのは、エージェント専用の強い検索権限を作らないことです。

  • 利用者Aが見られない文書を、エージェント経由で読めてはいけない
  • 部署をまたぐ規程と、特定顧客の契約書を同じ検索空間に置かない
  • 古い版と現行版を区別できるメタデータを持たせる

Slack MCPやDrive連携を使う場合も、接続トークンが「組織の全データ」を見られる設計になっていないかを確認します。理想的には、ログイン中の利用者の権限を引き継いで検索するか、公開範囲が定義されたコーパスだけをRAGの対象にします。

社内検索エージェントで最初に許可しやすいのは、次の範囲です。

許可:公開社内Wiki、現行版の業務マニュアル、FAQ
保留:顧客契約、人事情報、未公開の経営資料
禁止:個人のメールボックス全体、権限外チャネルの横断検索

権限は「人の権限」と「エージェントの権限」を分けて設計する

よくある失敗は、開発者や管理者の強いAPIキーでエージェントを動かすことです。これだと、現場の利用者より広いデータへアクセスできます。

分けるべき主体は次の3つです。

  1. 利用者:画面上で指示を出す人
  2. エージェント実行主体:ツールを呼ぶサービスアカウント、または利用者の委任トークン
  3. 管理者:接続アプリ、スコープ、監査ログを管理する人

認証まわりで使うものとしては、Microsoft Entra ID、Google WorkspaceのOAuth、Okta、各SaaSのPrivate App / Connected Appがあります。MCPを社内展開する場合は、組織のIdPで接続可否を管理するEnterprise-Managed Authorizationの考え方も重要です。ただし、MCPを使うだけで最小権限になるわけではなく、MCPサーバーが公開する各ツールと、背後のAPIトークンの権限を個別に設計します。

最低限、次をログに残します。

  • 誰の指示か
  • どのツールを呼んだか
  • どのレコード/ファイル/チャネルにアクセスしたか
  • 自動実行したか、人の承認後か
  • 成功/失敗とエラー内容

障害や誤操作が起きたとき、「モデルが悪かった」だけでは原因を切れません。ツール呼び出しの監査がないと、再現も再発防止もできません。

自動実行してよい操作の決め方

自動実行の可否は、精度だけでは決まりません。次の問いで切り分けます。

  1. 間違えたときの影響は金銭・対外・安全に及ぶか
  2. 誤りを後から検知し、取り消せるか
  3. 同じ操作を人でも日常的に素早く確認できるか
  4. 例外が多い業務か、定型が多いか
  5. 評価セットで、その操作の失敗を観測できているか

目安は次のとおりです。

操作初期の推奨
社内公開文書の検索・要約自動実行しやすい
CRMの参照、商談メモの下書き自動実行しやすい
タスク作成、社内Slackへの下書き投稿条件付きで検討
CRMの金額・ステージ更新人の承認を挟む
社外向けメール送信原則承認あり
レコード削除、権限変更、契約関連の更新原則禁止

「AIが自信を持てないとき」のような曖昧な条件ではなく、検知できる条件で止めます。たとえば、必須項目の欠落、社外ドメインへの送信、金額フィールドの変更、検索結果の出典がない回答、評価対象外の文書タイプ、などです。

実装時にツールを渡す順番

エージェント開発では、最初から全部のAPIをつながない方がよいです。

1. 参照ツールだけを渡す
   例:Salesforceの商談検索、SharePointの文書検索

2. 下書きツールを追加する
   例:Gmail drafts、CRMメモ案、Slack下書き

3. 評価セットで失敗を分類する
   例:誤った商談への紐づけ、古い規程の引用、宛先誤り

4. 影響の小さい書き込みだけを自動実行する
   例:社内タスク作成、特定フィールドへのメモ追記

5. 対外送信や重要更新は承認フローを残す
   例:Graphの送信、HubSpotのステージ更新

LangGraphや自前オーケストレータを使う場合も、ノードとして「提案」「承認待ち」「実行」を分けます。MCPでSlackやDriveをつなぐ場合も、サーバー側で破壊的なツールを無効化できるかを確認します。

ZapierやMake、n8nのような自動化ツールと組み合わせることもできます。ただし、これらは「決まった条件で決まった処理を流す」のが得意です。LLMエージェントに広い権限を渡す前に、定型処理は従来の自動化へ寄せ、エージェントには判断と下書きを任せる分割も有効です。

発注側がベンダーへ最初に伝えるとよいこと

相談時に、次を共有できると設計が具体化します。

  • 対象システム:Salesforce、HubSpot、kintone、Microsoft 365、Google Workspace、Slackなど
  • やりたい操作:参照、下書き、更新、送信のどれか
  • 自動実行してよい操作/承認が必要な操作/禁止する操作
  • 利用者の権限を引き継ぐか、専用アカウントで動かすか
  • 監査ログをどこに残すか
  • 失敗時に業務へ戻す手順

逆に、「とりあえず全部つなげて、うまくいったら自動化したい」だけだと、受託側は強い権限のデモを作りやすくなります。デモは動いても、本番の権限設計としては危険です。

まとめ

AIエージェントを業務システムへつなぐときに先に決めるべきなのは、どのLLMを使うかではありません。どのツールを、どの権限で、どこまで自動実行させるかです。

  • CRMなら、Salesforce / HubSpot / kintoneの参照と、更新してよい項目を分ける
  • メールなら、Microsoft Graph / Gmail APIで下書きと送信を分ける
  • 社内検索なら、SharePoint / Drive / Box / Slackで、利用者権限と公開範囲を守る
  • 実装には Function Calling、MCP、LangGraph などを使えるが、渡すツールを最小にする
  • 自動実行は、取り消せる定型操作から始め、対外送信や重要更新は承認を残す

エージェントの価値は、何でも自動で実行することではありません。人が判断すべき箇所を残しながら、調査と下書きの時間を減らすことです。権限と自動実行の境界を先に決め、その境界を評価セットで検証すると、技術選定と本番導入の議論が具体になります。

参考資料

更新情報をメールで受け取る

ブログ更新情報をお届けします。メールアドレス以外の情報は収集しません。

メールマガジン登録

最新の記事

すべての記事を見る →