Skip to content

RAG (Retrieval Augmented Generation)

RAG enhances AI model output by injecting relevant information from your data into prompts before sending them to the model.

Retriever myRetriever = genkit.defineRetriever("myStore/docs", (ctx, request) -> {
List<Document> docs = findSimilarDocs(request.getQuery());
return new RetrieverResponse(docs);
});
Indexer myIndexer = genkit.defineIndexer("myStore/docs", (ctx, request) -> {
indexDocuments(request.getDocuments());
return new IndexerResponse();
});
List<Document> docs = List.of(
Document.fromText("Paris is the capital of France."),
Document.fromText("Berlin is the capital of Germany.")
);
genkit.index("myStore/docs", docs);
// Retrieve relevant documents
List<Document> relevantDocs = genkit.retrieve(
"myStore/docs", "What is the capital of France?"
);
// Generate with context
ModelResponse response = genkit.generate(
GenerateOptions.builder()
.model("openai/gpt-4o-mini")
.prompt("Answer based on context: What is the capital of France?")
.docs(relevantDocs)
.build());

Generate vector embeddings for semantic search:

List<Document> documents = List.of(
Document.fromText("Hello world"),
Document.fromText("Goodbye world")
);
EmbedResponse response = genkit.embed("openai/text-embedding-3-small", documents);

Genkit Java supports multiple vector databases out of the box: