
Rag
Implement a LangChain4j RAG pipeline in Java with chunking, embeddings, and Pinecone, Chroma, or Qdrant retrieval for agent-backed products.
Overview
rag is an agent skill for the Build phase that implements a LangChain4j RAG pipeline with splitting, embeddings, multi-store vector ingest, and filtered retrieval in Java.
Install
npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill ragWhat is this skill?
- End-to-end Java RAG with RecursiveCharacterTextSplitter and EmbeddingStoreIngestor
- Pluggable vector backends: in-memory, Pinecone, Chroma, and Qdrant
- OpenAI-compatible EmbeddingModel wiring via LangChain4j
- Metadata filters on embedding search for scoped retrieval
- FileSystemDocumentLoader path for local corpus ingestion
- Multiple vector store backends: in-memory, Pinecone, Chroma, Qdrant
Adoption & trust: 1.1k installs on skills.sh; 271 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need JVM-native RAG plumbing but LangChain4j store and ingest APIs are easy to miswire across splitters, models, and backends.
Who is it for?
Indie builders adding document Q&A or tool context to a Java backend with LangChain4j and a concrete vector-store choice.
Skip if: Teams that only need Python LangChain snippets, managed RAG SaaS with no custom JVM code, or production ops runbooks without application code.
When should I use this skill?
Implementing or extending a Java RAG pipeline with LangChain4j, document loaders, splitters, and vector-store retrieval.
What do I get? / Deliverables
You get a documented pipeline class pattern you can adapt for ingest, embedding, vector-store choice, and metadata-scoped search in your Quarkus or Spring service.
- RAG pipeline class structure
- Vector store and ingestor configuration
- Filtered similarity search setup
Recommended Skills
Journey fit
Retrieval pipelines are built when you wire knowledge into the product, after scope is set and before or alongside ship-time eval. Vector stores, embedding models, and document ingest are integration work that connects your app to external AI infrastructure.
How it compares
Use as a LangChain4j implementation reference, not as a hosted vector-DB MCP server or a one-shot prompt-only RAG chat skill.
Common Questions / FAQ
Who is rag for?
Solo and indie developers building Java or Kotlin services who want agent-ready retrieval with LangChain4j, embeddings, and a real vector store.
When should I use rag?
During Build when you ingest docs, configure embedding models, stand up Pinecone/Chroma/Qdrant (or in-memory for prototypes), and need filtered segment retrieval before generation.
Is rag safe to install?
Treat it as code and configuration guidance: review the Security Audits panel on this Prism page and restrict API keys, network egress, and store credentials in your own environment.
SKILL.md
READMESKILL.md - Rag
package com.example.rag; import dev.langchain4j.data.document.Document; import dev.langchain4j.data.document.DocumentSplitter; import dev.langchain4j.data.document.parser.TextDocumentParser; import dev.langchain4j.data.document.splitter.RecursiveCharacterTextSplitter; import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.model.embedding.EmbeddingModel; import dev.langchain4j.model.openai.OpenAiEmbeddingModel; import dev.langchain4j.store.embedding.EmbeddingStore; import dev.langchain4j.store.embedding.EmbeddingStoreIngestor; import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore; import dev.langchain4j.store.embedding.pinecone.PineconeEmbeddingStore; import dev.langchain4j.store.embedding.chroma.ChromaEmbeddingStore; import dev.langchain4j.store.embedding.qdrant.QdrantEmbeddingStore; import dev.langchain4j.data.document.loader.FileSystemDocumentLoader; import dev.langchain4j.store.embedding.filter.Filter; import dev.langchain4j.store.embedding.filter.MetadataFilterBuilder; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.HashMap; /** * Complete RAG Pipeline Implementation * * This class provides a comprehensive implementation of a RAG (Retrieval-Augmented Generation) * system with support for multiple vector stores and advanced retrieval strategies. */ public class RAGPipeline { private final EmbeddingModel embeddingModel; private final EmbeddingStore<TextSegment> embeddingStore; private final DocumentSplitter documentSplitter; private final RAGConfig config; /** * Configuration class for RAG pipeline */ public static class RAGConfig { private String vectorStoreType = "chroma"; private String openAiApiKey; private String pineconeApiKey; private String pineconeEnvironment; private String pineconeIndex = "rag-documents"; private String chromaCollection = "rag-documents"; private String chromaPersistPath = "./chroma_db"; private String qdrantHost = "localhost"; private int qdrantPort = 6333; private String qdrantCollection = "rag-documents"; private int chunkSize = 1000; private int chunkOverlap = 200; private int embeddingDimension = 1536; // Getters and setters public String getVectorStoreType() { return vectorStoreType; } public void setVectorStoreType(String vectorStoreType) { this.vectorStoreType = vectorStoreType; } public String getOpenAiApiKey() { return openAiApiKey; } public void setOpenAiApiKey(String openAiApiKey) { this.openAiApiKey = openAiApiKey; } public String getPineconeApiKey() { return pineconeApiKey; } public void setPineconeApiKey(String pineconeApiKey) { this.pineconeApiKey = pineconeApiKey; } public String getPineconeEnvironment() { return pineconeEnvironment; } public void setPineconeEnvironment(String pineconeEnvironment) { this.pineconeEnvironment = pineconeEnvironment; } public String getPineconeIndex() { return pineconeIndex; } public void setPineconeIndex(String pineconeIndex) { this.pineconeIndex = pineconeIndex; } public String getChromaCollection() { return chromaCollection; } public void setChromaCollection(String chromaCollection) { this.chromaCollection = chromaCollection; } public String getChromaPersistPath() { return chromaPersistPath; } public void setChromaPersistPath(String chromaPersistPath) { this.chromaPersistPath = chromaPersistPath; } public String getQdrantHost() { return qdrantHost; } public void setQdrantHost(String qdrantHost) { this.qdrantHost = qdrantHost; } public int getQdrantPort() { return qdrantPort; } public void setQdrantPort(int qdrantPort) { this.qdrantPort = qdrantPort; } public String getQdrantCollection() { return