Claude AIのAPIを使って自分だけのAIチャットボットを作ろう!Pythonで30分で完成

Claude AIのAPIを使って自分だけのAIチャットボットを作ろう!Pythonで30分で完成

どうも、管理人のmonogoodです!最近まわりを見ると「ChatGPT使ってます」っていう人ばっかりで、なんかみんな同じ方向向いてるなーと思ってたんですよね。そんな自分も実はつい最近まで同じ感じだったんですが、AnthropicのClaude APIを試してみたらもう全然違って、正直びっくりしました。というわけで今回は、Claude APIを使ってPythonでオリジナルのAIチャットボットを作る方法を、実際に自分でやってみた手順そのままで解説しますよ!コピペしながら30分もあれば動くものができるので、ぜひ一緒にやってみてください!

目次

そもそもClaude APIって何?

まぁ、「またAIの話か」って思った人もいるかもしれませんが、ちょっと聞いてください。AnthropicはOpenAIの元メンバーたちが立ち上げたAI企業で、安全性を重視したAI開発で有名なんですよね。ClaudeはそのAnthropicが作ったLLM(大規模言語モデル)で、長文処理や指示の遵守性能が異常に高いのが特徴です。APIを使えば、自分のアプリやスクリプトからClaudeの頭脳を直接呼び出せるわけです。

一言でいうと「ChatGPTみたいなやつを、自分のPythonコードから自由に呼び出せる」ってことです。(シンプルに説明するとこれだけなんですよね)

Claude AIチャットボット会話フロー図解 - ユーザーからPython経由でAPIへ、そしてレスポンスが返ってくる仕組み
Claude APIを使ったチャットボットの会話フロー(ユーザー→Python→API→レスポンス)

事前準備:APIキーを取得しよう

まず最初の関門、APIキーの取得からです。ここをサボると何も始まりませんので、ちゃんとやりましょう。(自分も最初「あとでいいや」って後回しにして小一時間悩んだ人間なので…笑)

  1. Anthropicの公式サイトにアクセス
  2. アカウントを作成してログイン
  3. コンソール画面から「API Keys」を選択
  4. 「Create Key」でAPIキーを発行
  5. 発行されたキーをメモ帳などに保存(一度しか表示されないので要注意!)

無料枠もあるんですが、最初にクレジットカードを登録しておくとスムーズですよ。個人利用レベルなら月数百円〜で収まります。まぁ、コーヒー1杯分ですね。

環境構築:必要なライブラリをインストール

Pythonが入っていれば、あとはライブラリを一発入れるだけです。これが本当にシンプルで最高なんですよね。

pip install anthropic

以上!本当にこれだけです。拍子抜けするくらいシンプル。ってことで、次に進みましょう。

基本コード:最初のチャットボットを作ろう

まずは一番シンプルなバージョンから。これが動けば土台完成です。難しいことは考えず、とりあえずコピペで動かしてみてください!

import anthropic

client = anthropic.Anthropic(api_key="YOUR_API_KEY_HERE")

message = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "こんにちは!自己紹介してください。"}
    ]
)

print(message.content[0].text)

YOUR_API_KEY_HEREの部分を、さっき取得したAPIキーに書き換えて実行してみてください。Claudeが日本語でちゃんと返答してきたら成功です!(自分が初めて動かしたときはちょっと感動しましたよ)

会話を続ける:履歴を保持するチャットボット

一問一答だと面白くないですよね。会話の文脈を覚えながら話せるようにしましょう。ポイントは「会話履歴をリストで管理してAPIに毎回渡す」ことです。上の図を見ると仕組みがわかりやすいかと思います!

import anthropic

client = anthropic.Anthropic(api_key="YOUR_API_KEY_HERE")

conversation_history = []

def chat(user_message):
    conversation_history.append({
        "role": "user",
        "content": user_message
    })

    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        system="あなたは親切で知識豊富なアシスタントです。",
        messages=conversation_history
    )

    assistant_message = response.content[0].text

    conversation_history.append({
        "role": "assistant",
        "content": assistant_message
    })

    return assistant_message

# メインループ
print("チャットボット起動!(終了するには 'quit' と入力)")
while True:
    user_input = input("あなた: ")
    if user_input.lower() == "quit":
        break
    response = chat(user_input)
    print(f"Claude: {response}\n")

これを実行すると、ターミナル上で会話が続けられるチャットボットの完成です!試しに「さっき何を話したっけ?」と聞くと、ちゃんと文脈を覚えて答えてくれますよ。まぁ感動しますよね、正直。

