見出し画像

Claude APIを使って、問い合わせメールを分類・返信ドラフト作成するツールを作った

Smart IT & AI Hub|AIという名の刃を、今日も抜く。


この記事はSmart IT & AI Hubが公開しているコンテンツです。
他の記事は目的別インデックスからどうぞ。

問い合わせメールの一次対応、毎日同じような作業になっていませんか?

たとえば、こんな対応です。

・請求に関する問い合わせか確認する
・急ぎかどうか判断する
・内容をざっくり要約する
・返信文のたたき台を作る

毎回ゼロから読むのは地味に時間がかかります。
しかも、内容が似ているメールほど「これ、AIに任せられるのでは?」と思う場面が増えてきます。

そこで今回は、Claude APIを使って、問い合わせメールを自動で分類し、返信ドラフトまで作成する簡易ツールを作ってみました。

問い合わせ文を入力すると、以下をまとめて出してくれるツールです。

・カテゴリ分類
・優先度判定
・問い合わせ内容の要約
・返信ドラフト

APIを触ったことがない方でも、最初の一歩を再現できるように、できるだけシンプルにまとめます。


この記事で作るもの

作るのは、問い合わせ文を入力すると、分類結果と返信ドラフトを返してくれるPythonツールです。

たとえば、以下のような問い合わせを入力します。

請求書の金額が違うようです。至急確認してください

すると、以下のような結果を返します。

カテゴリ:請求関連
優先度:高
要約:請求金額の相違確認依頼
返信ドラフト:
お問い合わせいただきありがとうございます。
ご指摘の件、早急に確認のうえご連絡いたします。
ご不便をおかけして申し訳ございません。

使いどころとしては、以下のような場面です。

・問い合わせメールの一次整理
・サポート窓口の下書き作成
・メール対応の時短
・カテゴリ別の振り分け前処理
・返信文のたたき台作成

あくまで最初は「自動送信」ではなく、AIがドラフトを作り、人間が確認して送るところまでにしておくのがおすすめです。


前提条件

今回はPythonで作ります。

必要なものは以下です。

・Anthropic Consoleアカウント
・Claude APIキー
・Python 3.8以上
・pip
・コードを編集できる環境

TypeScriptでも同じようなことはできますが、今回は試しやすさを優先してPythonで進めます。


全体の流れ

やることは、大きく分けると5つです。

STEP 1|APIキーを取得する
STEP 2|APIキーを環境変数に設定する
STEP 3|SDKをインストールする
STEP 4|コードを書く
STEP 5|実行して確認する

順番に進めていきます。


STEP 1|APIキーを取得する

まず、Claude APIを使うためのAPIキーを取得します。

Anthropic Consoleにアクセスします。

https://console.anthropic.com

手順は以下です。

① Anthropic Consoleにアクセス
② Googleアカウントなどでサインアップ
③ 左メニューの「API Keys」を開く
④ 「Create Key」をクリック
⑤ キー名を入力して作成
⑥ 表示されたAPIキーをコピーして保存

ここで注意点があります。

APIキーは、一度画面を閉じると再表示できない場合があります。
必ずコピーして、安全な場所に保存しておきます。

また、APIキーは絶対にコードへ直書きしないようにします。

GitHubなどに誤って公開すると、第三者に使われて料金が発生する可能性があります。
そのため、APIキーは環境変数で管理します。


STEP 2|APIキーを環境変数に設定する

次に、取得したAPIキーを環境変数に設定します。

Mac / Linuxの場合

export ANTHROPIC_API_KEY="sk-ant-xxxxxxxxxx"

Windowsの場合

コマンドプロンプトで実行する場合は、以下です。

set ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxx

.envファイルを使う場合

.envファイルで管理する場合は、以下のように書きます。

ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxx

.envファイルを使う場合は、後ほどPython側で読み込めるようにします。

注意点として、.envファイルはGitHubにアップロードしないようにしてください。
.gitignoreに追加しておくのがおすすめです。

