Constructing Graph Search Queries
Zep’s Memory search supports a hybrid search involving semantic similarity search and a full-text BM25 search. Zep also supports two rerankers: Reciprocal Rank Fusion, similarity-based Maximal Marginal Relevance.
Simple, Text-based Semantic Queries
The simplest form of search query is a text-based hybrid search with RRF reranking. No metadata filter is required, and the query is simply a string of text. Zep will convert the query into an embedding and find semantically similar facts using cosine similarity. In parallel, Zep will perform a BM25 search to find facts with similar text. The two sets of search results are then merged and reranked using Reciprocal Rank Fusion (RRF).
RRF is a a re-ranking technique that combines results from multiple searches into a single list, where the ranking is determined by the rank in each respective search.
Below is an example search against a chat session using only search text.
Python
TypeScript
Read more about chat message history search.
Maximal Marginal Relevance Re-Ranking
Zep supports re-ranking search results using Maximal Marginal Relevance (MMR) over both chat history memory and document collections.
Maximal Marginal Relevance (MMR) helps balance relevance and diversity in results returned during information retrieval, which is useful in vector similarity searches for Retrieval-Augmented Generation (RAG) type applications.
A similarity search may return many highly ranked results that are very similar to each other. Since each subsequent result doesn’t add much new information to a prompt, adding these may not be very useful.
MMR helps to reduce redundancy in the results by re-ranking the results to promote diversity, with very similar results downranked in favor of different, but still relevant, results.
How Zep’s MMR Re-Ranking Works
When you run a search re-ranked by MMR, Zep retrieves double the number of results, K, you requested. The entire resultset is then reranked using MMR, and the top K results are returned.
If you request fewer than 10 results, Zep will return 10 results, but still return to you the top K results you requested.
Zep’s MMR algorithm is SIMD-hardware accelerated on amd64
archicture CPUs, ensuring that MMR adds little overhead to your search.
Constructing an MMR Re-Ranked Search Query
MMR Search over Chat History
Python
TypeScript
MMR Search over Document Collections
Document Collections are deprecated. We will be removing this feature in a future release.
Python
TypeScript
Filtering using Metadata
JSON path filtering is deprecated.
Zep supports filtering search queries by metadata. Metadata filters are JSONPath queries augmented by a simple boolean logic overlay.
JSONPath queries allow for building sophisticated filters that match on elements at any level of the JSON document. The boolean logic overlay allows for combining multiple JSONPath queries using and
and or
operators.
Useful resources for building and testing JSONPath queries
Constructing a JSONPath Query Filter
The simplest form of a metadata filter looks as follows:
If a metadata field foo
is equal to the string "bar"
, then the document or message will be returned in the search results.
Executing the above query against a chat session looks as follows:
Python
TypeScript
Combining multiple JSONPath filters using boolean logic
Multiple JSONPath queries can be combined using boolean logic. The following example will return documents or messages where the author
field is equal to "Octavia Butler"
and the title
field is equal to "Parable of the Sower"
.
Similarly, the following example will return documents or messages where the author
field is equal to "Octavia Butler"
or the title
field is equal to "Parable of the Sower"
.
Filter logic can be combined to create arbitrarily complex filters. For example, the following filter will return documents or messages where:
- the
author
field is equal to ("Octavia Butler"
and thetitle
field is equal to"Parable of the Sower"
) - or the
title
field is equal to"Parable of the Talents"
.
Querying by Message Creation Date
Memory search supports querying by message creation date. The following example will return documents or messages created between June 1, 2023 and June 31, 2023.
Datetime strings must be in ISO 8601 format.