その「トークン」、文字の話ですか?ログインの話ですか?
最近AIを使っていて思いました。
みんな「トークン」って言いすぎじゃない?
AIの話でもトークン。
認証の話でもトークン。
APIの話でもトークン。
最初は普通にちんぷんかんぷんでした。
結論
まず、これだけでだいぶ楽です。
AIのトークン = AIが文章を読む単位
認証のトークン = APIやサービスに入るための通行証
JWT = トークンの形式のひとつ
AIのトークン
AIの文脈でいうトークンは、ざっくり言うと
AIが文章を読むための単位
です。
人間は文章を文字や単語として読みますが、AIは内部的に文章をトークンという単位に分けて処理します。
OpenAIの説明でも、トークンはモデルが処理するテキストの単位で、英語では1トークンがおよそ4文字、100トークンがおよそ75語の目安とされています。
参考: OpenAI Help: What are tokens and how to count them?
つまりAI界隈で、
トークン数が多い
トークンを節約する
コンテキスト長が足りない
と言っているときは、だいたい
AIに読ませる文章量の話
です。
AIのトークンは料金にも関係する
AI APIでは、入力と出力のトークン数が料金に関係します。
OpenAI APIでも、モデルごとにinput tokens / output tokensなどの単位で料金が設定されています。
参考: OpenAI API Pricing
なので、長い仕様書やログを全部貼ると、普通にトークンを食います。
ここでのトークンは、ログインとかJWTの話ではありません。
認証のトークン
認証の文脈でいうトークンは、AIのトークンとは別物です。
ざっくり言うと、
APIやサービスに入るための通行証
です。
APIを叩くときによく見るこれです。
Authorization: Bearer <access_token>
OAuth 2.0は、HTTPサービスに対して限定的なアクセスを与えるための認可フレームワークとして定義されています。
参考: RFC 6749: The OAuth 2.0 Authorization Framework
つまり認証界隈で、
トークンが切れた
アクセストークン渡して
リフレッシュトークンで再発行して
と言っているときは、
ログイン状態やAPIアクセス権の話
です。
JWTは何なのか
JWTは JSON Web Token の略です。
大事なのはこれです。
JWT = トークンの形式のひとつ
JWTはだいたいこういう形をしています。
xxxxx.yyyyy.zzzzz
RFC 7519では、JWTは2者間でclaimsをJSONオブジェクトとして安全に表現するためのコンパクトな手段として定義されています。
参考: RFC 7519: JSON Web Token
ちなみに、JWTの中身は基本的に読めます。
JWTは暗号化されてるから中身は見えない
と思いがちですが、署名付きJWTは主に改ざん検知のためのものです。
なので、JWTのPayloadにパスワードやAPIキーを入れるのはやめた方がいいです。
一番ややこしいやつ
トークンが切れた
この一言だけだと、何の話か分かりません。
| 言い方 | 意味 |
|---|---|
| AIのトークンが足りない | モデルに入る文章量を超えそう |
| トークン数が多い | AIに読ませる量が多い |
| アクセストークンが切れた | 認証情報の有効期限が切れた |
| リフレッシュトークンが切れた | 再ログインが必要かもしれない |
| JWTを検証する | 認証・認可用のトークン形式を確認する |
同じ「トークン」でも、意味が違いすぎます。
まとめ
自分はこう覚えることにしました。
AIのトークン = 文章を読む単位
認証のトークン = 通行証
JWT = 通行証の形式のひとつ
もう少し雑に言うと、
AIのトークンは「文字っぽいやつ」
認証のトークンは「入館証っぽいやつ」
JWTは「入館証のフォーマットっぽいやつ」
です。
最後に一言でまとめると、これです。
その「トークン」、文字の話ですか?ログインの話ですか?
これを意識するだけで、AI・API・認証周りの会話がだいぶ整理しやすくなりました。