コンテキストウィンドウにおける短期記憶
会話履歴をmessages配列に保存します。最も単純なメモリの仕組みと、その厳しい制限について学びます。
「コンテキストウィンドウにおける短期記憶」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
メモリは単なるリストです
チャット形式のLLMにおける「メモリ」とは、呼び出しのたびに送信するmessagesリストです。モデルはステートレスであり、リクエスト間の情報を何も知りません。
「短期メモリ」=その時点でそのリストに入っているものです。
機能する理由
ユーザーメッセージとアシスタントの応答をそれぞれ追加します。3つ目の質問をする頃には、モデルには次のように見えています。
messages = [
{'role': 'system', 'content': 'You are helpful.'},
{'role': 'user', 'content': 'My name is Alice.'},
{'role': 'assistant', 'content': 'Nice to meet you, Alice.'},
{'role': 'user', 'content': 'What is my name?'}
]
# Model replies: 'Alice'
for m in messages:
print(f"{m['role']}: {m['content']}")
print("Model replies: Alice")
コンテキストウィンドウの制限
すべてのモデルには、入力と出力を合わせた最大トークン数であるハードなコンテキストウィンドウがあります。
- gpt-4o-mini:128kトークン
- claude-sonnet-4-5:200kトークン
- gemini-1.5-pro:2Mトークン
これを超えると、APIはエラーになります。
トークンコストは線形です
毎ターン、すべてのトークンに対して料金が発生します。各ターンが500トークンの30ターンのチャットでは、履歴全体が再送されるため、最後の呼び出しだけで15,000入力トークン分の料金が発生します。
長いセッションはすぐに高額になります。
Lost-In-The-Middle
コンテキストが200kあっても、モデルは長いプロンプトの中央にある内容への注意が低下します。重要な情報は、先頭(system)または末尾(直近のユーザーメッセージ)に置くべきです。
スライディングウィンドウによる切り詰め
最も単純なメモリ管理方法は、systemメッセージと直近Nターンだけを残すことです。
MAX_TURNS = 20 # 10 user + 10 assistant
def trim(messages):
system = messages[0]
rest = messages[1:]
return [system] + rest[-MAX_TURNS:]
demo_messages = [{'role': 'system', 'content': 'sys'}] + [
{'role': 'user' if i % 2 == 0 else 'assistant', 'content': f'msg {i}'} for i in range(30)
]
trimmed = trim(demo_messages)
print(f"Original messages: {len(demo_messages)}")
print(f"Trimmed messages: {len(trimmed)}")
トークン単位のトリミング
より正確にするには、ターン数ではなくトークン数でトリミングします。
import tiktoken
enc = tiktoken.encoding_for_model('gpt-4o-mini')
def trim_by_tokens(messages, max_tokens=8000):
out = [messages[0]] # keep system
tokens_left = max_tokens - len(enc.encode(messages[0]['content']))
# walk backwards from newest
for m in reversed(messages[1:]):
cost = len(enc.encode(m['content'])) + 4
if cost > tokens_left:
break
out.insert(1, m)
tokens_left -= cost
return outペアを一緒に保持する
ペアの途中で切り詰めると、対応するツール呼び出しが取り残されます。常にユーザーとアシスタントのターンを一緒に削除してください。
# Bad: cuts after assistant call but before tool result
# Good: trim whole turns (user + all responses)
print("Bad: cuts after assistant call but before tool result")
print("Good: trim whole turns (user + all responses)")
短期メモリでは不十分な場合
短期メモリは、次のような場合に機能しなくなります。
- 会話が20ターンを超える
- ユーザーが翌日に戻ってきて、前回の内容を覚えていることを期待する
- 複数のユーザーが同じエージェントを共有する
別の戦略が必要です。次のレッスンを参照してください。
システムプロンプトは固定したままにする
システムメッセージは常に先頭の項目にする必要があります。決して削除しないでください。システムメッセージには、アイデンティティ、ルール、ツールの説明が含まれています。
最近のシステム更新を固定する
「ユーザーは摂氏を好むことを覚えておく」というシステムノートを追加する場合は、元のシステムプロンプトと同じように先頭に固定してください。
SYSTEM_PROMPT = 'You are a helpful assistant.'
messages = [
{'role': 'system', 'content': SYSTEM_PROMPT},
{'role': 'system', 'content': 'USER PREFERENCE: Celsius units'},
{'role': 'user', 'content': 'What is the weather in Paris?'},
{'role': 'assistant', 'content': 'It is 21C and sunny.'},
]
print('Pinned system messages:')
for m in messages:
if m['role'] == 'system':
print(' -', m['content'])
print('Total messages:', len(messages))
コンテキスト制限
モデルのコンテキストウィンドウを超えると、何が起こるでしょうか。
まとめ
短期メモリ = メッセージのリストです。スライディングウィンドウ方式またはトークンベースの削除で管理し、システムメッセージを固定し、ターン数に応じてコストが増えることを受け入れてください。
AI チューターと学ぶ AI Agents — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 60
- レッスン
- 239
よくある質問
「コンテキストウィンドウにおける短期記憶」レッスンは無料ですか?
はい。「コンテキストウィンドウにおける短期記憶」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「コンテキストウィンドウにおける短期記憶」で何を学びますか?
会話履歴をmessages配列に保存します。最も単純なメモリの仕組みと、その厳しい制限について学びます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「コンテキストウィンドウにおける短期記憶」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- コンテキストウィンドウにおける短期記憶
- 長いコンテキストがスケールしない理由
- 圧縮としての要約
- シンプルなメモリストア(Key-Value)