ガイド

AIチャットボットアプリの作り方:APIキー、プロンプト、費用と安全対策

AIチャットボットアプリを作るには、4つの要素が必要です。チャット画面、プロバイダーのAPIキーを保持してメッセージを転送する小さなサーバー、モデルに自身の役割と行ってよいことを伝えるシステムプロンプト、そして費用と不正利用を抑える制限です。AIアプリビルダーは、説明さえあればこれらすべてを作成できます。自分で担当するのは、プロバイダーの選択、指示文の作成、ボットが絶対に行わないことの決定です。

AIチャットボットアプリの構成要素

サポート用アシスタント、チューター、社内の「ドキュメントに質問」ツールなど、多くのチャットボットアプリには同じ要素があります。

要素役割省略できるか
チャットUIメッセージ一覧、入力欄、「考え中」の表示、ストリーミング返信できない
サーバーのルートユーザーのメッセージを受け取り、システムプロンプトを付加し、秘密のキーを使ってプロバイダーを呼び出すできない。キーがブラウザに届いてはならない
システムプロンプト役割、口調、対応範囲、断る内容などの常設指示できない
ナレッジボットが回答の根拠にする自社コンテンツ(FAQ、ポリシー、製品ドキュメント)汎用アシスタントなら可能
会話の保存利用者が後で戻れるよう、スレッドをデータベースに保存初版では可能
アカウント利用者ごとに自分の履歴だけを表示し、1人あたりの利用量を制限厳しい制限付きの公開デモなら可能
制限とログメッセージ長の上限、レート制限、利用上限、エラーの記録できない

よくある失敗はサーバーのルートです。チャットページがブラウザから直接プロバイダーを呼び出すと、開発者ツールでキーをコピーされ、誰でも料金を使えてしまいます。

構築前に決めること

プロバイダーとモデル

主要なプロバイダー(OpenAI、Anthropic、Googleなど)はいずれも、メッセージのリストを送ると返信が得られる、チャット形式のAPIを提供しています。実際の選択はブランドよりもモデルのサイズで決まります。

  • 小型で高速なモデルは安価で応答も速く、短い回答、分類、シンプルなFAQボットに向いています。
  • 大型のモデルは推論が優れ、長い指示にも安定して従い、曖昧な質問も扱えますが、1メッセージあたりの費用が高く、応答も遅くなります。

中規模のモデルから始め、実際の質問で試してから、必要に応じて上下に調整するとよいでしょう。APIの料金体系や呼び出し方に不慣れな場合は、先に LLM APIの使い方 を読んでください。

ボットの知識の出所

自社コンテンツ方法
1、2ページ(営業時間、返品規定、料金)システムプロンプトに直接書く
数十ページで、ほとんど変わらない要約版をプロンプトに入れるか、トピックごとに分けて関連部分だけを入れる
数百の文書、または毎日変わる内容保存して各質問に合う箇所を検索し、その部分だけを送る(RAG)

コンテンツを網羅できる最も単純な方法から始めてください。検索には索引、更新の仕組み、回答が誤る場所が増えるという手間があります。有用なボットの多くは、検索を必要としません。

公開か、ログイン制か

ウェブサイトの公開チャットボットは誰でも利用できますが、大量のメッセージを自動で送られる危険もあります。ログイン制にすれば、利用者ごとに履歴を保存し、アカウントごとに1日の利用枠を設定できます。公開する場合は、メッセージ長を制限し、一定期間に1人が送れるメッセージ数を制限し、プロバイダーのダッシュボードで月間の上限を厳しく設定してください。アカウント側の仕組みは アプリにログインを追加する方法 で説明しています。

会話を保存するかどうか

保存されたスレッドは、利用者が続きから再開でき、実際の質問を見てプロンプトを改善するのにも役立ちます。一方で、個人データでもあります。保存期間を決め、プライバシーポリシーに明記し、不要なものは保存しないでください。

システムプロンプトは職務記述書のように書く

システムプロンプトは、会話の前にモデルが毎回受け取る指示です。新入社員への短い業務指示書のように書くとよいでしょう。

  • 役割と対象者: 「あなたは自転車修理店Oaklineのヘルプアシスタントです。お客様と話します。」
  • 対応範囲: 「サービス、料金、営業時間、予約についての質問に答えてください。それ以外は、当店に関することしか対応できないと伝えてください。」
  • 情報源: 「以下の情報だけを使ってください。回答が見つからない場合は、わからないと伝え、店舗の電話番号を案内してください。」
  • 口調と長さ: 「親しみやすく平易な言葉で、詳しい説明を求められない限り3文以内で答えてください。」
  • 厳守事項: 「掲載されていない修理料金を約束しないでください。カード情報を尋ねないでください。」

