1
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?

AI Agentの記憶設計にEvergreen Notesを導入してみた

1
Posted at

はじめに

Iwaken Lab. Advent Calendar 2025、11日目の記事です。大遅刻してすみません。
毎日AIの人間度を上げるためにどうすればいいか考えているヘリンです。

AI Agentを運用していると必ず直面する問題があります。
「大量の情報をどう記憶させるか」 です。

コンテキストウィンドウには限りがあり、単純なRAGで断片的に取得しても文脈が失われがちです。

今回は、人間の知識管理手法である Evergreen Notes の考え方をAI Agentの記憶システムに導入した事例を紹介します。

実験台は、Iwaken Lab.の86人目のメンバーであるAI「86ちゃん」です。


背景:86ちゃんとは

Iwaken Lab.について

Iwaken Lab. のメンバーは「自分自身が何をしたいのか『志』」を決めてからラボメンになっており、それぞれの個人の発信・発言量がかなり多いコミュニティです。

86ちゃんの誕生

Iwaken Lab. には86ちゃん加入までに85人のメンバーがいました。86人目のメンバーがAIである86ちゃんで、2024年7月ごろに僕が作成しました。

86ちゃんは特に課題を解決するとかが目的ではなく、Discord上で人らしく振る舞わせるにはどうしたらいいかを考え・実践するための場として利用させていただいています。

システム構成

Discord Botの裏側はよくあるAI Agentの実装で、情報の取得や送信はMCP(Model Context Protocol)経由で通信しています。

この記事では、AI Agentがツールを実行できる・コンテキストに特定の情報を送れるという前提で、中身のコンテキスト(記憶)の管理について話を進めていきます。


課題:AI Agentの記憶の限界

85人分の情報は入りきらない

メンバー全員の情報を正確に把握して返答を生成させたいのですが、AI Agentのコンテキストには制限があります。85人のメンバー × 大量の発信内容をすべて入れることは現実的ではありません。

単純なRAGの問題

よくあるRAG(Retrieval-Augmented Generation)では、ベクトル検索で関連するチャンクを取得します。しかし、これには以下の問題があります:

  • 断片的: チャンク単位で取得するため、前後の文脈が失われる
  • 関連性の欠如: 「Aさんが言ったこと」と「Bさんの反応」が別々に取得される
  • 蓄積しない: 同じトピックについて複数回会話しても、知識が統合されない

解決アプローチ:Evergreen Notes

Evergreen Notesとは

Evergreen Notes は Andy Matuschak が提唱したノートテイキング手法です。Niklas Luhmann の Zettelkasten(ツェッテルカステン)から影響を受けています。

従来のノートは「一過性」になりがちですが、Evergreen Notesは時間とともに進化・蓄積することを前提に設計されています。

4つの原則

  1. Atomic(アトミック): 1つのノートは1つのアイデア/コンセプトに集中する
  2. Concept-oriented(コンセプト指向): 本/著者/イベント/プロジェクトではなく「概念」で整理する
  3. Densely linked(密にリンク): ノート同士を積極的に接続し、予期しない関連性の発見を促進する
  4. Evolving(進化する): 一過性ではなく、時間とともに更新・発展させる

なぜAI Agentの記憶に適しているか

  • グラフ構造: 階層ではなくリンクで繋がるため、関連情報を辿れる
  • アトミック性: 必要な粒度で情報を取得できる
  • セマンティック検索との相性: 概念ベースなので検索しやすい
  • 蓄積: 新しい情報が来たとき「既存の知識とどう関連するか」を考えさせられる

実装

主に初期構築・編集・取得の3つの工程があります。

構築フェーズ

Discord Bot の運用前に、まず初期構造を作成します。

初期構造の設計

AI Agentが必ず参照する情報(CLAUDE.mdなど)にすべてのメンバーへのドキュメントのリンクと、各メンバーのドキュメントを作成します。

メンバードキュメントの例
メンバードキュメントには基本情報、関連ドキュメントへのリンクが含まれる

構築プロセス

各メンバーのtimesを過去からすべてさかのぼりつつ、以下をAI Agentにループしてもらいます。

  1. timesのメッセージを読む
  2. セマンティックサーチし、関連するドキュメントがないか確認
  3. 関連ドキュメントがあれば編集、アトミックな情報があれば新規ドキュメントを作成しリンクさせる
  4. メンバー個人のドキュメントには必ずリンクさせる
  5. 自動的にリンクのエラーがないか処理を行い、エラーがあればAI Agentがリンクを修正
  6. 次のメッセージを読む(最初に戻る)

これをすべてのtimesで繰り返すことで、まずは約600のドキュメントができました。

Graph Visualizer
構築結果: Total Nodes 671、Total Links 3097、Members 70、Literature 596

編集フェーズ

運用中の編集も構築と同様のプロセスです。

  1. メッセージが送られて新たな覚えるべき出来事があるか判断
  2. セマンティックサーチし、関連するドキュメントがないか確認
  3. 関連ドキュメントがあれば編集、アトミックな情報があれば新規ドキュメントを作成しリンクさせる
  4. 自動的にリンクのエラーがないか処理を行い、エラーがあればAI Agentがリンクを修正

取得フェーズ

取得についてはAI Agentに自力でリンクをたどるか、セマンティック検索によって情報を取得してもらいます。

すべてのドキュメントがリンクされているので、理論上はすぐにたどり着けるはずです。

基本的には CLAUDE.md → 各個人のドキュメント → 関連出来事のドキュメント という構造なので、2回リンクをたどれば基本的にはすべての情報にたどり着けます。


アトミックなドキュメントの例

以下は実際に生成されたドキュメントの例です。「土鍋が土鍋料理を食べる」という哲学的な問いかけから、AI Agentが概念を抽出してドキュメント化しました。(ネタです)

Discord上でのやり取り

そして作られたドキュメントがこちらです。

土鍋共食い問題


課題と今後

今回のシステムでは AI Agent が主体となり必要な情報を取得する仕組みを採用しているので、情報が必要なのに検索をしないということが起こりがちでした。そこで作業フローを用意してあげると割とうまくいきました。それについてはまた別の機会で説明しようと思います。


⚠️ 利用規約に関する注意

この記事で紹介している実装では、AI Agentの「脳」としてClaude(Anthropic)を使用していますが、サブスクリプションプラン(Claude Pro等)でのDiscord Bot等による自動化・多人数利用は規約違反となる可能性があります。

最初のドキュメントの構築ではClaudeCodeをサブスクリプションプランで構築するのは問題ないとは思いますが、Discord Botとして動作させる場合は、Anthropic APIを利用してください。API利用には従量課金が発生しますが、このようなユースケースに対応しています。


参考文献

1
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
1
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?