.env

STEP 3|SDKをインストールする

Claude APIをPythonから使うために、AnthropicのSDKをインストールします。

pip install anthropic

.envファイルを使う場合は、python-dotenvも入れておきます。

pip install anthropic python-dotenv

インストールできたか確認します。

python -c "import anthropic; print(anthropic.__version__)"

バージョンが表示されればOKです。



STEP 4|コードを書く

ここから実装します。

今回は、問い合わせ文を渡すと、以下の4つをJSON形式で返すようにします。

・カテゴリ
・優先度
・要約
・返信ドラフト

ファイル名は、たとえば以下にします。

inquiry_tool.py

コードは以下です。

import json
from anthropic import Anthropic
from dotenv import load_dotenv

# .envファイルからAPIキーを読み込む
load_dotenv()

# クライアントを初期化
# ANTHROPIC_API_KEY が環境変数に設定されていれば自動で読み込まれる
client = Anthropic()


def classify_and_draft(inquiry_text: str) -> dict:
    """
    問い合わせ文を分類し、返信ドラフトを生成する関数
    """

    prompt = f"""
以下の問い合わせメールを分析してください。

【問い合わせ内容】
{inquiry_text}

以下の形式でJSONのみを返してください。
説明文は不要です。

{{
  "category": "カテゴリ名(請求関連・技術的問題・一般問い合わせ・クレーム・その他のいずれか)",
  "priority": "優先度(高・中・低のいずれか)",
  "summary": "問い合わせの要約(30文字以内)",
  "reply_draft": "返信ドラフト(丁寧なビジネス文章で200文字以内)"
}}
"""

    try:
        message = client.messages.create(
            model="claude-haiku-4-5-20251001",
            max_tokens=1024,
            messages=[
                {
                    "role": "user",
                    "content": prompt
                }
            ]
        )

        # レスポンスからテキストを取得
        response_text = message.content[0].text

        # JSONとしてパース
        result = json.loads(response_text)
        return result

    except json.JSONDecodeError:
        return {
            "error": "JSONのパースに失敗しました",
            "raw_response": response_text
        }

    except Exception as e:
        return {
            "error": f"エラーが発生しました: {str(e)}"
        }


if __name__ == "__main__":
    test_inquiry = "請求書の金額が違うようです。至急確認してください"

    print("【入力】")
    print(test_inquiry)
    print()

    result = classify_and_draft(test_inquiry)

    print("【出力】")
    print(f"カテゴリ:{result.get('category', 'エラー')}")
    print(f"優先度:{result.get('priority', 'エラー')}")
    print(f"要約:{result.get('summary', 'エラー')}")
    print(f"返信ドラフト:{result.get('reply_draft', 'エラー')}")

コードのポイント

このコードでやっていることは、かなりシンプルです。

① 問い合わせ文を受け取る
② Claudeに「分類・優先度・要約・返信ドラフト」を依頼する
③ JSON形式で返してもらう
④ Python側でJSONとして読み込む
⑤ 結果を画面に表示する

ポイントは、プロンプト内でJSONのみを返してくださいと明示しているところです。

これにより、Python側で処理しやすくなります。

ただし、AIの出力は必ずしも毎回100%同じ形式になるとは限りません。
そのため、json.JSONDecodeError のエラーハンドリングも入れています。


STEP 5|実行して確認する

ファイルを保存したら、以下のコマンドで実行します。

python inquiry_tool.py

正常に動けば、以下のような出力になります。

【入力】
請求書の金額が違うようです。至急確認してください

【出力】
カテゴリ:請求関連
優先度:高
要約:請求金額の相違確認依頼
返信ドラフト:お問い合わせいただきありがとうございます。
ご指摘の請求金額の件、早急に確認のうえご連絡いたします。
ご不便をおかけし大変申し訳ございません。

これで、問い合わせ文をもとに、分類と返信ドラフトを作成できました。



実務で使う前に注意したいこと

