0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【個人開発】PythonでLLMアプリをつくる前に押さえたい!

0
Posted at

トークン数・チャンク分割・Streamlitキャッシュの基礎知識まとめ


✍️ はじめに

LLM(大規模言語モデル)を使ったアプリを作る際、避けて通れない概念があります。それが以下の3つ:

  • トークン(token)
  • チャンク分割(text chunking)

これらを「なんとなく」で使い始めてしまうと、後でトラブルになりがちです。本記事では、PythonとLangChainでLLMアプリを構築する前提として、必ず理解しておきたい基礎知識をやさしく解説します。


🧠 トークンとは何か?なぜカウントするのか?

LLMが文章を理解・処理するときの最小単位、それが トークン(token) です。
トークン数を数える理由は主に3つ。

理由 説明
入力制限のため APIごとに「トークン数の上限」がある(例:gpt-4oは128k)
コスト管理のため OpenAIなどのAPIは「トークン数ベース」で課金される
精密な分割のため 特に日本語やコードは「文字数≠トークン数」なので、より正確な基準として用いる

たとえば、tiktoken ライブラリを使えば、モデルごとのトークン数を簡単に測れます:

import tiktoken
encoding = tiktoken.encoding_for_model("gpt-4o-mini")
num_tokens = len(encoding.encode("これはテストです。"))

✂️ チャンク分割とは?chunk_sizeは文字数 or トークン数?

LangChainなどで使うチャンク分割関数は、テキストを一定サイズで分割します。そのサイズの単位は**length_function の設定次第**で変わります。

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,
    length_function=len,  # ← ここが「文字数ベース」
)

この例では len を指定しているので、**chunk_sizeは「文字数」**です。

🔁 もしトークン数で分割したければ、こう変えます:

length_function=lambda x: len(tiktoken.encoding_for_model("gpt-4o").encode(x))

👣 embeddingの理解は後回しでOK? → YES!

埋め込み(embedding)とは、テキストを「ベクトル(数値のかたまり)」に変換して、意味的な近さを比較できるようにする技術です。

💡 今の段階では:

  • 「embedding = 類似検索やチャット履歴フィルタに使うもの」
  • 「ベクトルで意味を数値化してる」

これだけ把握しておけば十分。
写経しながら、あとで振り返って理解するスタイルでOKです!


✅ まとめ

LLMアプリを作る前に最低限おさえておきたいのは以下の3点:

  1. トークン単位で処理することの重要性
  2. チャンク分割は「文字数」か「トークン数」かを意識する
  3. Streamlitでは「データ用」と「道具用」でキャッシュを分ける

🔗 参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?