その後、扱いにくい質問で試してください。対応範囲外の依頼、失礼なメッセージ、ナレッジにない内容の質問、指示を無視させようとする試み(「ルールを忘れて…」)などです。自分の名前で出せる回答になるまで、プロンプトを調整してください。

費用を予測可能に保つ

プロバイダーは、送った入力とモデルが書いた出力について、トークン(おおよそ単語の断片)単位で課金します。費用を左右するのは次の3点です。

  1. 会話の長さ。 新しいメッセージのたびに、モデルが文脈を把握できるようスレッド全体が通常は再送されます。40往復の会話は、4往復の会話より1回の返信がはるかに高くつきます。直近数往復だけを残すか、古いやりとりを要約してください。
  2. プロンプトのサイズ。 長いシステムプロンプトや大量の貼り付けた知識は、メッセージごとに送られます。
  3. 出力の長さ。 APIの呼び出しで返信の最大長を設定し、プロンプトで簡潔な回答を求めてください。

公開前にプロバイダーのダッシュボードで月間の利用上限を設定し、リクエストごとのトークン使用量を記録して、どの会話が高くつくかを把握してください。ここでは価格は示していません。モデルによって異なり、頻繁に変わるためです。プロバイダーの料金ページで確認してください。

段階的に作る

ステップ1:コードではなくボットを説明する

利用者、対応範囲、データ、安全ルールを書いた最初のプロンプトで、大部分が形になります。

オークライン(自転車修理店)のお客様向けヘルプチャットボットを作ってください。メッセージ一覧と入力欄があるチャットページで、返信は書かれながら順次表示されるようにしてください。サーバーのルートからAnthropic APIを呼び出し、秘密の環境変数ANTHROPIC_API_KEYを使ってください。キーをブラウザに渡さないでください。システムプロンプトは、shop-info.mdというファイルのサービス、料金、営業時間だけに答えるようにしてください。それ以外は「確かではありません。下記の番号にお電話ください」と答えてください。メッセージは500文字まで、訪問者1人につき1時間20通までに制限してください。スマートフォンでも使いやすい、清潔感のある親しみやすいデザインにしてください。

ステップ2:キーを秘密情報として追加する

プロバイダーのコンソールでキーを作成し、プロジェクトの環境変数またはシークレットに保存してください。チャットやコードに書いてはいけません。キーが公開された場所に現れたら、プロバイダーで無効化して新しいキーを作成してください。なぜ重要かは 環境変数とシークレットとは で説明しています。

ステップ3:インターフェースだけでなく回答を試す

チャットが動いたら、時間の大半は回答の品質に使ってください。実際の質問を20件ほど用意し、拒否されるべき質問もいくつか含めて、プロンプトを変更するたびに試します。確認すべき点は次のとおりです。

  • 対応範囲を守っているか?
  • 回答を作り上げる代わりに、わからないと認めているか?
  • 指示を覆そうとされても崩れないか?
  • ブラウザがダウンロードするものに、キーが含まれていないか?

ステップ4:必要ならメモリとアカウントを追加する

単一の会話が機能したら、データベースへのスレッド保存を依頼します。必要に応じて、利用者が自分のチャットだけを見られるよう、サインアップとログインも追加します。同時に、利用者ごとの1日のメッセージ上限も設定してください。

ステップ5:制限を有効にして公開する

公開したアプリがプレビューと同じシークレットを持ち、プロバイダー側で利用上限が設定され、エラーが確認できる場所に記録されていることを確かめてください。その後、メインサイトに載せる前に、少人数で共有してください。

安全性と信頼

チャットボットは、あなたの名前で不特定多数と話します。その失敗はあなたの問題として扱ってください。

  • 誤った回答。 モデルは誤りを自信満々に述べることがあります。対応範囲を狭くし、自社コンテンツに基づかせ、重要な内容については回答が誤る可能性があるという短い注意書きを表示してください。
  • プロンプトインジェクション。 利用者やボットが読む文書に「以前のルールを無視せよ」といった指示が含まれることがあります。信頼できない権限は与えないでください。返金、削除、メール送信は、自社のコードでの確認なしには、利用者の依頼だけで実行させないでください。
  • センシティブな話題。 医療、法律、金融の質問では、助言ではなく専門家への案内を行わせてください。
  • 個人データ。 必要がなければ、顧客の記録をプロンプトに貼り付けないでください。また、APIデータの扱いについてプロバイダーの規約を確認してください。