便利そうに見えますが、実務利用する場合はいくつか注意点があります。

特に重要なのは、以下です。

・個人情報や機密情報をそのまま送らない
・API料金が発生する
・返信文は人間が最終確認する
・JSONが崩れる場合に備える
・自動送信は最初からやらない

順番に整理します。


注意点1|個人情報・機密情報をそのまま送らない

Claude APIを使う場合、入力した内容はAPIリクエストとして送信されます。

そのため、顧客名、メールアドレス、電話番号、契約情報、社外秘情報などをそのまま含めるのは避けた方が安全です。

実務で使う場合は、以下のような対応を検討します。

・個人名をマスクする
・会社名を仮名に置き換える
・メールアドレスを削除する
・契約番号や請求番号を伏せる
・社内のセキュリティルールを確認する

AIに送る前に、どこまでの情報なら送ってよいのかを確認しておくことが大事です。


注意点2|API料金が発生する

Claude APIは、使った分だけ料金が発生する従量課金です。

問い合わせ1件ごとの料金は小さくても、件数が増えると費用も増えます。

特に以下のような使い方をすると、コストが増えやすくなります。

・長文メールをそのまま投げる
・大量のメールを一括処理する
・何度もリトライする
・出力文字数を長くする

最初は少ない件数で試して、使用量を確認しながら進めるのがおすすめです。


注意点3|返信文は人間が最終確認する

このツールは、あくまで返信文の「たたき台」を作るものです。

AIが生成した文章には、以下のようなリスクがあります。

・事実と違う内容を書く
・言い回しが不自然になる
・相手に失礼な表現になる
・社内ルールと違う回答をする
・約束してはいけない内容を含める

そのため、最初から自動送信するのはおすすめしません。

まずは、以下の流れが安全です。

問い合わせ受信
↓
AIで分類・返信ドラフト作成
↓
人間が内容を確認
↓
必要に応じて修正
↓
送信

いきなり完全自動化するのではなく、まずは人間の確認を前提にした使い方が現実的です。


注意点4|JSONが正しく返らない場合がある

プロンプトで「JSONのみ返してください」と指定しても、まれに説明文が混じることがあります。

たとえば、以下のような出力になる場合です。

以下が分析結果です。
{
  "category": "請求関連",
  "priority": "高",
  "summary": "請求金額の相違確認依頼",
  "reply_draft": "お問い合わせいただきありがとうございます。..."
}

この場合、そのまま json.loads() に渡すとエラーになります。

今回のサンプルコードでは、JSONの読み込みに失敗した場合にエラー内容を返すようにしています。

実務で使うなら、さらに以下のような対策も考えられます。

・JSON部分だけを抜き出す処理を入れる
・失敗時に再実行する
・出力形式をさらに厳しく指定する
・処理結果をログに残す

よくあるエラー

実行時につまずきやすいエラーも整理しておきます。

ModuleNotFoundError: No module named 'anthropic'

AnthropicのSDKが入っていない場合に出ます。

以下を実行します。

pip install anthropic

ModuleNotFoundError: No module named 'dotenv'

python-dotenv が入っていない場合に出ます。

以下を実行します。

pip install python-dotenv

AuthenticationError

APIキーが正しく設定されていない可能性があります。

確認するポイントは以下です。

・ANTHROPIC_API_KEY が設定されているか
・APIキーの文字列が間違っていないか
・余計なスペースや改行が入っていないか
・.envファイルを保存しているか

RateLimitError

短時間にリクエストを送りすぎた場合などに出ることがあります。

少し待ってから再実行します。


実務で使うなら、こう拡張できる

今回のコードは、あくまで最小構成です。

実務向けにするなら、以下のような拡張が考えられます。

・複数メールをまとめて処理する
・CSVから問い合わせ一覧を読み込む
・処理結果をCSVに出力する
・カテゴリごとに担当者を振り分ける
・Slackに通知する
・GmailやOutlookと連携する
・問い合わせ履歴を保存する
・返信テンプレートを部署ごとに変える

