Rag.Retriever.Semantic (rag v0.3.4)

View Source

Semantic retriever using vector similarity search.

This retriever uses pgvector's L2 distance to find the most semantically similar documents to a query embedding.

Usage

# Create a semantic retriever
retriever = %Rag.Retriever.Semantic{repo: MyApp.Repo}

# Retrieve using an embedding vector
query_embedding = [0.1, 0.2, 0.3, ...]
{:ok, results} = Rag.Retriever.retrieve(retriever, query_embedding, limit: 10)

Result Format

Returns results with a score field representing similarity:

  • score = 1.0 - distance (L2 distance converted to similarity)
  • Higher scores indicate more similar documents
  • Range: 0.0 (dissimilar) to 1.0 (identical)

Summary

Functions

Retrieve documents using semantic similarity search.

Returns true - Semantic retriever supports embedding queries.

Returns false - Semantic retriever requires embeddings, not text.

Types

t()

@type t() :: %Rag.Retriever.Semantic{repo: module()}

Functions

retrieve(retriever, embedding, opts \\ [])

@spec retrieve(t(), [float()], keyword()) ::
  {:ok, [Rag.Retriever.result()]} | {:error, term()}

Retrieve documents using semantic similarity search.

Parameters

  • retriever - The Semantic retriever struct
  • embedding - Query embedding vector (list of floats)
  • opts - Options:
    • :limit - Maximum number of results (default: 10)

Returns

  • {:ok, results} - List of results with similarity scores
  • {:error, reason} - Error during retrieval

Examples

iex> retriever = %Semantic{repo: MyRepo}
iex> Semantic.retrieve(retriever, [0.1, 0.2, 0.3], limit: 5)
{:ok, [%{id: 1, content: "...", score: 0.95, metadata: %{}}]}

supports_embedding?()

@spec supports_embedding?() :: boolean()

Returns true - Semantic retriever supports embedding queries.

supports_text_query?()

@spec supports_text_query?() :: boolean()

Returns false - Semantic retriever requires embeddings, not text.