🔎
自分用のRAGならVS CodeとGitHub Copilotで十分かも?
TL;DR
VS Code[1]、GitHub Copilot agent mode[2]で簡易なローカルRAGを実装します。
- VS Code+GitHub Copilotで、workspaceを作成し、indexを作成。
- Copilot Chatで #codebase か #search をつけて質問。
これでローカルRAGになっています。あら簡単。
参照したいファイルがテキストでない場合にはMarkItDown[3]なりで.mdや.txtなどテキストにしておいてください。
得意・不得意
得意:専門用語ベースの文書検索
エンジニア、技術者、科学者など「もともと専門用語やキーワードが明確な人」が「論文、技術書、仕様書などキーワードが明確な書類」でRAGを行う場合に有効だと思います。
不得意:社内文書、会社規則など
一方、会社の規則や、社内のドキュメントなど「意味は似てるけど会社特有の言い回し」「非専門家向けに用語を使っている」場合には、いわゆる意味検索(Vector Search)が必要になると思います。
やり方
- RAGしたい文書を特定のフォルダに入れる
- VS Codeでそのフォルダ(か、その親フォルダ)を
Ctrl+Shift+P→「workspaceとして保存」する。 - Ctrl+Shift+P→「Index」から「GitHub Copilot:ローカルワークスペースインデックスの構築」を選択する。準備終わり。
- Copilot Chatの画面で「〜〜について調べて #codebase (もしくは #search)」とのように質問する。
- Copilotが検索してファイルの概要を返してくれます。必要に応じて「もっと詳しく」とか「このファイルの内容を教えて」などと聞いてみてください。
その他のTips
類義語や英語など別言語も含めて検索したい場合には、copilot-instructions.mdや*.instructions.mdに、
## Toolの説明
#codebase
- キーワードは日本語と英語の両方で検索する
- キーワードは類義語を3~4つ考慮して検索する
など検索の仕方を記入しておくと、より意に沿って検索してくれます。
(instructionsへの従順度はGPT-4.1よりも、claude系の方が高い印象があります。)
検索用文書のMarkdown化
PDFやWordの文書はMarkdownに変換しておきましょう。
import os
from markitdown import MarkItDown
input_dir = "../files_to_md" # 変換元
output_dir = "../output_dir" # 変換先
os.makedirs(output_dir, exist_ok=True)
md_converter = MarkItDown(enable_plugins=False)
for filename in os.listdir(input_dir):
input_path = os.path.join(input_dir, filename)
if os.path.isfile(input_path):
# 変換して .md で保存
result = md_converter.convert(input_path)
outname = os.path.splitext(filename)[0] + ".md"
with open(os.path.join(output_dir, outname), "w", encoding="utf-8") as f:
f.write(result.text_content)
Discussion