自分のことを何でも知っているAIパーソナルエージェントをつくろうとしている. そのための情報源して、いろいろな媒体にアウトプットしていたテキストデータを与えてみた.
Agentにわたしを理解させるとは?
「Agentがわたしを理解する」とは、テキスト情報の要約とインデックス化.
会話でわたしについて質問しても、それをいちいち検索していたら時間がかかる. そのため、どのテキストファイルにどの情報があるかという地図と、大量の情報の要約が必要. 要約には、時系列やテーマ別などの切り口がある.
運用方法
もともと Emacs org-modeで ドキュメント作成していた. GTD、自己分析、日記、つぶやきなど. ここにどうAgentを組み込んでいくかが課題だった.
わたしの書いたorg-modeはAgentに上書きされたくなかったので、エージェントがわたしのアウトプットをすべて要約してわたしを理解するための、専用フォルダを作成することにした.
自己分析
5年ほど前にそこそこガッツリ自己分析をした1. 具体的には、八木仁平さんの世界一やさしい「やりたいこと」の見つけ方の書籍を参考にして、重要なこと、得意なこと、好きなことの3軸で分析してドキュメントにした.
問題点は5年前の分析と今とでは、ドキュメントが劣化していることだった. 好きなこと、得意なこと、そして大事なことはイベントによって数カ月ごとに少しずつ変化していく. そのため、Agentにはあくまで参考資料としつつ、最近の日記から価値観の差分を埋めるように指示して、ドキュメントを作成した.
- profile.md: わたしについての基本情報、年表
- traits.md: 大事なこと、価値観
- passions.md: 好きなこと. 分野ではなく、そこから抽出した行為をパターンにする
- evaluations.md: 他者からの評価. 得意なことは自己評価ではなく他者を根拠にする
- history.md: 性格と価値観の変遷. 2つはイベントによって変化する
- log: 時系列のわたしの要約
- 過去分はyearly、これからについては weekly/mothly/yearly
- people: 他人とわたしの関係. 人ごとにファイル作成
- places: 場所とわたしの関係. 場所ごとにファイル作成
GTD
GTDのフレームワークには6つのレベルがあり、それに合わせてorg-modeをすでに作成していたので、これを元に同じような構成で Markdown filesでメタ要約してもらう.
- horizons.md: 目標管理
- projects.md: 進行中のプロジェクト、期限あり
- areas: 関心領域、期限なし
- health.md
- hobbies.md
- home.md
- mind.md
- money.md
- relationships.md
- social.md
- work.md
日常のタスク管理は、今もorg-fileでしているんだが、Agent時代に合わなくなってきた気もするので、別の方法を模索してる. ただ、いずれにしてもタスクの完了ログがあると、それをgrepすることでいろいろな埋もれていた情報を抜き出すことができる.
要約ドキュメントとインデックスの更新
基本的にわたしの情報を勝手にみて自律的に要約をしてほしいとは思う. わたしはAgentにとって、檻に入れられたマウスであり、人間がマウスを観察するようにわたしの情報をみて、観察日記を記録してほしい.
そのため更新のタイミングは、対話したときにドキュメントのupdateが必要ならば自動更新するようにした.
また、GTDレビューを定期的に行うので、価値観や目標のドキュメント更新もこのタイミングにした.
わたしのテスト質問をすることで理解度チェック
いったん要約ができたら、テスト質問を投げかけることでわたしについての理解度チェック. 質問をトリガーにして、自律的にドキュメントを検索して横断的に軸にそって足りない情報をインデックスしてくれる.
- わたしの得意なことは?
- わたしの趣味は?
- わたしの価値観は?
LLM Wikiとの比較
ある程度完成したあと、これはLLM Wiki2に似ていることに気づいた.
LLM Wikiでは3つのレイヤで情報を整理する.
- Layer 1 (Raw/sources): 論文、記事、コード、チャットログなどの変更されない原始データ保管庫。
- Layer 2 (Wiki): LLMが生成・保守する人間可読なMarkdownのトピック・概念ページ群。
- Layer 3 (Schema): 運用ルールやエージェントの行動指針を記述したファイル(CLAUDE.md や AGENTS.md など)。
さらに3つのドキュメント更新のプロセスがある.
- Ingest(取り込み): 新しい資料を追加した際に、関連する複数のWikiページをまとめて更新・リンク作成する。
- Query(照会・拡張): Wikiを参照して回答し、得られた新しい知見を適宜Wikiへ書き戻す。
- Lint / Maintenance(保守): 定期的に全体をスキャンして重複や古い情報を整理・修正する。
LLM GTDはGTDレビューでドキュメントをupdateする
私の場合、org-mode filesはわたしの担当で、Markdown要約がAgentの担当と明確にわけたことが、source/wikiでレイヤがうまく分かれていた.
対話の延長でのドキュメント更新はQueryに相当する. Lintは仕組みがないからファイルサイズチェックや矛盾点がないかを週次レビューでチェックする仕組みを追加した.
また、LLM Wikiにないパターンとして、GTDの週次/月次/年次のレビューでわたしのについての知識を前回までの差分をみながらUpdateする独自スキルを追加した.
LLM GTDはメモを無限発散させない
LLM GTDとLLM Wikiの重要な違いは、Wikiは無限にentriesが増えていくが、GTDをベースにした自己管理システムではカテゴリはある程度決めておき、増やさないこと.
GTDはある程度の規律があるからパターンにしたがってタスクをベルトコンベア的に処理できるのであり、メモの無限発散はアンチパターンだ.
情報源
- ブログ
- Emacs org-mode files
- docs
過去に複数アカウントでつぶやいていたが、アーカイブのエクスポートで全部取り出して時系列で要約.
ブログ
mixi, Yahooブログ、Notion、個人ブロク数個、素のHTMLでつくっていたgeocitiesサイトなどなど、過去の日記をすべて時系列に要約.
なおブログやmixiからの記事の抜き出しは、プレインテキストへの決意(後述)によって、すべて過去にコピペマンパワーによってテキストデータとして保持していた.
1年ほどNotionで個人週報を書いていたが、これはAgentでテキストデータを抽出して要約した. 過去データのテキストデータ発掘にはAgentはとても便利だ. もうマンパワーコピペマシーンになる必要はない.
Emacs org-mode files
わたしは基本的に昔からEmacs org-modeでテキストデータとしていろいろな個人的情報を残していたので、これを全部Claude に与えて要約させた.
- GTD: タスクログ. org_archvies
- org-roam(zettelkasten): 自分の思想
- org-capture: 分報コメント
現在のナレッジベースと日記および自分の考えのまとめとして、ほとんどの情報がEmacs org-mode filesにまとまっている. 本格的に運用をしているのが4年前からだが、
外部アウトプットするまてもないくだらない1行コメントもEmacs org-captureで記録する習慣が昔からあったのだが、キーワードがあるとそれをgrepでAgentが見つけて情報として構築するのは役に立つ. 3
過去の自分についてのdocs
履歴書とか、過去にガッツリおこなった自己分析資料など、役に立ちそうな情報をどんど要約させた.
感想
自分の検索情報のためのインデックスをつくる
自己分析を構築する際、根拠となるドキュメントへの参照filepathは残すようにした. Eamcs org-modeの場合、orgidもつかえる.
Googleがウェブページをindexingするように、わたしについて検索するために、わたし情報をindexingする.
今は試行錯誤なので、ファイルパスだとフォルダ移動で頻繁に書き換えが発生してメンテナンスが悪いところが課題.
Org-modeは AI readonly、Markdownは 人間 readonlyで相互にメタ認知しあう
わたしの書いたorg-modeは AIに書き換えてほしくなかったので、AIからはreadonlyにすることにした。さらに AIが読み書きする文章は Markdownで残すことで、EmacsからMarkdownを編集したくないので自然と readonlyとなる。
わたしはAIからみた自分の要約をみることで自己理解が深まる. 一方でAIはわたしの書いたOrg-modeを読むことでわたしに対する理解が深まる.
面白いことに、AIとわたしの相互メタ認知システムが完成した
プレインテキストへの決意によって手元に自分の思考が残っていた
わたしは昔からプレインテキストにこだわってきて、可能な限りorg-mode/markdownでドキュメントを残してgitで管理するように努めてきた.
プレインテキストへの決意 ~for progmatic programmer~ | Futurismo
このような運用を10年以上前にして実践してきたことが、LLM時代でとくに役立ってるように思う. テキストファイル、そしてテキストエディタの王であるEmacsを信じて使ってきた老害マインドがまさかの功を奏した.
大学生以前のテキストデータがなくて学習できないAgent先史時代
逆に驚いたことは、大学生以前の中高生の思い出が、電子データとして残ってないことによって、Agentが学習することができないこと. わたしの歴史が電子データとして残っていないと、もはや大学生以前はロストヒストリー先史時代といえよう.
自分史として、いちおうはテキストファイルに主要な出来事を書き出してそれを読み込ませた. ただ、大学生以後の情報も、現在の記憶と当時の思い出の矛盾がたくさんあり、そのたびごとにAgentに質問されたことは驚いた. このことは、自分の記憶は一部を間違って記憶しているということを示していた. 10年前ですら間違っているのならば、子どものときなんてもっと間違ってそうだ.
自分の価値観とか性格とかが、そういう間違った記憶と解釈によってUpdateされ続けていたら、それは厄介だ.
大事なこと、得意なこと、好きなことを頻繁にUpdateしていくという自己理解2.0へ
5年前のブログ記事にも書いたことだが、価値観や性格は、出来事とその解釈によって少しずつ数カ月ごとに書き換えられていく. 5年前と就活のときの自己分析は半分くらいズレていたし、今と5年前も10%以上はズレがある.
特にこの数年を振り返ってみると、仏教的価値観に自分が強く影響され、価値観が書き換えれつつあることを、今回の取り組みでメタ認知したことは大きな収穫だった. 気づきの瞑想をすると神経可塑性によって脳が書き換わるという都市伝説は信じていないが、LLMによるセカンドブレインのアップデートでわたしの脳が書き換えられたことをメタ認知した.
ただ、問題は5年前にそこそこ頑張って自己分析をしたものの、やはりそこそこ労力が必要な結果、ドキュメントの更新が停滞してしまい、今の価値観と自己分析ドキュメントが乖離し始めた. 理想的には4半期ごとにやるべきなんだが、めんどくさくてやらなかった.
そこで、LLM GTDシステムの定期レビューの出番だ. がっりつ自己分析と、イベントによる現在の価値観や性格の差分を、日記から差分アップデートをかけていく. 自己理解とは、エンジニアリングの範疇に入ったと言えよう.
テキスト以外をどうAgentに分析させるかという課題
わたしをAgentから理解させようとしたとき、主なインプットがテキストデータしかないことも課題だとは思っている.
ライフログとして他にもわたしについての健康データ4や、自宅環境データがあり、これらを現在熱心に集め始めた. ただ、画像や動画、位置情報にしても、結局は言語に変換されてテキストデータにして要約しておかないと、Agentからは価値ある情報として認識されない.
また、自己理解のためには、人との会話が重要となるだろう. 他人から言われたことや他人にいったことに、自分の価値観や性格が強く現れているが、それを捉えることが難しい. 自分でアウトプットした情報には強いバイアスがかかる.