AI Agents · レッスン

コンテキストウィンドウにおける短期記憶

会話履歴をmessages配列に保存します。最も単純なメモリの仕組みと、その厳しい制限について学びます。

レッスン 1/413 ステップ

「コンテキストウィンドウにおける短期記憶」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. コンテキストウィンドウにおける短期記憶
  2. 長いコンテキストがスケールしない理由
  3. 圧縮としての要約
  4. シンプルなメモリストア(Key-Value)
← AI Agentsに戻る