たとえば、CSVで以下のような問い合わせ一覧を用意します。

id,inquiry
1,請求書の金額が違うようです。至急確認してください
2,ログインできません。パスワード再設定もできません
3,サービス内容について詳しく知りたいです

これを1件ずつClaude APIに渡して、結果をCSVに出力すれば、問い合わせ一覧の一次整理ツールとして使えます。

ただし、繰り返しになりますが、最初から自動送信までやるのは危険です。

まずは、

AIで下書き
↓
人間が確認
↓
人間が送信

この形で運用するのが安全です。


今回作ってみて感じたこと

問い合わせ対応は、完全にAI任せにするにはまだ怖い部分があります。

ただ、以下のような作業はかなり相性がいいと感じました。

・内容をざっくり分類する
・優先度を仮判定する
・返信文のたたき台を作る
・メール内容を短く要約する
・担当者に渡す前の整理をする

特に、毎日似たような問い合わせを見ている場合は、最初の整理だけでもかなり楽になります。

一方で、最終判断や送信は人間がやるべきです。
AIはあくまで「作業を減らす補助役」として使うのが、現時点では現実的だと思います。


ChatGPTで確認してほしいポイント

この記事を参考にする場合は、実際に使う前に以下の点を確認してください。

① 使用しているモデル名(claude-haiku-4-5-20251001)が
 現在も有効かどうか

② APIの料金体系に変更がないか
 input token / output token の単価

③ client.messages.create の引数に
 変更・追加がないか

④ .envファイルの読み込み方法として
 python-dotenv以外の代替手段がないか

⑤ JSONを安定して返させるための
 新しい指定方法が追加されていないか

公式ドキュメントはこちらです。

https://platform.claude.com/docs/en/home

APIやモデル名は変更されることがあるため、実際に使う前に公式ドキュメントで確認するのがおすすめです。


まとめ

今回は、Claude APIを使って、問い合わせメールを分類し、返信ドラフトを作成する簡易ツールを作りました。

やったことは以下です。

・Claude APIキーを取得
・APIキーを環境変数に設定
・Python SDKをインストール
・問い合わせ文をClaudeに送信
・カテゴリ、優先度、要約、返信ドラフトを取得

このレベルのツールでも、問い合わせ対応の一次整理には十分使えそうです。

もちろん、実務で使うには個人情報や機密情報の扱い、料金、出力精度、社内ルールなどを確認する必要があります。

ただ、最初の一歩としてはかなり作りやすいです。

「AIで業務効率化」と聞くと大げさに感じますが、こういう小さな作業から置き換えていくのが一番現実的だと思います。

免責事項

この記事は、筆者が実際に試した内容をもとに作成しています。
ただし、文章の一部にはAIによる補正・構成調整を加えています。

そのため、コードの動作、API仕様、料金体系、モデル名、手順の正確性については、必ず公式ドキュメントや実際の環境で確認してください。

また、本記事を参考にしたことによって発生したトラブル、損害、料金発生、情報漏えい等について、筆者は責任を負いかねます。

実務で利用する場合は、社内ルールやセキュリティポリシーを確認したうえで、自己責任でご利用ください。



Smart IT & AI Hubの全記事はこちらにまとめています。
カテゴリ別に整理しているので、気になる記事がすぐ見つかります。

次の実験は、もう決まっている。

もし刺さったなら、スキだけでも押してくれると嬉しい。
飛び上がって、次の実験に全力を注ぐ。

また会いに来てくれるなら、フォローしておいてくれ。
次も、AIに無茶ぶりしてくる。

Smart IT & AI Hub|AIという名の刃を、今日も抜く。

いいなと思ったら応援しよう!

たろっ@AIに仕事を丸投げしたいエンジニア ここまで読んでいただきありがとうございます。少しでも役に立った、また読みたいと思っていただけたら、応援してもらえると励みになります。いただいた応援は今後の記事づくりに活かします。