google / google/adk-python-community

Add RedisVL Search Tools for Knowledge Base Retrieval

オープン
#42 コメント 0 件 リアクション 8 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
182
フォーク
75
PR マージ指標
30日以内にマージされた PR はありません

説明

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](https://github.com/redis/redis-vl-python) 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:**
```toml
[project.optional-dependencies]
redis-vl = [
"redisvl>=0.13.0",
"nltk>=3.8.0",
"sentence-transformers>=2.2.0",
]
```

**Installation:**
```bash
# 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

```python
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 `SearchIndex` and `AsyncSearchIndex`
- **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

1. **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.

2. **Require users to install RedisVL separately** — Creates friction and doesn't provide ADK-native abstractions like `BaseTool` wrappers with proper function declarations for LLMs.

## Why RedisVL?

[RedisVL](https://github.com/redis/redis-vl-python) 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

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

pyproject.tomlと既存のRedisSessionServiceから始め、続いてADKのBaseToolインターフェースとRedisVLのSearchIndexおよびAsyncSearchIndex APIを調査します。提案されている4つのツールでRedisVLのクエリパラメーター、フィルタリング、選択したフィールド、正規化されたスコアをどのように公開するかを定義します。オプションの依存関係と4つすべてのツールラッパーが、文書化された開発者エクスペリエンスをサポートすれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python, redis
領域
backend, databases, tooling
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。