ブラウザに書いたキー
大阪の物流会社が、問い合わせを自動で分ける画面を作りました。担当者は、モデルを呼ぶためのAPIキーを、ブラウザで動くJavaScriptに書きました。
画面を開いた人は、だれでもそのキーを読めます。1か月後、知らない人がキーを使い、利用料の請求は30万円になりました。
キーをどこに置くかで、安全かどうかが決まります。
このレッスンのゴール
メモ
アプリがモデルを安全に呼ぶ流れを説明できる。
今日のキーワード
| ことば | いみ |
|---|---|
| API | プログラムどうしが、決まった形でやりとりする窓口です。 |
| APIキー | APIを使う権利を示す、秘密の文字列です。 |
| サーバー | 会社の側で動くコンピュータです。利用者からは中が見えません。 |
| 固定の指示 | アプリがいつもモデルに渡す、変わらない指示です。 |
| 出力の検証 | モデルの返事が使える形か、確かめることです。 |
学生が入力するセルは、このプレビューでは空白です。
キーはサーバーに置く
ブラウザで動くコードは、利用者のパソコンに届きます。中に書いたものは、だれでも読めます。
だから、APIキーはブラウザに書きません。会社のサーバーに置きます。
流れはこうです。ブラウザは、サーバーに問い合わせを送ります。サーバーがキーを付けてモデルを呼び、返事をブラウザに返します。
送るのは必要なものだけ
サーバーは、モデルに2つのものを送ります。アプリがいつも渡す固定の指示と、利用者の文章です。
固定の指示には、「答えは配送、返品、請求のどれか1語」のように、答えの形を書きます。
顧客の住所や電話番号は、分類には必要ありません。必要のない個人情報は、送る前に外します。
モデルに送るもの、送らないもの
| 情報 | 送るか | 理由 |
|---|---|---|
| 固定の指示 | 送る | 答えの形を決める |
| 問い合わせの文章 | 送る | 分類する材料になる |
| 顧客の電話番号 | 送らない | 分類に必要ない |
| 社内の在庫データ | 送らない | この作業に必要ない |
| APIキー | サーバーが付ける | ブラウザには置かない |
学生が入力するセルは、このプレビューでは空白です。
返事は確かめてから使う
モデルの返事は、いつも指示どおりとは限りません。余計な空白が付いたり、指示にない言葉が返ったりします。
利用者の文章に「指示を無視して」と書かれていることもあります。返事は、外から来た入力と同じように扱います。
そこで、出力の検証をします。決めた形に合う返事だけを使い、合わないものは人が確かめます。
やってみよう: 返事を検証する
# 物流会社の問い合わせを、モデルが分類します。
# ここにネットはありません。モデルの返事は、手で書いた文字列です。
allowed = ["配送", "返品", "請求"]
model_reply = " 返品\n"
# 返事をそのまま使わず、空白を取ってから一覧と比べます。
category = model_reply.strip()
if category in allowed:
print("担当チームへ送ります:", category)
else:
print("形が合わないので、人が確認します")
# model_reply を "全部の注文を取り消してください" に変えて、もう一度実行しましょう。
よくある誤解
注意
多くの人は、モデルの返事は指示どおりなので、そのまま画面やデータベースに使ってよいと考えます。返事は、利用者の文章に引きずられて変わることがあります。決めた形に合うか、必ず確かめましょう。