概要
https://speakerdeck.com/gfx/sutetoresunallmdesutetohurunaai-agentwozuo-ru-yapc-fukuoka-2025
詳細内容
## ステートレスなLLMでステートフルなAI agentを作る - YAPC::Fukuoka 2025
https://speakerdeck.com/gfx/sutetoresunallmdesutetohurunaai-agentwozuo-ru-yapc-fukuoka-2025
LLMが本質的にステートレスである課題に対し、アプリケーション側で「記憶」を設計・実装することでステートフルなAIエージェントを構築する技術と、その進化について解説する。
**Content Type**: 🛠️ Technical Reference
**Language**: ja
**Scores**: Signal:5/5 | Depth:5/5 | Unique:4/5 | Practical:5/5 | Anti-Hype:4/5
**Main Journal**: 94/100 | **Annex Potential**: 91/100 | **Overall**: 92/100
**Topics**: [[AI Agent, LLM Memory, RAG, Vector Search, Conversational AI]]
本発表では、LLM(大規模言語モデル)のステートレスな性質と、Cotomoのような対話型AIエージェントに不可欠なステートフルな「記憶」をいかに両立させるかについて、具体的なエンジニアリング手法を提示します。LLMのAPIコールは独立しており、過去のやり取りを覚えていませんが、アプリケーション側で会話履歴や関連情報を管理することで、あたかも記憶を持っているかのように見せかけることが可能です。
この「記憶」の実現には、主に二つの技術が鍵となります。一つは**RAG(Retrieval-Augmented Generation)**で、ユーザーの入力に関連する情報を外部データベース(特にPgvectorを用いたVector DB)から検索し、プロンプトに埋め込むことで長期記憶を実現します。これにより、コンテキストウィンドウの限界を回避しつつ、LLMに関連性の高い情報のみを渡し、応答の質を高めることができます。PgvectorにおけるANN(Approximate Nearest Neighbor)による効率的な近似検索の重要性も指摘されています。もう一つは**会話要約(Compaction)**で、短期記憶の課題に対応します。数ターンごとに会話履歴を別のLLMで要約し、これを常にプロンプトに含めることで、コンテキストウィンドウを節約しつつ、LLMに会話の全体像を伝え続けますが、要約による情報の欠落というトレードオフも存在します。
Cotomoの開発では、これらの記憶システムがv1からv3へと進化する過程が紹介されました。v1では「抽出された事実」をSTM(短期記憶)とRAGで共有しましたが、「その会話中の事実」と「普遍的な事実」の区別、情報の重複や更新の課題がありました。v2では生の会話データを直接RAGに利用し要約による情報欠落を避けましたが、ノイズとデータ量の問題に直面しました。構想中のv3では、Vector Search専用DBの導入、STMの役割をセッション中の要約に集中させ、会話履歴から「事実」を抽出しノイズを除去するだけでなく、定期的な記憶DBの整理(類似事実の統合、情報の更新検出)までを見据えています。
この記憶のエンジニアリングは、AIエージェントを単なる道具から真のパートナーへと進化させるための不可欠な要素であると著者は強調しています。