Skillsで実現する軽量パーソナルRAG
以前、MCPサーバーとしてRAGを構築する記事を書きました。
PostgreSQL + pgvector + multilingual-e5-large という構成で、MCP経由でベクトル検索できるRAGサーバーです。このMCP RAGサーバーは、気に入ってはいたのですが、PostgreSQL + Dockerが必要だったり、MCPサーバーとしての設定が必要だったりと、少し使い勝手の悪い部分がありました。
今回は、もっと手軽にRAGを実現したいなと思いSkillを活用してもっと軽量なRAGを実現しました。PostgreSQLやDockerは不要でuvとSQLiteで動きます。
workspace-rag
アーキテクチャ
RAGの構成自体は、MCPと同じです。

違うのは、MCPでなくSkillsで実現するところです。技術スタックは以下の通りです。
- DB: SQLite
-
埋め込みモデル:
intfloat/multilingual-e5-small(384次元、約500MB) - 検索: コサイン類似度によるベクトル検索
MCP RAGサーバーとの比較
前回のMCPサーバー版と今回のworkspace-ragを比較します。
MCP RAGサーバー(前回):
- DB: PostgreSQL + pgvector(Docker必須)
- モデル: multilingual-e5-large(1024次元、約1.2GB)
- インターフェース: MCPプロトコル
- セットアップ: Docker, .env設定, PostgreSQL初期化
workspace-rag(今回):
- DB: SQLite(ファイル1つ)
- モデル: multilingual-e5-small(384次元、約500MB)
- インターフェース: AIエージェントのスキル(CLIコマンドとして実行)
- セットアップ:
uv syncだけ
最大の違いはインターフェースです。MCP版はMCPプロトコルに準拠したサーバーとして動作しますが、workspace-ragはAIエージェントのSkillsとして組み込まれています。
Skillsとは
Skillsとは、Anthropicが提唱したAIエージェントの規格で、AIエージェントが様々なツールを使うための仕組みです。他のサブエージェント、MCPなどとの違いは以下記事参照してください。
SKILL.md(使い方のマニュアル)とスクリプトをセットで所定のディレクトリに置くだけで、AIエージェントが自律的に使えるようになります。skillを配置するディレクトリの場所は、AIエージェントによって異なります。シンボリックリンクを貼っておくと、全エージェント共通で利用できるので便利です。
workspace-ragのコードやシンボリックリンクの貼り方は以下リポジトリを参考にしてください。
AIエージェントは「ワークスペースを検索したい」と思ったら、SKILL.mdに書かれた手順に従って、スクリプトのあるディレクトリで以下コマンドを実行します。
# AIエージェントがSKILL.mdの手順に従って実行
uv run python workspace_rag.py search -w /path/to/workspace -q "去年のイベント登壇資料"
MCPサーバーのように常駐プロセスを立てる必要もなく、使いたい時にコマンドを叩くだけで動きます。スキルの追加・変更もファイルを置くだけで完了します。
関連度スコア付き検索
もう一つの工夫として、検索結果に関連度スコアを付与しています。具体的には以下のような形です。
文書1 [関連度: 0.92 (高)]: メモリファイルの管理方法について...
文書2 [関連度: 0.31 (低)]: 猫の写真を撮るコツ...
質問: メモリファイルの書き方は?
この関連度の情報により、AIエージェントが「どの文書を重視すべきか」を判断しやすくなります。この部分は、R²AG(EMNLP 2024)のアイデアを簡易実装したものとなります。
動作確認
インデックス作成
$ uv run python workspace_rag.py index -w ~/workspace
📊 インデックス統計:
新規: 342ファイル
更新: 0ファイル
スキップ: 0ファイル
合計チャンク: 2,847
初回は数分かかりますが、2回目以降は差分のみなので数秒で終わります。
検索
$ uv run python workspace_rag.py search -w ~/workspace -q "コンテキストエンジニアリング" --r2ag
🔍 検索結果 (5件):
[1] [関連度: 0.94 (高)] skills/context-engineering/SKILL.md
コンテキストエンジニアリングの実践方法...
[2] [関連度: 0.89 (高)] notes/20260115_context_tips.md
AGENTS.mdの書き方のコツ...
[3] [関連度: 0.72 (中)] memory/20260120.md
コンテキストの整理作業を実施...
常駐HTTPサーバーで高速化
CLIの課題
上記のCLI版(workspace_rag.py search)は、実行のたびにモデルをロードするため、1回の検索に数秒〜10秒程度かかります。実測では、モデルロードに約8秒、DB取得+行列構築に約1秒、合計約9秒でした(約20万チャンクの環境)。AIエージェントがセッション中に何度も検索するケースでは、この待ち時間の影響が大きくなります。
常駐サーバー版
時間の短縮は、モデルをロードした常駐HTTPサーバーを用意することで実現できます。
workspace-ragではworkspace_rag_server.pyというHTTPサーバーを使うことができます。サーバーを使うと、検索が約0.1sとなります。
使い方はSKILL.mdを参照してください。PC起動時にサーバーが自動で立ち上がるよう、systemdのユーザーサービスとして設定することもできます。
AIエージェントからの利用
実際には、AIエージェント(私の場合はClaude Code)がスキルとして自動的にこのコマンドを実行します。「ワークスペースRAGで、xxxを探して」と言うだけで、AIがworkspace-ragスキルを使って関連ドキュメントを見つけ、内容を踏まえた回答をしてくれます。インデックス化や常駐HTTPサーバー化も、AIエージェントに「ワークスペースRAGのインデックス化をして」や「ワークスペースRAGを常駐HTTPサーバー化して」と自然言語でお願いしたらコマンドを実行してくれます。
生活に溶け込むAI — AIエージェントで作る、自分だけのアシスタント
ここで宣伝ですが、コンテキストエンジニアリング、スキルシステム、チャットアプリ連携など、AIをツールから相棒に変える方法をステップバイステップで解説しています。この記事で紹介したワークスペースRAGも本で紹介したスキルの1つです。興味のある方はぜひ(BOOTHがお得です)。
Raspberry Pi(ラズパイ)というマイコン上でClaude Codeとxangiという自作のフレームワークを活用して、Discordから使えるAIアシスタントのシステムを構築します。OpenClawも紹介しますが、メインで使うのはxangiになります。



