Rag.Retriever.Semantic (rag v0.3.4)
View SourceSemantic 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
@type t() :: %Rag.Retriever.Semantic{repo: module()}
Functions
@spec retrieve(t(), [float()], keyword()) :: {:ok, [Rag.Retriever.result()]} | {:error, term()}
Retrieve documents using semantic similarity search.
Parameters
retriever- The Semantic retriever structembedding- 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: %{}}]}
@spec supports_embedding?() :: boolean()
Returns true - Semantic retriever supports embedding queries.
@spec supports_text_query?() :: boolean()
Returns false - Semantic retriever requires embeddings, not text.