-
Notifications
You must be signed in to change notification settings - Fork 28
Description
ADK has retrieval tools for Google Cloud (Vertex AI Search, Discovery Engine), but no self-hosted option for developers who need full control over their infrastructure. RAG is a fundamental pattern for building useful agents, these tools let developers add vector search, keyword search, and hybrid retrieval to their existing Redis infrastructure. RedisVL is the official Redis Vector Search library that's also well adopted.
Moreover, the repo has RedisSessionService for session persistence, but there are no tools for agents to search Redis-based knowledge bases without building it themselves.
Solution
Add redisvl as an optional dependency with four search tools that wrap RedisVL's query capabilities as ADK BaseTool implementations.
pyproject.toml change:
[project.optional-dependencies]
redis-vl = [
"redisvl>=0.13.0",
"nltk>=3.8.0",
"sentence-transformers>=2.2.0",
]Installation:
# Existing functionality unchanged
pip install google-adk-community
# Opt-in to vector search capabilities
pip install google-adk-community[redis-vl]This aligns with the community repository's stated philosophy:
"This approach allows the core ADK to remain stable and lightweight, while giving the community the freedom to build and share powerful extensions."
Tools Proposed
| Tool | Search Type | Use Case |
|---|---|---|
RedisVectorSearchTool |
KNN vector similarity | Semantic/conceptual queries |
RedisTextSearchTool |
BM25 full-text | Exact terms, acronyms, API names |
RedisHybridSearchTool |
Vector + BM25 combined | Best of both worlds |
RedisRangeSearchTool |
Distance threshold | Exhaustive retrieval, quality filtering |
Developer Experience
from google.adk import Agent
from google.adk_community.tools.redis import RedisVectorSearchTool
from redisvl.index import SearchIndex
from redisvl.utils.vectorize import HFTextVectorizer
index = SearchIndex.from_yaml("schema.yaml")
index.connect("redis://localhost:6379")
vectorizer = HFTextVectorizer(model="redis/langcache-embed-v2")
tool = RedisVectorSearchTool(
index=index,
vectorizer=vectorizer,
num_results=5,
return_fields=["title", "content", "url"],
)
agent = Agent(model="gemini-2.0-flash", tools=[tool])Common Features Across All Tools
- Filtering: Tag, numeric, and geo filters via
filter_expression - Field selection: Control returned fields via
return_fields - Async support: Works with both
SearchIndexandAsyncSearchIndex - Score normalization: Convert distances to 0-1 similarity via
normalize_vector_distance=True - Full parameter exposure: All RedisVL query parameters are configurable
Describe alternatives you've considered
-
Implement vector search with raw Redis commands — Would duplicate existing, maintained code in RedisVL. Users would get a degraded experience compared to using RedisVL directly.
-
Require users to install RedisVL separately — Creates friction and doesn't provide ADK-native abstractions like
BaseToolwrappers with proper function declarations for LLMs.
Why RedisVL?
RedisVL is the official Redis vector library (~50MB footprint). It provides:
- Schema-driven index management
- Multiple query types (vector, text, hybrid, range)
- Built-in vectorizers
- Both sync and async APIs