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

Codex + WSL2で、雑なメモを自動整理するLLM Wikiを作ってみる

0
Posted at

はじめに

日々、我々はたくさんのメモを取っています。取っていますよね?

開発をしていると、エラーの原因、ライブラリの調査結果、設計上の判断、試したけどうまくいかなかった方法など、いろいろなメモが増えていきます。

でも、メモを取ったあとに整理するのは面倒です。
あとで同じ問題に遭遇したときに「あのメモどこだっけ?」と探したり、結局もう一度同じことを調べたりするのは避けたいところです。

ならば、とりあえずメモを取って保存しておき、あとからLLMに整理してもらえばいいのでは??と思いました。

そこで気になったのが「LLM Wiki」です。この記事ではLLM Wikiについて話をしていこうと思います。

また、この記事では雑なメモをLLMが既存の情報と照合し、関連付けながら整理・更新していくナレッジベースをLLM Wikiと呼びます。
LLM Wikiそのものの考え方や背景については、以下の解説も参考にしてください。

Andrej Karpathy氏によるLLM Wikiの解説

LLM Wikiには、すでに以下のような実装があります。

これを使えばいいじゃんという話ではあるのですが、LLM Wikiの仕組みを知りたかったのと、まずはミニマムな構成で試したかったので、個人の検証用としてCodex + WSL2で小さなLLM Wikiを作ってみようと思います。

実際に作ってみる

では、raw/に置いたメモをLLMで整理するシンプルなWikiを作っていきます。
ディレクトリ構成は次のようにします。

LLMWiki/
├── AGENTS.md
├── wiki-purpose.md
├── wiki-schema.md
├── raw/
└── wiki/
    ├── index.md
    ├── overview.md
    ├── log.md
    ├── sources/
    ├── entities/
    ├── concepts/
    └── syntheses/

前提環境

今回は以下の環境を使います。

  • Windows
  • WSL2
  • Codex
  • VS Code
  • Git

必ずしも同じ環境である必要はありません。
Markdownファイルを扱える環境、Git、ローカルファイルを読み書きできるLLM / AIエージェントがあれば試せます。

業務上の資料、顧客情報、個人情報、機密情報などを扱う場合は、所属組織のセキュリティポリシーや、利用するLLM / AIサービスのデータ取り扱い条件を確認してください。
以下の構成やルールは、記事用に一般化したサンプルです。

1. プロジェクトを作る

まず、必要なディレクトリとファイルをまとめて作ります。

mkdir -p ~/work/LLMWiki
cd ~/work/LLMWiki

git init
git branch -m main

mkdir -p raw
mkdir -p wiki/{sources,entities,concepts,syntheses}

touch AGENTS.md wiki-purpose.md wiki-schema.md .gitignore
touch wiki/index.md wiki/overview.md wiki/log.md
touch raw/.gitkeep

この記事のサンプルでは、raw/ を未整理の原典置き場として扱い、Git管理の対象外にします。
.gitignore には以下を記載します。