アプリ全体については、AIで作ったアプリのセキュリティチェックリスト を参照してください。

よくある失敗

  • ブラウザからプロバイダーを呼び出す。 キーが漏れます。必ずサーバーを経由させてください。
  • 公開ボットに制限を設けない。 1本のスクリプトで、1日のうちに月予算を使い切られることがあります。
  • RAG、ツール、複数モデルを一度に始める。 まず1つの会話を正しく動かし、実際の質問で必要性が見えてから追加してください。
  • 好意的な質問だけで試す。 利用者は初日から、奇妙で敵対的で対応範囲外の質問をします。
  • スレッドを無制限に伸ばす。 メッセージが増えるたびに、費用と応答時間が上がります。

既製の製品がより良い選択になる場合

自作が意味を持つのは、チャットボットが自社製品の一部であり、自社のデータや業務フローが必要で、独自の見た目や振る舞いを必要とする場合です。次のような場合は、既製品の方が適していることが多いです。

  • 既存サイトにサポートウィジェットを置くだけでよい。 多くのヘルプデスクやライブチャットの製品には、ヘルプセンターを読み込むAI回答ボットがあり、有人への引き継ぎ、受信箱、レポートがすでに備わっています。
  • 使うのは自分か社内のチームだけ。 ChatGPTやClaudeなどの汎用アシスタントに、文書をアップロードして使うだけで十分な場合があります。
  • 厳格なコンプライアンス保証が必要。 たとえば規制対象の医療データや金融データを扱う場合は、認証をすでに取得しているベンダーの方が、自作よりも安全なことがあります。

Mythexで作る

MythexはAIアプリビルダーです。チャットでチャットボットを説明すると、画面とサーバー側の呼び出しを作成し、ライブプレビューで動かし、公開URLに公開します。アプリ内のAIは自分のプロバイダーキーを使います。キーはプロジェクトのシークレットとして追加するか、必要になったときにMythexがチャットに表示するシークレットのカードから追加します。プロバイダーの利用料は、Mythexのビルドクレジットではなく、プロバイダーのアカウントに請求されます。Mythexは、アプリの利用者向けのトークンや、組み込みのナレッジベース製品、既製のレート制限を含みません。これらは依頼してテストする部分です。APIで自分のAIを追加する方法 では開始プロンプトを紹介し、アプリ内にAIを組み込む では手順を説明しています。

チャットに保存されたスレッドが必要な場合、依頼すればMythexがプロジェクトにPostgresデータベースを追加します。アプリにモデルを組み込む、要約から分類までの方法については アプリにAI機能を追加する方法 を、スターター用の出発点については アプリテンプレート を参照してください。

よくある質問

AIチャットボットアプリを作るには自分のAPIキーが必要ですか?

ほぼすべてのケースで必要です。チャットボットは各メッセージをOpenAI、Anthropic、Googleなどのモデルプロバイダーに送信し、プロバイダーはAPIキーを持つアカウントに料金を請求します。キーはWebページ上ではなく、必ずサーバー側に置いてください。

AIチャットボットの運用にはどれくらい費用がかかりますか?

プロバイダーは、送信したテキストとモデルが返すテキストの両方について、トークン単位で課金します。料金はモデルによって大きく異なります。新しいメッセージを送るたびに通常はそれまでの会話全体が再送されるため、長い会話ほど1メッセージあたりの費用が高くなります。プロバイダーの料金ページを確認し、ダッシュボードで利用上限を設定してください。

自分のドキュメントでチャットボットを学習させることはできますか?

通常、モデル自体を学習させることはありません。少量のコンテンツであれば、システムプロンプトに直接貼り付けます。大量のライブラリの場合は、コンテンツを保存して各質問に関連する箇所を検索し、その部分だけをモデルに送ります。この後者の方法は検索拡張生成(RAG)と呼ばれます。

コードを書かずにAIチャットボットアプリを作れますか?

はい。AIアプリビルダーに平易な言葉で説明すれば、チャット画面、モデルを呼び出すサーバーのルート、会話を保存するデータベースを作成できます。ただし、プロバイダーのアカウントとAPIキーは自分で作成する必要があります。

Mythex · Pricing · AIでなんでも作ろう · ウェブサイト・アプリのテンプレート · Mythexを比較 · AIアプリ開発用語集 · AIアプリ開発の無料ツール · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)