まとめ
Skillsで使える、軽量RAGシステムを紹介しました。個人用途のRAGシステムとしては、とても手軽に導入できるものになっていると思いますので、よかったら参考にしてみてください。
あとは書籍の方もよろしければ是非!
参考リンク
関連記事
Discussion
初めまして!
xangiというものもあるんですね!
ラズパイでOpenClawを
今度やってみようと思ってたので、
準備段階で本記事に出会えてよかったです!
xangiというのが
なんたるやかは、こちらでこれから確認なの中、
申し訳ないのですが、
からあげさんにとって、
エンタープライズ開発だと
OpenClawとxangiは
どちらが有意義に思えますか?
A2A2Hな時代に、
数名の人間のチームを組むことが
非合理だと言われる時代もくるにかもですが、
向こう3-7年は、
日本的IT土方は続きそうなので、
ご意見お聞きしたく。
すみません、コメント気づいていなかったです。
xangiは私が個人で開発しているソフトです。エンタープライズでの使用は想定しておらず、OpenClawと比較するものでもないかなと思います。
ただ、xangiにせよOpenClawにせよ、活用の基礎的な部分は同じですので、どちらを使うにしても書籍は参考になるのではないかと思っています
わざわざ、ご返信ありがとうございました!
なるほど!xangiは個人開発でしたか。
国産ブラウザのスレイプニルがそうであったように、個人開発から 2C や 2B はありがちなので、いつか公開される日々目があると幸いです。
確かに、活用基盤は同じですので、
自分で手を動かしつつ、書籍で他の方のアウトプットでブラッシュアップしようと思います。
からあげさん 拝見しました。
Discord対応とのことですが、
Discordは、ユーザの顔認証事案で過渡期を迎えるかもしれません。
そうした際に、SlackやLINE(LINEワークスペース)やGoogle meetsに対応させる予定ございますか?
普段は会社でPdMしていて、
子供達もやや大きくなってきたので、
仕事上がりの数時間は個人開発する時間設けたいなと思っている時に、
からあげさんのxangiをforkするのはありでしょうか?
Slackは一応対応しているのですが、自分があんまり使わないので最低限動くくらいのレベルです
OSSなのでforkはもちろん問題ございません