langchain4j-vector-stores-configuration
RAGアプリケーションにおけるLangChain4Jのベクターストア設定パターンを提供します。セマンティック検索の構築、ベクターデータベース(PostgreSQL/pgvector、Pinecone、MongoDB、Milvus、Neo4j)の統合、埋め込みの保存・検索の実装、ハイブリッド検索のセットアップ、または本番AIアプリケーション向けのベクターデータベースパフォーマンス最適化を行う際に活用してください。
description の原文を見る
Provides configuration patterns for LangChain4J vector stores in RAG applications. Use when building semantic search, integrating vector databases (PostgreSQL/pgvector, Pinecone, MongoDB, Milvus, Neo4j), implementing embedding storage/retrieval, setting up hybrid search, or optimizing vector database performance for production AI applications.
SKILL.md 本文
LangChain4J ベクトルストア設定
LangChain4J を使用した Retrieval-Augmented Generation アプリケーション向けベクトルストアの設定。
概要
LangChain4J は、PostgreSQL/pgvector、Pinecone、MongoDB Atlas、Milvus、Neo4j などのベクトルストアに対して、ビルダーベースの設定、メタデータフィルタリング、ハイブリッドサーチのサポートを備えた統一の抽象化を提供します。
利用場面
- セマンティックサーチと RAG アプリケーション向けのベクトルストア設定
- メタデータフィルタリングとハイブリッドサーチを備えた埋め込み保存の構築
- 本番環境の AI ワークロード向けベクトルデータベースのパフォーマンス最適化
使用手順
基本的なベクトルストアのセットアップ
ベクトル操作用の埋め込みストアを設定します:
@Bean
public EmbeddingStore<TextSegment> embeddingStore() {
return PgVectorEmbeddingStore.builder()
.host("localhost")
.port(5432)
.database("vectordb")
.user("username")
.password("password")
.table("embeddings")
.dimension(1536) // OpenAI embedding dimension
.createTable(true)
.useIndex(true)
.build();
}
検証ワークフロー
正しいベクトルストアのセットアップを確認するために、このワークフローに従います:
- 設定: 必要なディメンション数と接続パラメータを指定してストアを構築
- 接続テスト: データ取り込み前にヘルスチェックでストアの接続を確認
- ディメンション検証: 埋め込みモデルのディメンション数がストア設定と一致することを確認
- テストデータの取り込み: 小バッチのテストドキュメントを追加して取り込みが機能することを確認
- テストクエリの実行: サンプルのセマンティックサーチを実行して検索精度を確認
- 本番環境への移行: すべてのステップが成功した後に、フルデータ取り込みを開始
複数のベクトルストアの設定
異なるユースケース向けに複数のストアを使用します:
@Configuration
public class MultiVectorStoreConfiguration {
@Bean
@Qualifier("documentsStore")
public EmbeddingStore<TextSegment> documentsEmbeddingStore() {
return PgVectorEmbeddingStore.builder()
.table("document_embeddings")
.dimension(1536)
.build();
}
@Bean
@Qualifier("chatHistoryStore")
public EmbeddingStore<TextSegment> chatHistoryEmbeddingStore() {
return MongoDbEmbeddingStore.builder()
.collectionName("chat_embeddings")
.build();
}
}
ドキュメント取り込みの実装
自動ドキュメント処理に EmbeddingStoreIngestor を使用します:
@Bean
public EmbeddingStoreIngestor embeddingStoreIngestor(
EmbeddingStore<TextSegment> embeddingStore,
EmbeddingModel embeddingModel) {
return EmbeddingStoreIngestor.builder()
.documentSplitter(DocumentSplitters.recursive(
300, // maxSegmentSizeInTokens
20, // maxOverlapSizeInTokens
new OpenAiTokenizer(GPT_3_5_TURBO)
))
.embeddingModel(embeddingModel)
.embeddingStore(embeddingStore)
.build();
}
メタデータフィルタリングのセットアップ
メタデータベースのフィルタリング機能を設定します:
// MongoDB とメタデータフィールドマッピング
IndexMapping indexMapping = IndexMapping.builder()
.dimension(1536)
.metadataFieldNames(Set.of("category", "source", "created_date", "author"))
.build();
// メタデータフィルタを使用した検索
EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
.queryEmbedding(queryEmbedding)
.maxResults(10)
.filter(and(
metadataKey("category").isEqualTo("technical_docs"),
metadataKey("created_date").isGreaterThan(LocalDate.now().minusMonths(6))
))
.build();
本番環境設定の構成
コネクションプーリングとモニタリングを実装します:
@Bean
public EmbeddingStore<TextSegment> optimizedPgVectorStore() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl("jdbc:postgresql://localhost:5432/vectordb");
hikariConfig.setUsername("username");
hikariConfig.setPassword("password");
hikariConfig.setMaximumPoolSize(20);
hikariConfig.setMinimumIdle(5);
hikariConfig.setConnectionTimeout(30000);
DataSource dataSource = new HikariDataSource(hikariConfig);
return PgVectorEmbeddingStore.builder()
.dataSource(dataSource)
.table("embeddings")
.dimension(1536)
.useIndex(true)
.build();
}
ヘルスチェックの実装
ベクトルストアの接続をモニタリングします:
@Component
public class VectorStoreHealthIndicator implements HealthIndicator {
private final EmbeddingStore<TextSegment> embeddingStore;
@Override
public Health health() {
try {
embeddingStore.search(EmbeddingSearchRequest.builder()
.queryEmbedding(new Embedding(Collections.nCopies(1536, 0.0f)))
.maxResults(1)
.build());
return Health.up()
.withDetail("store", embeddingStore.getClass().getSimpleName())
.build();
} catch (Exception e) {
return Health.down()
.withDetail("error", e.getMessage())
.build();
}
}
}
例
基本的な RAG アプリケーションセットアップ
@Configuration
public class SimpleRagConfig {
@Bean
public EmbeddingStore<TextSegment> embeddingStore() {
return PgVectorEmbeddingStore.builder()
.host("localhost")
.database("rag_db")
.table("documents")
.dimension(1536)
.build();
}
@Bean
public ChatLanguageModel chatModel() {
return OpenAiChatModel.withApiKey(System.getenv("OPENAI_API_KEY"));
}
}
セマンティックサーチサービス
@Service
public class SemanticSearchService {
private final EmbeddingStore<TextSegment> store;
private final EmbeddingModel embeddingModel;
public List<String> search(String query, int maxResults) {
Embedding queryEmbedding = embeddingModel.embed(query).content();
EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
.queryEmbedding(queryEmbedding)
.maxResults(maxResults)
.minScore(0.75)
.build();
return store.search(request).matches().stream()
.map(match -> match.embedded().text())
.toList();
}
}
モニタリング機能付き本番環境セットアップ
@Configuration
public class ProductionVectorStoreConfig {
@Bean
public EmbeddingStore<TextSegment> vectorStore(
@Value("${vector.store.host}") String host,
MeterRegistry meterRegistry) {
EmbeddingStore<TextSegment> store = PgVectorEmbeddingStore.builder()
.host(host)
.database("production_vectors")
.useIndex(true)
.indexListSize(200)
.build();
return new MonitoredEmbeddingStore<>(store, meterRegistry);
}
}
ベストプラクティス
適切なベクトルストアの選択
開発時:
- ローカル開発とテストに
InMemoryEmbeddingStoreを使用 - セットアップが高速で外部依存なし
- アプリケーション再起動時にデータが失われる
本番環境:
- PostgreSQL + pgvector: 既存の PostgreSQL 環境に最適
- Pinecone: マネージドサービスで急速なプロトタイピングに適している
- MongoDB Atlas: 既存の MongoDB アプリケーションとの統合に最適
- Milvus/Zilliz: 大規模デプロイメント向けの高パフォーマンス
適切なインデックスタイプの設定
パフォーマンス要件に基づいてインデックスタイプを選択します:
// 高い再現率が必要な場合
.indexType(IndexType.FLAT) // 完全一致検索、遅いが正確
// バランスの取れたパフォーマンス
.indexType(IndexType.IVF_FLAT) // 速度と精度のバランスが良い
// 高速な近似検索
.indexType(IndexType.HNSW) // 最速だが精度がやや低い
ベクトルディメンション数の最適化
埋め込みモデルのディメンション数に合わせます:
// OpenAI text-embedding-3-small
.dimension(1536)
// OpenAI text-embedding-3-large
.dimension(3072)
// Sentence Transformers
.dimension(384) // all-MiniLM-L6-v2
.dimension(768) // all-mpnet-base-v2
バッチ操作の実装
より良いパフォーマンスのためにバッチ操作を使用します:
@Service
public class BatchEmbeddingService {
private static final int BATCH_SIZE = 100;
public void addDocumentsBatch(List<Document> documents) {
for (List<Document> batch : Lists.partition(documents, BATCH_SIZE)) {
List<TextSegment> segments = batch.stream()
.map(doc -> TextSegment.from(doc.text(), doc.metadata()))
.collect(Collectors.toList());
List<Embedding> embeddings = embeddingModel.embedAll(segments)
.content();
embeddingStore.addAll(embeddings, segments);
}
}
}
セキュアな設定
機密設定を保護します:
// 環境変数を使用
@Value("${vector.store.api.key:#{null}}")
private String apiKey;
// 設定を検証
@PostConstruct
public void validateConfiguration() {
if (StringUtils.isBlank(apiKey)) {
throw new IllegalStateException("Vector store API key must be configured");
}
}
参照
包括的なドキュメントと高度な設定については、以下を参照してください:
API Reference- 完全な API ドキュメントExamples- 本番環境対応の例
制約と警告
- ベクトルディメンション数は埋め込みモデルと一致する必要があります。ディメンション数が一致しないとエラーが発生します。
- 大規模なベクトルコレクションは、許容可能な検索パフォーマンスのために適切なインデックス設定が必要です。
- 埋め込み生成は高額になる可能性があります。バッチと キャッシング戦略を実装してください。
- 異なるベクトルストアは異なるディスタンスメトリックをサポートしています。互換性を確認してください。
- 接続プーリングは本番環境デプロイメントにおいて、接続の枯渇を防ぐために重要です。
- メタデータフィルタリング機能はベクトルストアの実装によって異なります。
- ベクトルストアは大量のメモリを消費します。本番環境でリソース使用状況を監視してください。
- ベクトルストアプロバイダー間の移行には、すべてのドキュメントの再埋め込みが必要になる場合があります。
- バッチ操作は単一ドキュメント操作よりも効率的です。
- アプリケーション起動時に必ず設定を検証して、早期の失敗を実現してください。
ライセンス: 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出力のデバッグに対応しています。