rag
ドキュメントのチャンク分割、埋め込み生成、ベクトルストレージ、検索パイプラインを実装し、Retrieval-Augmented Generation システムを構築します。RAGアプリケーションの開発、ドキュメントQ&Aシステムの作成、またはAIとナレッジベースの統合を行う際に使用してください。
description の原文を見る
Implements document chunking, embedding generation, vector storage, and retrieval pipelines for Retrieval-Augmented Generation systems. Use when building RAG applications, creating document Q&A systems, or integrating AI with knowledge bases.
SKILL.md 本文
RAG実装
外部の知識源を活用してAIの能力を拡張するRetrieval-Augmented Generationシステムを構築します。
概要
このスキルが対応する範囲:ドキュメント処理、埋め込み生成、ベクトルストレージ、検索設定、RAGパイプラインの実装
使用場面
- 独自のドキュメント上でQ&Aシステムを構築する
- ナレッジベースから事実情報を取得するチャットボットを作成する
- 自然言語クエリを使用したセマンティック検索を実装する
- 根拠のある出典付き回答で幻覚を減らす
- ドキュメンテーションアシスタントと研究ツールを構築する
- AIシステムがドメイン固有の知識にアクセスできるようにする
手順
ステップ1:ベクトルデータベースを選択
要件に基づいて選択します:
| 要件 | 推奨 |
|---|---|
| 本番環境でのスケーラビリティ | Pinecone, Milvus |
| オープンソース | Weaviate, Qdrant |
| ローカル開発 | Chroma, FAISS |
| ハイブリッド検索 | Weaviate with BM25 |
ステップ2:埋め込みモデルを選択
| ユースケース | モデル |
|---|---|
| 汎用 | text-embedding-ada-002 |
| 高速で軽量 | all-MiniLM-L6-v2 |
| 多言語対応 | e5-large-v2 |
| 最高性能 | bge-large-en-v1.5 |
ステップ3:ドキュメント処理パイプラインを実装
- ソース(ファイルシステム、データベース、API)からドキュメントを読み込む
- 清掃と前処理(フォーマット削除、テキスト正規化)
- ドキュメントを適切な戦略でチャンクに分割
- 各チャンクの埋め込みを生成
- メタデータとともに埋め込みをベクトルデータベースに保存
検証:埋め込みが正常に生成されたことを確認します:
List<Embedding> embeddings = embeddingModel.embedAll(segments);
if (embeddings.isEmpty() || embeddings.get(0).dimension() != expectedDim) {
throw new IllegalStateException("Embedding generation failed");
}
ステップ4:検索戦略を設定
適切な戦略を選択します:
- Dense Retrieval:埋め込みによるセマンティック類似性(ほとんどの場合のデフォルト)
- Hybrid Search:より広いカバレッジのためのDense + Sparse検索
- Metadata Filtering:ドキュメント属性によるフィルタリング
- Reranking:高精度要件のためのクロスエンコーダリランキング
ステップ5:RAGパイプラインを構築
- 埋め込みストアでコンテンツリトリーバーを作成
- リトリーバーとチャットメモリを使用してAIサービスを設定
- コンテキスト注入を含むプロンプトテンプレートを実装
- 応答検証と根拠確認を追加
検証:既知のクエリでテストし、コンテキスト注入が正しく機能することを確認します。
エラーハンドリング:バッチ取り込みの場合、再試行ロジックでラップします:
for (Document doc : documents) {
int attempts = 0;
while (attempts < 3) {
try {
store.add(embeddingModel.embed(doc).content(), doc.toTextSegment());
break;
} catch (EmbeddingException e) {
attempts++;
if (attempts == 3) throw new RuntimeException("Failed after 3 retries", e);
}
}
}
ステップ6:評価と最適化
- 検索メトリクスを測定:precision@k, recall@k, MRR
- 回答の質を評価:忠実性、関連性
- パフォーマンスとユーザーフィードバックを監視
- チャンキング、検索、プロンプトパラメータを反復処理
例
例1:基本的なドキュメントQ&A
List<Document> documents = FileSystemDocumentLoader.loadDocuments("/docs");
InMemoryEmbeddingStore<TextSegment> store = new InMemoryEmbeddingStore<>();
EmbeddingStoreIngestor.ingest(documents, store);
DocumentAssistant assistant = AiServices.builder(DocumentAssistant.class)
.chatModel(chatModel)
.contentRetriever(EmbeddingStoreContentRetriever.from(store))
.build();
String answer = assistant.answer("What is the company policy on remote work?");
例2:メタデータフィルタリングされた検索
EmbeddingStoreContentRetriever retriever = EmbeddingStoreContentRetriever.builder()
.embeddingStore(store)
.embeddingModel(embeddingModel)
.maxResults(5)
.minScore(0.7)
.filter(metadataKey("category").isEqualTo("technical"))
.build();
例3:マルチソースRAGパイプライン
ContentRetriever webRetriever = EmbeddingStoreContentRetriever.from(webStore);
ContentRetriever docRetriever = EmbeddingStoreContentRetriever.from(docStore);
List<Content> results = new ArrayList<>();
results.addAll(webRetriever.retrieve(query));
results.addAll(docRetriever.retrieve(query));
List<Content> topResults = reranker.reorder(query, results).subList(0, 5);
例4:チャットメモリ付きRAG
Assistant assistant = AiServices.builder(Assistant.class)
.chatModel(chatModel)
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.contentRetriever(retriever)
.build();
assistant.chat("Tell me about the product features");
assistant.chat("What about pricing for those features?"); // Maintains context
ベストプラクティス
ドキュメント準備
- 取り込み前にドキュメントを整理する。不要なコンテンツと形式を削除する
- フィルタリングとコンテキスト用に関連するメタデータを追加する
チャンキング戦略
- 最適なバランスのため、チャンクあたり500~1000トークンを使用する
- 10~20%の重複を含めて境界でコンテキストを保持する
- 特定のユースケースに合わせてさまざまなサイズをテストする
検索最適化
- 高いk値(10~20)から始めて、フィルタリング/リランキングする
- メタデータフィルタリングを使用して関連性を向上させる
- 検索品質を監視し、ユーザーフィードバックに基づいて反復する
パフォーマンス
- 頻繁にアクセスされるコンテンツの埋め込みをキャッシュする
- ドキュメント取り込みにバッチ処理を使用する
- スケールに合わせてベクトルストアのインデックスを最適化する
制約と警告
システム制約
- 埋め込みモデルにはドキュメントあたりの最大トークン制限がある
- ベクトルデータベースはパフォーマンスのために適切なインデックスが必要
- チャンク境界は複雑なドキュメントのコンテキストを失う可能性がある
- ハイブリッド検索には追加のインフラストラクチャが必要
品質の警告
- 検索品質はチャンキング戦略に大きく依存する
- 埋め込みモデルはドメイン固有のセマンティクスをキャプチャできない場合がある
- メタデータフィルタリングには適切なドキュメントアノテーションが必要
- リランキングはクエリ応答にレイテンシーを追加する
セキュリティ警告
- 認証情報をハードコードしない:APIキーとパスワードには環境変数を使用する
- 外部コンテンツを検証する:ファイルシステム、API、またはWebソースからのドキュメントには悪意のあるコンテンツ(プロンプトインジェクション)が含まれる可能性がある
- 取得したドキュメントにコンテンツフィルタリングを適用してからLLMに渡す
- 許可リストを使用して、許可されたデータソースURLとファイルパスを制限する
リソース
リファレンスドキュメント
Vector Database ComparisonEmbedding Models GuideRetrieval StrategiesDocument ChunkingLangChain4j RAG Guide
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- giuseppe-trisciuoglio
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。