CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-dev-langchain4j--langchain4j-easy-rag

Zero-configuration RAG package that bundles document parsing, embedding, and splitting for easy Retrieval-Augmented Generation in Java applications

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

api-retrieval.mddocs/

Content Retrieval API

EmbeddingStoreContentRetriever

Creates a content retriever that searches an embedding store for relevant content to answer queries.

Static Factory Method

Simple Retriever from Store

import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;

public static ContentRetriever from(EmbeddingStore<TextSegment> embeddingStore)

Parameters:

  • embeddingStore - Store containing embedded documents

Returns: ContentRetriever with default settings

Default Configuration:

  • Embedding model: Loaded via SPI (BGE-small-en-v1.5 if using easy-rag)
  • Max results: 3
  • Min score: 0.0 (no threshold)
  • Filter: null (no filtering)

Example:

ContentRetriever retriever = EmbeddingStoreContentRetriever.from(embeddingStore);

Assistant assistant = AiServices.builder(Assistant.class)
    .chatModel(chatModel)
    .contentRetriever(retriever)
    .build();

Constructors

Basic Constructor

public EmbeddingStoreContentRetriever(
    EmbeddingStore<TextSegment> embeddingStore,
    EmbeddingModel embeddingModel
)

Creates retriever with defaults (3 max results, 0.0 min score, no filter).

Constructor with Max Results

public EmbeddingStoreContentRetriever(
    EmbeddingStore<TextSegment> embeddingStore,
    EmbeddingModel embeddingModel,
    int maxResults
)

Creates retriever with custom max results.

Constructor with Max Results and Min Score

public EmbeddingStoreContentRetriever(
    EmbeddingStore<TextSegment> embeddingStore,
    EmbeddingModel embeddingModel,
    Integer maxResults,
    Double minScore
)

Creates retriever with custom max results and minimum similarity score.

Parameters:

  • embeddingStore - Store to search
  • embeddingModel - Model to embed queries
  • maxResults - Maximum number of results (default: 3)
  • minScore - Minimum relevance score 0.0-1.0 (default: 0.0)

Builder Pattern

Create Builder

public static EmbeddingStoreContentRetrieverBuilder builder()

Returns: Builder for advanced configuration

Example:

ContentRetriever retriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(store)
    .maxResults(5)
    .minScore(0.7)
    .build();

Builder Methods

Embedding Store (Required)

public EmbeddingStoreContentRetrieverBuilder embeddingStore(
    EmbeddingStore<TextSegment> embeddingStore
)

Sets the embedding store to search. Required.

Embedding Model

public EmbeddingStoreContentRetrieverBuilder embeddingModel(
    EmbeddingModel embeddingModel
)

Sets embedding model for query embedding. Optional - loads from SPI if not provided.

Example:

import dev.langchain4j.model.openai.OpenAiEmbeddingModel;

EmbeddingModel model = OpenAiEmbeddingModel.builder()
    .apiKey(apiKey)
    .modelName("text-embedding-3-small")
    .build();

builder.embeddingModel(model);

Max Results

public EmbeddingStoreContentRetrieverBuilder maxResults(Integer maxResults)

Maximum number of results to retrieve. Default: 3.

Example:

builder.maxResults(10);  // Return top 10 results

Min Score

public EmbeddingStoreContentRetrieverBuilder minScore(Double minScore)

Minimum relevance score threshold (0.0-1.0). Default: 0.0 (no threshold).

Example:

builder.minScore(0.75);  // Only return results with score >= 0.75

Filter

public EmbeddingStoreContentRetrieverBuilder filter(Filter filter)

Metadata filter to apply. Default: null (no filtering).

Example:

import static dev.langchain4j.store.embedding.filter.MetadataFilterBuilder.metadataKey;

Filter filter = metadataKey("category").isEqualTo("technical");
builder.filter(filter);

Display Name

public EmbeddingStoreContentRetrieverBuilder displayName(String displayName)

Display name for logging/debugging. Default: "Default".

Example:

builder.displayName("ProductDocRetriever");

Dynamic Max Results

