モデルは覚えていない。あなたが覚えているのだ。
大規模言語モデル(LLM)にはメモリがありません。
以前は、チャットセッションごとにコンテキストが保存されていると思っていました。しかし、それは間違いでした。LLMと会話するとき、前の質問を再度送らない限り、モデルは直前の質問を覚えていません。
モデルはステートレス(stateless)です。つまり、すべてのリクエストがゼロからのスタートであることを意味します。
会話を成立させるには、履歴を自分で管理する必要があります。具体的には、新しいリクエストを送るたびに、これまでのすべてのメッセージの配列を一緒に送信します。
「メモリ」とは、単なるメッセージのリストに過ぎません:
- User: Hello.
- Assistant: Hi there!
- User: How are you?
次のリクエストに最初の2行を含めなければ、モデルはあなたがすでに挨拶したことを知りません。
私はSDKを避けることで、この仕組みを学びました。ほとんどの開発者は、Anthropic SDKのようなツールを使って、この複雑さを隠蔽しています。SDKがメッセージ履歴やヘッダーを代わりに処理してくれるからです。
LLMがどのように動作するかを学びたいのであれば、代わりに生の fetch を使用してください。抽象化されたもの(abstraction)は使わないでください。リクエストとレスポンスのサイクルを手動で管理することで、あらゆる決定プロセスが見えてきます。
この手動による制御により、後から以下のような高度な戦略を構築できるようになります:
- 長いチャットを管理するためのスライディングウィンドウ(Sliding windows)。
- 検索拡張生成(RAG: Retrieval Augmented Generation)。
- セマンティック検索(Semantic search)。
この配列を理解することが、AI開発の基礎となります。コンテキストを提供しているのはあなた自身です。モデルは、あなたが送った内容しか知りません。
Source: https://dev.to/marcochavezco/the-model-doesnt-remember-you-do-3mmk