Persistent AI memory on a Raspberry Pi 5
Local embeddings + ChromaDB + Ollama in ~150 lines. ~$100 of hardware. No tokens.
RAG による長期記憶システム全体が、Raspberry Pi 5 上でわずか約600MBのRAMで動作します。 総ハードウェアコストは約$100(8GB Pi 5 + NVMe SSD)。すべてのコンポーネントはローカルで完結し、APIキーも不要、サブスクリプションも不要です。モデルのカタログは /models からご覧いただけます — このシステムはクラウド推論に一切依存していません。
スタック構成
構成要素は3つです:
| レイヤー | 選択 | 理由 |
|---|---|---|
| Embeddings | Ollama + nomic-embed-text |
ランタイムコストゼロ、ローカル動作、768次元ベクトル。日本語性能は「許容範囲」、英語は良好。 |
| ベクターストア | ChromaDB(Docker) | ARM64対応(LanceDB は Pi 5 上の Docker で問題あり)。アイドル時約30MB、コサイン類似度使用。 |
| インターフェース | Discord bot(Docker) | 既製品を活用し、カスタムUI開発不要。 |
ホスト:Raspberry Pi 5 · 8GB RAM · 238GB NVMe · Debian Bookworm · Node.js 22。
メモリモジュール
約150行のJavaScriptで、4つの関数から構成されています:
// Generate 768-dim vector from Ollama's REST API
embed(text)
// Initialize ChromaDB collection with cosine similarity
init()
// Store user + assistant pair, indexed by channelId + timestamp
saveConversation(channelId, userMessage, botResponse)
// Vectorize incoming query, return top-5 similar history
searchMemory(channelId, query)
Botへの統合は、既存のメッセージハンドラーへの2行の追加だけです:
// Before generating response — retrieve history
const memories = await searchMemory(channelId, userMessage);
const contextualMessage = memories + "\n\n" + userMessage;
// After responding — persist this turn (non-blocking)
saveConversation(channelId, userMessage, botResponse);
これがメモリレイヤーの全てです。
リソース使用量
| コンポーネント | アイドル時 | アクティブ時 |
|---|---|---|
| Ollama | 約33 MB | +540 MB |
| ChromaDB | 約30 MB | 約30 MB |
| 合計 | 約63 MB | 約603 MB |
8GB の Pi 上では、ピーク時でも RAM 使用率は8%未満です。Discord、Botランタイム、その他のプロセスのための余裕も十分にあります。
動作確認
意図的なセマンティックセッションのリセット後、Botに「今日は何を食べましたか?」と尋ねたところ、「カレーです!」と正しく以前のセッションから引き出して回答しました。Pi を再起動しても、会話履歴は保持され、文脈的に関連する場面で適切に表示されます。
既知の課題
著者が次のステップとして正直に記録している点です — いずれも標準的な RAG の改善点です:
- 類似度閾値がない。 上位5件の結果はスコアに関わらずすべて注入されます。コサイン閾値(例:> 0.7)を設定することでノイズを除去できます。
- 記憶の要約がない。 生の会話ターンが蓄積されます。長期稼働するBotは最終的に冗長なコンテキストを注入するようになります。
- ファイル取り込みがない。 ローカルのメモやドキュメントは、まだ検索コーパスに含まれていません。
なぜ重要か
ランニングコストは電気代のみです。トークン消費なし、サブスクリプションなし、API レート制限なし。自分のプロジェクト、好み、履歴を把握したパーソナルアシスタントを構築したい方にとって、これがリファレンスアーキテクチャとなります。すべてのコンポーネントは安定しており、ARM64ネイティブです。
CPU の予算が Pi 5 より厳しい場合は、calculator をご覧ください — 8GB GPU でも nomic-embed-text と小型のジェネレーターモデルを同時に快適に実行できます。
Based on RunLocal Issue #3 · Full newsletter version on Substack →