public EmbeddingStoreContentRetrieverBuilder dynamicMaxResults(
    Function<Query, Integer> dynamicMaxResults
)

Function to determine max results based on query.

Example:

// More results for complex queries
builder.dynamicMaxResults(query -> {
    int wordCount = query.text().split("\\s+").length;
    return wordCount > 10 ? 10 : 5;
});

Dynamic Min Score

public EmbeddingStoreContentRetrieverBuilder dynamicMinScore(
    Function<Query, Double> dynamicMinScore
)

Function to determine min score based on query.

Example:

// Higher threshold for short queries
builder.dynamicMinScore(query -> {
    return query.text().length() < 20 ? 0.8 : 0.6;
});

Dynamic Filter

public EmbeddingStoreContentRetrieverBuilder dynamicFilter(
    Function<Query, Filter> dynamicFilter
)

Function to determine filter based on query.

Example:

import static dev.langchain4j.store.embedding.filter.MetadataFilterBuilder.metadataKey;

builder.dynamicFilter(query -> {
    if (query.text().contains("technical")) {
        return metadataKey("category").isEqualTo("technical");
    }
    return null;  // No filter
});

Build

public EmbeddingStoreContentRetriever build()

Builds the configured retriever.

Throws: IllegalArgumentException if embeddingStore not set

Usage Patterns

Basic Retrieval

ContentRetriever retriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(embeddingStore)
    .maxResults(5)
    .minScore(0.7)
    .build();

Assistant assistant = AiServices.builder(Assistant.class)
    .chatModel(chatModel)
    .contentRetriever(retriever)
    .build();

String answer = assistant.chat("How do I configure the system?");

Metadata Filtering

import static dev.langchain4j.store.embedding.filter.MetadataFilterBuilder.metadataKey;

// Only retrieve from specific document types
Filter filter = metadataKey("document_type").isEqualTo("manual");

ContentRetriever retriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(embeddingStore)
    .filter(filter)
    .build();

Adaptive Retrieval

// Adjust retrieval based on query characteristics
ContentRetriever retriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(embeddingStore)
    .dynamicMaxResults(query -> {
        // Complex queries need more context
        int wordCount = query.text().split("\\s+").length;
        return wordCount > 15 ? 10 : 5;
    })
    .dynamicMinScore(query -> {
        // Short queries need higher precision
        return query.text().length() < 30 ? 0.8 : 0.6;
    })
    .build();

Category-Based Filtering

import static dev.langchain4j.store.embedding.filter.MetadataFilterBuilder.metadataKey;

// Filter based on query keywords
ContentRetriever retriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(embeddingStore)
    .dynamicFilter(query -> {
        String text = query.text().toLowerCase();

        if (text.contains("api") || text.contains("code")) {
            return metadataKey("category").isEqualTo("api_docs");
        } else if (text.contains("tutorial") || text.contains("guide")) {
            return metadataKey("category").isEqualTo("tutorials");
        }

        return null;  // No filter for general queries
    })
    .build();

Multiple Retrievers

// Different retrievers for different document types
ContentRetriever technicalRetriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(technicalStore)
    .maxResults(3)
    .minScore(0.8)
    .displayName("TechnicalDocs")
    .build();

ContentRetriever generalRetriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(generalStore)
    .maxResults(5)
    .minScore(0.6)
    .displayName("GeneralDocs")
    .build();

// Use appropriate retriever based on context
ContentRetriever selectedRetriever = isTechnicalQuery(query)
    ? technicalRetriever
    : generalRetriever;

Related APIs

  • Core Types - Query, Content types
  • Storage Types - EmbeddingStore interface
  • Document Ingestion API - Populating embedding stores
  • Quick Start - Quick start examples

Install with Tessl CLI

npx tessl i tessl/maven-dev-langchain4j--langchain4j-easy-rag

docs

api-document-loading.md

api-ingestion.md

api-retrieval.md

api-types-chat.md

api-types-core.md

api-types-storage.md

architecture.md

configuration.md

examples.md

index.md

quickstart.md

reference.md

troubleshooting.md

tile.json