ベクトル検索
Eddieには、OpenAIエンベディングを使用したセマンティック検索が含まれています。
ベクトル検索とは?
従来のキーワード検索は完全一致を探します:
- ❌ 「車」で検索 → 「自動車」「乗り物」を見逃す
- ❌ 「速い」で検索 → 「素早い」「急速」を見逃す
ベクトル検索は意味を理解します:
- ✅ 「車」で検索 → 「自動車」「乗り物」「セダン」を見つける
- ✅ 「速い」で検索 → 「素早い」「急速」「高速」を見つける
- ✅ 「デプロイ方法」で検索 → 「デプロイガイド」「ドキュメントの公開」を見つける
動作原理
- インデックス化: ドキュメントが1536次元のベクトルに変換される
- クエリ: 検索語がベクトルに変換される
- 類似性: コサイン類似度がセマンティックに関連するドキュメントを見つける
- 結果: キーワードではなく、意味で最も関連性の高いドキュメントがランク付けされる
セットアップ
ベクトル検索には .env にOpenAI APIキーが必要です:
OPENAI_API_KEY=sk-...ここにあなたのキーコマンド
ドキュメントのインデックス化
最初の検索の前に、ドキュメントをインデックス化:
npm run reindexこれにより、edit/4.publish📚/ のすべてのファイルが処理され、エンベディングが作成されます。
出力:
ドキュメントをインデックス化中...
✓ インデックス化: installation.md (3チャンク)
✓ インデックス化: getting-started.md (5チャンク)
✓ インデックス化: workflow.md (8チャンク)
✓ インデックス化: vector-search.md (4チャンク)
合計: 4ファイル、20チャンク、0.8 MB
時間: 8.2秒ドキュメントの検索
セマンティック検索:
npm run search "はじめ方"出力:
🔍 検索中: "はじめ方"
📄 getting-started.md (スコア: 0.89)
このガイドでは、Eddieで最初のドキュメントを作成する
方法を説明します...
📄 installation.md (スコア: 0.76)
Eddieをインストールする前に、以下を用意してください...
📄 workflow.md (スコア: 0.68)
Eddieの5段階ワークフローは、AI支援ドキュメント作成の
ために設計されています...検索例
概念検索
npm run search "デプロイ"見つかるもの:
- 「Vercelへの公開方法」
- 「静的サイト生成」
- 「ビルドコマンド」
「デプロイ」という言葉が含まれていなくても見つかります!
問題ベースの検索
npm run search "ドキュメントが見つからない"見つかるもの:
- ベクトル検索のドキュメント
- ナビゲーションガイド
- サイドバー設定
自然言語検索
npm run search "ソースとサンプリングの違いは何ですか"会話的なクエリでもワークフローステージの説明を見つけます。
高度な使用法
変更後の再インデックス
4.publish📚/ でドキュメントを追加または編集した場合:
npm run reindexこれにより、検索インデックスが段階的に更新されます(変更されたファイルのみ)。
すべてのステージを検索
デフォルトでは、検索は edit/4.publish📚/(公開ドキュメント)をインデックス化します。
すべてのステージ(下書きを含む)で検索するには、プロジェクトのインデックスパスを変更できます。これは、1.source📦 または 2.sampling✂️ でコンテンツを見つけるのに役立ちます。
高度: .system/vector-data/config.json(存在する場合)を編集するか、検索ライブラリの設定を変更します。
プログラマティック検索
上級ユーザーの場合、Node.jsで検索APIを使用できます:
import { VectorStore } from 'eddie-vector-search';
const store = new VectorStore('/path/to/project/.system/vector-data');
const results = await store.search('your query', { limit: 5 });
results.forEach(result => {
console.log(`${result.file}: ${result.score}`);
});技術詳細
エンベディングモデル
- モデル: OpenAI
text-embedding-3-small - 次元: 1536
- コスト: 100万トークンあたり約$0.02
- 速度: 約100ドキュメント/秒
テキストチャンク化
大きなドキュメントはチャンクに分割されます:
- 最大サイズ: チャンクあたり6000文字
- 戦略: 段落の境界で分割
- オーバーラップ: なし(クリーンな分割)
これにより以下が保証されます:
- トークン制限エラーなし
- 検索結果のより良い粒度
- より高速な処理
類似性メトリック
コサイン類似度はベクトル角度を測定:
- 範囲: 0.0(無関係)から1.0(同一)
- 典型的な結果: 関連する一致の場合0.6-0.9
- しきい値: 0.5未満の結果は通常関連性がない
ストレージ
ベクトルデータは .system/vector-data/ に保存:
.system/vector-data/
├── vector_store.json # エンベディングとメタデータ
└── index_meta.json # ファイル変更時刻ファイルサイズ: 100ドキュメントあたり約400KB(コンテンツによる)
パフォーマンス
インデックス化速度
| ドキュメント | チャンク | 時間 |
|---|---|---|
| 10 | 30 | 約3秒 |
| 50 | 150 | 約15秒 |
| 100 | 300 | 約30秒 |
| 500 | 1500 | 約2.5分 |
検索速度
- クエリ時間: 約0.5-1秒(API呼び出しを含む)
- ローカル計算: 100ms未満(エンベディング後)
- 線形スケール: 1000ドキュメントでも2秒未満
コスト見積もり
インデックス化(ドキュメントごとに1回):
- 10ドキュメント: 約$0.001
- 100ドキュメント: 約$0.01
- 1000ドキュメント: 約$0.10
検索(クエリごと):
- 検索あたり約$0.00002
- 1000検索: 約$0.02
トラブルシューティング
「結果が見つかりません」
考えられる原因:
- インデックスが空:
npm run reindexを実行 - クエリが具体的すぎる: より広い用語を試す
- OpenAI APIキーがない:
.envを確認
「Module not found: eddie-vector-search」
npm install「OpenAI API error: 401」
.env に有効なAPIキーがあることを確認:
cat .envキーを更新:
OPENAI_API_KEY=sk-...新しいキー検索が古いコンテンツを返す
再インデックス化して更新:
npm run reindexAPI呼び出しが多すぎる
ベクトル検索はエンベディングをキャッシュします。支払うのは:
- 初期インデックス化
- 変更されたファイルの再インデックス化
- 各検索クエリ
ヒント: 1回インデックス化、何度も検索(追加コストなし)。