raw/*
!raw/.gitkeep

PDFやWebページの保存などが増えると、リポジトリが大きくなりやすいためです。
原典もバックアップしたい場合は、別の保存先を用意するか、raw/ もGit管理する運用を検討してください。
実運用では、所属組織のルールに合わせてください。

2. LLMに整理ルールを渡す

今回の構成で重要なのは、以下の3ファイルです。

  • wiki-purpose.md: Wikiの目的
  • wiki-schema.md: ページの分類と保存形式
  • AGENTS.md: LLMが守る運用ルール

wiki-schema.md では、Wikiページを次の4種類に分けます。

種類 内容
source 1つの原典について整理したページ
entity 人物、企業、製品、ツールなど
concept 技術、概念、方法論など
synthesis 複数の情報を横断して整理したページ

最初から分類を増やしすぎず、必要になったら追加する方針です。
AGENTS.md には、特に次のルールを書いておきます。

## Core principles

- rawの既存ファイルは変更・削除しない
- rawの内容を単純にコピーするだけのWikiを作らない
- 新しい情報は既存Wikiとの関係を確認してから整理する
- 同じ内容のページを重複して作らない
- 可能な限り既存ページへ知識を統合する
- 関連するページ同士をMarkdownリンクで接続する
- 原典にない情報を事実として追加しない
- 原典を追跡できる状態にする

また、ingest、query、lint という3つの運用を定義します。

  • ingest: rawのメモをWikiへ整理・統合する
  • query: Wikiから必要な知識を取り出す
  • lint: リンク切れや重複ページなどを点検する

各ファイルの全文は長いため、この記事では要点だけ掲載します。

3. Wikiの初期ページを作る

wiki/index.md は、各ページへの入口として使います。

# Wiki Index

## Overview

- [Overview](overview.md)

## Sources

まだありません。

## Concepts

まだありません。

wiki/overview.md にはWiki全体の概要を、wiki/log.md には主要な変更履歴を残します。
ここまでできたら、一度コミットしておきます。

git add .
git commit -m "Initialize LLM Wiki"

4. 開発メモを取り込む

では、動作確認用のダミーメモを入れてみます。
raw/memo_1234567890.md を作り、次のように書きます。

# CIエラーの調査メモ

ライブラリAを更新したあと、CIだけビルドに失敗した。
ローカルでは通っている。

確認したら、ローカル環境は実行環境のバージョン2、
CIはバージョン1を使っていた。

CI側をバージョン2に変更したらビルドが通った。

次からは依存関係を更新するときに、
ローカルとCIの実行環境も確認したほうがよさそう。

調査中のメモなので、きれいな文章にする必要はありません。
続いて、Codexへ次のように依頼します。

ingest raw/memo_1234567890.md

ingest はLinuxのコマンドではなく、AGENTS.md に定義した自然言語上の運用コマンドです。

LLMは元のメモと既存Wikiを確認し、必要なページを作成・更新します。
今回の例では、次のような形になります。

wiki/
├── sources/
│   └── ci-build-error.md
├── concepts/
│   └── execution-environment-version-differences.md
├── index.md
├── overview.md
└── log.md

wiki/concepts/execution-environment-version-differences.md には、例えば次のような知識が整理されます。

# 実行環境のバージョン差異

ローカル環境とCI環境で実行環境のバージョンが異なると、
依存関係の更新後に、一方の環境だけビルドが失敗することがある。

## 確認すること

- ローカル環境とCI環境のバージョン
- ライブラリが要求するバージョン
- CIで指定している実行環境

単なるエラー記録が、別のプロジェクトでも参照できる確認項目になりました。

5. Gitの差分を確認する

LLMが処理を終えたら、すぐにコミットせず差分を確認します。

git status
git diff

特に確認したいのは以下です。

  • raw/ の原典が変更されていないか
  • ページが細かく分割されすぎていないか
  • 原典にない内容が追加されていないか
  • index.md と log.md が更新されているか

問題がなければコミットします。

git add .
git commit -m "Ingest initial memo"

6. 過去の知識を再利用する

別の開発でCIだけビルドに失敗したとします。
その場合は、LLMへ次のように質問します。

query: CIだけビルドに失敗するとき、確認したほうがよいことは?

すると、Wikiに保存された情報をもとに、次のような確認項目を取り出せます。

- ローカル環境とCI環境のバージョン
- ライブラリが要求するバージョン
- CIで指定している実行環境

先ほどの雑なメモを、別のタイミングで再利用する流れを確認できました。

この設計で重視したこと

今回重視したのは、「とりあえずメモを書く」と「知識を整理する」を分けることです。
人間側では、raw/ にとりあえず書くだけでよい状態を目指しています。

ただし、LLMに完全に自由に整理させると、次のような問題が起きやすくなります。

  • ページを細かく作りすぎる
  • 同じ概念のページが増える
  • 要約だけが大量に蓄積される
  • 情報源が分からなくなる

そのため、AGENTS.md で「既存ページを確認する」「重複を作らない」「原典を追跡できる状態にする」といったルールを決めています。
LLM Wikiの品質は、モデルそのものだけでなく、こうした運用ルールにも大きく左右されると思います。

また、この記事でいう「自動整理」は、raw/ を常時監視して勝手に処理するという意味ではありません。
人間が ingest を依頼したあと、読み取り、分類、既存ページとの統合をLLMに任せる構成です。

今後やりたいこと

この記事では、ダミーメモを1件取り込むところまで試しました。

今後は、実際にメモを増やしながら以下を確認したいと思います。

  • 複数メモを既存ページへ正しく統合できるか
  • conceptページが増えすぎないか
  • Wikiが大きくなっても必要な情報を見つけられるか
  • WebページやPDFも取り込めるようにする
  • lintやGitコミットを自動化する

最初から仕組みを複雑にしすぎず、必要になったものだけ追加していく予定です。

おわりに

今回は、Markdown、Git、Codexを使って、小さなLLM Wikiを作ってみました。
まずはこの構成で試しながら、必要に応じて整理ルールやページ構成を調整していこうと思います。
LLM Wikiに興味がある方は、ぜひ試してみてください!

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