本文へ移動
メニュー

学ぶ

コースロードマッププラン受講者の声法人の方お知らせ

会員の方

マイページQ&A(質問と回答)ライトプランの解約クレジットカードの変更

相談する

LINEで無料相談お問い合わせ

レッスン 1 / 7

チャットボットの全体像

所要時間 20分無料で見られます

学ぶコト

  • ルールで答えるボットとLLMで答えるボットの違い
  • 今でもルールのほうが向いている場面
  • チャットボットを形づくる7つの部品
  • このコースで作るボットと、準備するもの

このコースでは、架空のネットショップ「ことり雑貨店」のお問い合わせ窓口のチャットボットを、Python で作って公開するところまで進めます。画面は Streamlit で作り、答えは OpenAI の API で作ります。

最初のレッスンでは、コードを書き始める前に「チャットボットはどんな部品でできているか」をおさえます。全体の地図を持っておくと、あとのレッスンで「今どこを作っているのか」が分かりやすくなります。

このページの Python のコードは「▶ 実行」を押すと、ブラウザの中で動かせます。上から順に実行してください。

チャットボットの2つの作り方

チャットボットの作り方は、大きく2つに分けられます。

  • ルールで答えるボット:「送料」という言葉が入っていたら、送料の説明を返す。あらかじめ決めた条件と答えの組で動きます
  • LLMで答えるボット:お客様の文章を大規模言語モデル(LLM)に渡して、答えの文章を作らせます。ChatGPT のような答え方ができます

まずは、ルールで答えるボットを作って動かしてみましょう。言葉が入っているかどうかだけで答えを選ぶ、いちばん簡単な形です。

import unicodedata

RULES = [
    (["送料", "配送料"], "送料は全国一律550円です。お買い上げ金額が5,000円以上のときは無料になります。"),
    (["営業時間", "受付時間"], "お問い合わせ窓口の受付時間は、平日の10時〜17時です。"),
    (["返品", "交換"], "商品が届いてから8日以内の、未使用の商品に限り返品を受け付けています。"),
]
FALLBACK = "申し訳ありません。そのご質問にはお答えできません。お問い合わせフォームからご連絡ください。"

def rule_bot(text):
    t = unicodedata.normalize("NFKC", text)  # 全角・半角の違いをそろえる
    for words, answer in RULES:
        if any(w in t for w in words):
            return answer
    return FALLBACK

rule_bot("送料はいくらですか?")

決まった質問には、決まった答えが正確に返ってきます。では、もう少し違う聞き方をしてみます。

questions = [
    "返品できますか",
    "注文した商品はいつ届きますか?",
    "いまカートに3,200円分あります。送料無料まであといくらですか?",
    "交換ではなく、色違いを追加で注文したいです",
]
for q in questions:
    print("Q:", q)
    print("A:", rule_bot(q))
    print()

結果を見ると、ルールで答えるボットの弱いところが分かります。

  • 「いつ届きますか?」は、ルールがないので答えられません
  • 「あといくら?」には、送料の一般的な説明を返すだけで、「あと1,800円です」とは答えられません
  • 「交換ではなく、追加で注文したい」は、「交換」という言葉に反応して、返品の説明を返してしまいました

ルールを足せば1つずつ直せますが、お客様の聞き方は無限にあります。ルールは増えるほど、どのルールが先に当たるかの管理も難しくなります。

LLMで答えるボットなら、言い回しが違っても意味をくみ取り、「あと1,800円で送料が無料になります」のように、質問に合わせた答えを作れます。その代わり、答えがいつも同じになるとは限らず、もっともらしい間違いをすることもあります。

ルールで答えるボットLLMで答えるボット
得意なこと決まった質問に、いつも同じ答えを返すいろいろな言い回しを理解し、質問に合わせて答える
苦手なことルールにない質問、言葉は合っていても意図が違う質問いつも同じ答えを返すこと、事実の正しさの保証
まちがえ方「分かりません」と答える・見当違いの答えを返すそれらしい間違い(ハルシネーション)を自信ありげに書く
費用作るのに手間がかかり、動かすのはほぼ無料作るのは早く、1回答えるごとにAPIの料金がかかる
直し方ルールを足す・直す指示(プロンプト)・渡すデータ・関数を直す

今でもルールのほうが向いている場面

LLMが出てきても、ルールが要らなくなったわけではありません。次のような場面では、今でもルールのほうが向いています。

  • 答えが1つに決まっていて、言い換えてほしくないもの:送料・営業時間・返品の期限・利用規約の文言など。LLMに言い換えさせると、細かい条件が抜けることがあります
  • 必ず決まった手順を通すもの:本人の確認、注文のキャンセル、支払い。LLMの判断に任せず、コードで決まった順に進めます
  • 間違えたときの影響が大きいもの:お金・契約・健康・法律に関わる判断。ボットは答えずに、人に引き継ぎます
  • とても数が多く、同じ質問ばかりのもの:1日に何万回も来る同じ質問は、決まった答えで返すほうが安く、速く、正確です