Claude vs ChatGPT APIどっちがいい?費用・性能比較表

「結局どっちを使えばいいの?」という疑問、めちゃくちゃわかります。自分も両方使い倒してみたので、リアルな比較をまとめました。どちらにも一長一短あるので、目的に合わせて選ぶのが正解ですね。

比較項目 Claude API(Anthropic) ChatGPT API(OpenAI)
主力モデル claude-opus-4-6 / claude-sonnet-4-6 gpt-4o / gpt-4o-mini
入力コスト(1Kトークン) Opus: 約$0.015 / Sonnet: 約$0.003 gpt-4o: 約$0.005 / mini: 約$0.00015
出力コスト(1Kトークン) Opus: 約$0.075 / Sonnet: 約$0.015 gpt-4o: 約$0.015 / mini: 約$0.0006
コンテキストウィンドウ 200,000トークン(業界最大クラス) 128,000トークン
日本語性能 非常に高い・自然 高い・自然
長文・文書処理 ◎ 得意 ○ 十分
コード生成 ◎ 高精度 ◎ 高精度
指示遵守性 ◎ 非常に忠実 ○ 良好
安全性・ガードレール ◎ 業界最高水準 ○ 良好
Pythonライブラリ anthropic(公式) openai(公式)
無料枠 一部あり(要確認) $5クレジット(新規)
向いている用途 長文分析・文書要約・厳密な指示実行 汎用・コスト重視・エコシステム活用

管理人の結論:長文処理や文書解析をやりたいならClaude一択ですね。コストを抑えたい、あるいはOpenAIのエコシステム(Assistants API等)を使いたいならChatGPT。個人開発レベルなら両方試してみて好きな方を選べばOKですよ!

よくあるエラーと解決法

自分が実際にハマったエラーと、そのとき調べて解決した方法をまとめました。同じところで詰まってる人の参考になれば嬉しいです!

エラー1: AuthenticationError(認証エラー)

anthropic.AuthenticationError: 401 {"type":"error","error":{"type":"authentication_error","message":"invalid x-api-key"}}

原因:APIキーが間違っているか、"YOUR_API_KEY_HERE"のままになっている。(自分は後者でしばらく悩みました…なんのこっちゃって感じで笑)

解決法:APIキーをコピーするとき空白が混入しやすいので、api_key.strip()で前後の空白を除去するか、環境変数から読み込む方法に切り替えましょう。

import os
import anthropic

# 環境変数からAPIキーを読み込む(推奨)
client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))

エラー2: RateLimitError(レート制限)

anthropic.RateLimitError: 429 {"type":"error","error":{"type":"rate_limit_error","message":"..."}}

原因:短時間にAPIを叩きすぎた。無料枠や低ティアではリクエスト数に制限があります。(テスト中によくやらかしますよね)

解決法:リトライ処理を入れるか、リクエスト間にスリープを挟みましょう。

import time

def chat_with_retry(user_message, max_retries=3):
    for i in range(max_retries):
        try:
            return chat(user_message)
        except anthropic.RateLimitError:
            wait_time = 2 ** i  # 指数バックオフ
            print(f"レート制限に引っかかりました。{wait_time}秒待ちます...")
            time.sleep(wait_time)
    raise Exception("リトライ上限に達しました")

エラー3: max_tokens超過でレスポンスが途切れる

症状:Claudeの返答が途中で切れる。

原因:max_tokensの値が小さすぎる。(デフォルト値だと足りないことが多いです)

解決法:max_tokensを増やす。長い返答が必要なら40968192に設定しましょう。ただしコストも上がるので用途に合わせて調整を。

response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=4096,  # 必要に応じて増やす
    messages=conversation_history
)

エラー4: UnicodeDecodeError(文字化け)

症状:日本語の入出力で文字化けが起きる(主にWindows環境)。

解決法:スクリプトの先頭にエンコーディング宣言を追加するか、ターミナルのエンコーディングをUTF-8に設定してください。

# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

エラー5: 会話が長くなるとコンテキストオーバー

症状:長い会話を続けていると急にエラーが出るか、古い話を忘れる。

原因:会話履歴が長くなりすぎてコンテキストウィンドウを超える(またはコストが爆増する)。

解決法:一定数以上の履歴は削除するか、最新N件だけ渡すようにしましょう。これ、長く使ってるとじわじわ来るので最初から対策しておくといいですよ!

