runlocal.cc
GPUを診断 →
Issue #32026年4月12日

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 の改善点です:

  1. 類似度閾値がない。 上位5件の結果はスコアに関わらずすべて注入されます。コサイン閾値(例:> 0.7)を設定することでノイズを除去できます。
  2. 記憶の要約がない。 生の会話ターンが蓄積されます。長期稼働するBotは最終的に冗長なコンテキストを注入するようになります。
  3. ファイル取り込みがない。 ローカルのメモやドキュメントは、まだ検索コーパスに含まれていません。

なぜ重要か

ランニングコストは電気代のみです。トークン消費なし、サブスクリプションなし、API レート制限なし。自分のプロジェクト、好み、履歴を把握したパーソナルアシスタントを構築したい方にとって、これがリファレンスアーキテクチャとなります。すべてのコンポーネントは安定しており、ARM64ネイティブです。

CPU の予算が Pi 5 より厳しい場合は、calculator をご覧ください — 8GB GPU でも nomic-embed-text と小型のジェネレーターモデルを同時に快適に実行できます。


Based on RunLocal Issue #3 · Full newsletter version on Substack →