実際のサービスでは、ルールとLLMを組み合わせるのがふつうです。このコースで作るボットも、次のように分けます。

  1. まずルールで振り分ける(決まった質問・断るべき質問・人に引き継ぐ質問)
  2. それ以外の質問を、LLMに答えさせる
  3. 注文を調べる・日付を計算するなどの「正しさが大事な仕事」は、LLMからコードの関数を呼んでもらう
  4. キャンセルのような「取り消せない操作」は、お客様がボタンで確定するまで実行しない

チャットボットを形づくる7つの部品

LLMで答えるチャットボットは、次の7つの部品でできています。

部品役割このコースで使うもの
画面(UI)お客様が文章を入力し、答えを読むStreamlit
会話の状態これまでのやりとりを覚えておくPython のリスト(レッスン2)
モデル文章を読んで、答えを作るOpenAI の GPT-6 Luna(Responses API)
指示ボットの役割・話し方・答える範囲を決めるinstructions(レッスン6)
関数(ツール)注文を調べる・日付を計算するなど、コードで正しく行う仕事Function Calling(レッスン5)
データ店のルール・注文の情報など、答えのもとになる情報Python の辞書(本物ならデータベース)
ログどんな質問にどう答えたかの記録。見直して改善するJSON の記録(レッスン6・7)

お客様が1回質問すると、部品は次の順に動きます。

  1. お客様が画面に質問を書く
  2. ルールで振り分ける。決まった答えで返せるものは、ここで返す
  3. それ以外は、指示・これまでの会話・今の質問をまとめて、モデルに送る
  4. モデルが「注文を調べたい」と考えたら、関数を呼ぶよう頼んでくる。コードが関数を動かし、結果をモデルに返す
  5. モデルが答えを作り、画面に少しずつ表示する
  6. 答えを会話の状態に足し、ログに記録する

「モデル」は部品の1つにすぎません。ボットの出来は、モデルの賢さだけでなく、指示の書き方・渡すデータ・関数・ルールでの振り分けで大きく変わります。

このコースで作るもの

作るのは、ことり雑貨店のお問い合わせ窓口のボットです。次のことができるようにします。

  • 送料・返品・支払いなどのよくある質問に答える(決まった答えはルールで返す)
  • 注文番号と電話番号の下4桁から、注文の状況を調べる
  • 今注文したら、いつ届くかを計算する(店の休みを除いた日で数える)
  • 注文のキャンセルを受け付ける(確定はお客様がボタンで行う)
  • 店と関係のない質問や、指示を書き換えようとする入力を断る
  • クレームや「人と話したい」には、担当者への連絡のしかたを案内する
  • 使いすぎを防ぐ上限を付けて、インターネットに公開する

レッスンは次の7つです。

レッスン内容
1. チャットボットの全体像ルールとLLMの違い、部品、作るもの(このレッスン)
2. 会話の記憶を扱う履歴の持ち方、トークンの節約、お客様ごとの会話(ブラウザで動かせます)
3. まずはターミナルで動かすAPI で会話を続ける、少しずつ表示する、エラーに備える
4. Streamlit で画面を作るチャットの画面、会話の保存、設定のメニュー
5. 関数を呼ばせる(Function Calling)注文の検索・お届け日の計算、引数の確認、キャンセルの確定
6. 答え方を決めて守る指示の書き方、断る・引き継ぐ、入力と出力のチェック、ログの見直し(ブラウザで動かせます)
7. 公開して使ってもらうStreamlit Community Cloud、APIキーの管理、費用の上限、プライバシーの案内

準備するもの

このコースは「LLMのしくみとAPI入門」を終えた人を対象にしています。Responses API で答えを受け取る・会話を続ける・少しずつ受け取る、といった基本は、そちらで学んだ前提で進めます。

  • Python 3.11 以上:2026年10月時点の Streamlit は Python 3.11 以上で動きます。手元のパソコンに入れておきましょう(レッスン3で作業用のフォルダを作ります)
  • OpenAI の APIキー:「LLMのしくみとAPI入門」で作ったものを使います。このコースで使う GPT-6 Luna は、OpenAI のモデルの中でも安いモデルです。値段は料金のページで確かめてください。練習で数十回やりとりする程度なら、費用はわずかです
  • GitHub のアカウント:最後のレッスンで、作ったボットを公開するときに使います
ウマたんウマたん

いきなり全部を作ろうとすると、どこで止まっているのか分からなくなりがちです。このコースでは、ターミナルで動かす → 画面を付ける → 関数を足す → 守りを固める → 公開する、と一歩ずつ部品を足していきます。

演習

まとめ

  • チャットボットには、ルールで答えるものとLLMで答えるものがある。ルールは決まった質問に正確で、LLMはいろいろな言い回しに対応できる
  • 答えが1つに決まっているもの・決まった手順・間違えると影響が大きいものは、今でもルールやコードで扱う。実際のボットは、両方を組み合わせて作る
  • チャットボットは、画面・会話の状態・モデル・指示・関数・データ・ログの7つの部品でできている
  • このコースでは、ことり雑貨店のお問い合わせ窓口のボットを、部品を1つずつ足しながら作って公開する

次のレッスンでは、チャットボットが「会話を覚えている」しくみと、その記憶を上手に扱う方法を、ブラウザでコードを動かしながら見ていきます。