def chat(user_message, max_history=20):
    conversation_history.append({"role": "user", "content": user_message})

    # 最新20件だけ渡す
    trimmed_history = conversation_history[-max_history:]

    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=trimmed_history
    )

    assistant_message = response.content[0].text
    conversation_history.append({"role": "assistant", "content": assistant_message})
    return assistant_message

カスタマイズ応用編:専門ボットを作ろう

基本が動いたら次は「専門ボット」化です。systemプロンプトを変えるだけで、まったく別個性のボットが作れるのがLLMの面白いところですよね。自分がよく使うパターンを2つ紹介します。

応用例1:料理レシピ特化ボット

食材を入力すると、その食材を使ったレシピを提案してくれるボットです。料理好きな家族へのプレゼントアプリにも使えます!(実際に自分も家で動かしてみましたが、妻に「これ便利じゃん」と珍しく褒められました)

import anthropic
import os

client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))

SYSTEM_PROMPT = """
あなたはプロの料理研究家AIです。
ユーザーから食材や条件を聞いて、具体的なレシピを提案してください。

以下のルールを守ってください:
- レシピは必ず材料リストと手順に分けて説明する
- 調理時間と難易度(★1〜5)を必ず記載する
- 代替食材がある場合は提案する
- 子ども向け・大人向けのアレンジも添える
- 分量は2人前を基本とする
"""

conversation_history = []

def recipe_chat(user_message):
    conversation_history.append({"role": "user", "content": user_message})

    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=2048,
        system=SYSTEM_PROMPT,
        messages=conversation_history
    )

    reply = response.content[0].text
    conversation_history.append({"role": "assistant", "content": reply})
    return reply

print("料理レシピボット起動!食材を入力してください")
while True:
    user_input = input("食材・リクエスト: ")
    if user_input.lower() == "quit":
        break
    print(recipe_chat(user_input))

応用例2:英語学習コーチボット

英語を日本語で質問すると、表現の解説や例文を返してくれるボットです。まぁ、語学学習アプリを自分でカスタマイズできるのはかなり楽しいですよ。

SYSTEM_PROMPT_EN = """
あなたは英語学習コーチです。以下のルールで応答してください:

1. ユーザーが英語表現について質問したら:
   - 正確な意味と使い方を説明する
   - ネイティブが実際に使う例文を3つ提示する
   - 似た表現・類義語も紹介する
   - 日本人が間違えやすいポイントを指摘する

2. ユーザーが英作文を提出したら:
   - 文法・表現を添削する
   - より自然な表現に書き直す
   - なぜそう直すかを説明する

3. 回答は日本語でわかりやすく説明する
"""

コスト管理のコツ

APIを使い始めると気になるのがコストですよね。個人利用なら月数百円〜数千円に収まることが多いですが、油断すると思いがけず増えることもあります。自分が実践しているコスト管理のポイントをまとめました。

  1. 開発中はSonnetモデルを使う ― Opusの約1/5のコスト。テスト段階ではSonnetで十分です
  2. max_tokensを必要最小限に設定する ― 使わなかったトークンは課金されないので、余裕を持ちすぎない
  3. APIコンソールで使用量を定期的に確認する ― 月次予算アラートを設定しておくと安心
  4. 履歴のトリミングを必ず実装する ― 長い会話履歴は一番コストを食う。前述の対策必須!
  5. 本番前にローカルでロジックを検証する ― 無駄なAPI呼び出しを減らせます

まぁ、個人開発レベルならそこまでシビアにならなくてもいいですが、知っておいて損はないですよね。

まとめ:Claude APIで自分だけのAIを育てよう

今回やったことをざっくりまとめると:

  • Claude APIのアカウント作成・APIキー取得
  • Pythonで基本的なチャットボットを構築
  • 会話履歴を保持するループ処理の実装
  • ChatGPT APIとの比較
  • よくあるエラーと対処法
  • systemプロンプトを変えた専門ボットの応用例

Claude APIは日本語の精度が高く、長文処理が得意なので、ドキュメント要約・議事録整理・コードレビューなど業務系のタスクに特に向いています。ChatGPTよりコストが高めな面はありますが、その分クオリティは確かなので、用途次第では十分元が取れますよ!

まずは動くものを作って、そこから自分好みにカスタマイズしていくのが一番楽しいと思います。ってことで、ぜひ試してみてください!質問があればコメントかTwitter(X)でどうぞ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次