🔥 向量库
简介
欢迎使用Redis向量库 – 为使用Redis的AI应用程序设计的终极Python客户端。
redisvl是您的首选工具,用于:
- 闪电般快速的信息检索和向量相似度搜索
- 实时RAG流水线
- 代理记忆结构
- 智能推荐引擎
💪 入门
安装
使用pip
将redisvl
安装到您的Python (>=3.8)环境中:
pip install redisvl
有关更详细的说明,请访问安装指南。
设置Redis
从多个Redis部署选项中选择:
- Redis Cloud:托管云数据库(提供免费套餐)
- Redis Stack:用于开发的Docker镜像
docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest
- Redis Enterprise:商业自托管数据库
- Azure Cache for Redis Enterprise:Azure上完全托管的Redis Enterprise
使用免费的Redis Insight GUI增强您的体验和可观察性。
概述
🗃️ Redis索引管理
-
为您的用例设计一个模式,使用内置的Redis和可索引字段(例如文本、标签、数字、地理位置和向量)来建模您的数据集。从YAML文件加载模式:
index: name: user-idx prefix: user storage_type: json fields: - name: user type: tag - name: credit_score type: tag - name: embedding type: vector attrs: algorithm: flat dims: 4 distance_metric: cosine datatype: float32
from redisvl.schema import IndexSchema schema = IndexSchema.from_yaml("schemas/schema.yaml")
或直接从Python字典加载:
schema = IndexSchema.from_dict({ "index": { "name": "user-idx", "prefix": "user", "storage_type": "json" }, "fields": [ {"name": "user", "type": "tag"}, {"name": "credit_score", "type": "tag"}, { "name": "embedding", "type": "vector", "attrs": { "algorithm": "flat", "datatype": "float32", "dims": 4, "distance_metric": "cosine" } } ] })
-
创建一个SearchIndex类,使用输入模式和客户端连接,以便在Redis中对您的索引执行管理和搜索操作:
from redis import Redis from redisvl.index import SearchIndex # 建立Redis连接并定义索引 client = Redis.from_url("redis://localhost:6379") index = SearchIndex(schema, client)
在Redis中创建索引
index.create()
> 异步兼容的搜索索引类也可用:[AsyncSearchIndex](https://www.redisvl.com/api/searchindex.html#redisvl.index.AsyncSearchIndex)。
3. [加载](https://www.redisvl.com/user_guide/getting_started_01.html#load-data-to-searchindex)
和[获取](https://www.redisvl.com/user_guide/getting_started_01.html#fetch-an-object-from-redis)数据到/从你的Redis实例:
```python
data = {"user": "john", "credit_score": "high", "embedding": [0.23, 0.49, -0.18, 0.95]}
# 加载字典列表,指定"id"字段
index.load([data], id_field="user")
# 通过"id"获取
john = index.fetch("john")
🔍 检索
定义查询并在你的索引上执行高级搜索,包括向量、元数据过滤器和更多的组合。
- VectorQuery - 灵活的向量查询,具有可自定义的过滤器,支持语义搜索:
from redisvl.query import VectorQuery
query = VectorQuery(
vector=[0.16, -0.34, 0.98, 0.23],
vector_field_name="embedding",
num_results=3
)
# 对embedding字段执行向量搜索查询
results = index.query(query)
在查询中加入复杂的元数据过滤器:
from redisvl.query.filter import Tag
# 定义标签匹配过滤器
tag_filter = Tag("user") == "john"
# 更新查询定义
query.set_filter(tag_filter)
# 执行查询
results = index.query(query)
- RangeQuery - 在定义范围内进行向量搜索,并配合可自定义的过滤器
- FilterQuery - 使用过滤器和全文搜索的标准搜索
- CountQuery - 根据属性计算已索引记录的数量
阅读更多关于构建高级Redis查询的信息。
🔧 工具
向量化器
集成流行的嵌入提供商,大大简化为你的索引和查询向量化非结构化数据的过程:
from redisvl.utils.vectorize import CohereTextVectorizer
# 在你的环境中设置COHERE_API_KEY
co = CohereTextVectorizer()
embedding = co.embed(
text="法国的首都是哪个城市?",
input_type="search_query"
)
embeddings = co.embed_many(
texts=["我的文档块内容", "我的其他文档块内容"],
input_type="search_document"
)
了解更多关于在你的嵌入工作流中使用[向量化器](https://github.com/redis/redis-vl-python/blob/main/(https://www.redisvl.com/user_guide/vectorizers_04.html)的信息。
重排序器
集成流行的重排序提供商以提高Redis初始搜索结果的相关性
💫 扩展
我们很高兴宣布支持RedisVL扩展。这些模块实现了接口,展示了使用LLM内存和代理的最佳实践和设计模式。我们从用户(就是你)以及前沿客户那里学到了最好的经验,并将其打包。
有关于其他扩展的想法吗?开一个PR或联系我们:applied.ai@redis.com。我们随时欢迎反馈。
LLM语义缓存
通过利用先前生成的知识,使用SemanticCache
增加应用程序吞吐量并降低在生产中使用LLM模型的成本。
from redisvl.extensions.llmcache import SemanticCache
# 使用TTL和语义距离阈值初始化缓存
llmcache = SemanticCache(
name="llmcache",
ttl=360,
redis_url="redis://localhost:6379",
distance_threshold=0.1
)
# 在语义缓存中存储用户查询和LLM响应
llmcache.store(
prompt="法国的首都是哪个城市?",
response="巴黎"
)
# 使用略有不同的提示快速检查缓存(在调用LLM之前)
response = llmcache.check(prompt="法国的首都城市是什么?")
print(response[0]["response"])
>>> 巴黎
了解更多关于LLM的[语义缓存](https://github.com/redis/redis-vl-python/blob/main/(https://www.redisvl.com/user_guide/llmcache_03.html)的信息。
LLM会话管理
通过提供用户聊天历史作为上下文,改善LLM响应的个性化和准确性。使用SemanticSessionManager
根据最近性或相关性管理会话数据的访问,由向量搜索提供支持。
from redisvl.extensions.session_manager import SemanticSessionManager
session = SemanticSessionManager(
name="my-session",
redis_url="redis://localhost:6379",
distance_threshold=0.7
)
session.add_messages([
{"role": "user", "content": "你好,你好吗?"},
{"role": "assistant", "content": "我很好,谢谢。"},
{"role": "user", "content": "今天天气怎么样?"},
{"role": "assistant", "content": "我不知道"}
])
获取最近的聊天历史:
session.get_recent(top_k=1)
>>> [{"role": "assistant", "content": "我不知道"}]
获取相关的聊天历史(由向量搜索支持):
session.get_relevant("天气", top_k=1)
>>> [{"role": "user", "content": "今天天气怎么样?"}]
了解更多关于[LLM会话管理](https://github.com/redis/redis-vl-python/blob/main/(https://www.redisvl.com/user_guide/session_manager_07.html)。
LLM语义路由
构建直接在Redis中运行的快速决策模型,将用户查询路由到最接近的"路由"或"主题"。
from redisvl.extensions.router import Route, SemanticRouter
routes = [
Route(
name="问候",
references=["你好", "嗨"],
metadata={"type": "问候"},
distance_threshold=0.3,
),
Route(
name="告别",
references=["再见", "拜拜"],
metadata={"type": "告别"},
distance_threshold=0.3,
),
]
# 从路由构建语义路由器
router = SemanticRouter(
name="主题路由器",
routes=routes,
redis_url="redis://localhost:6379",
)
router("嗨,早上好")
>>> RouteMatch(name='问候', distance=0.273891836405)
了解更多关于语义路由。
🖥️ 命令行界面
通过专门设计的CLI界面创建、销毁和管理Redis索引配置:rvl
。
$ rvl -h
用法:rvl <命令> [<参数>]
命令:
index 索引操作(创建、删除等)
version 获取RedisVL的版本
stats 获取索引的统计信息
阅读更多关于使用CLI的信息。
🚀 为什么选择RedisVL?
在GenAI时代,向量数据库和LLM正在改变信息检索系统。随着LangChain和LlamaIndex等新兴和流行框架的出现,创新正在快速发展。然而,许多组织面临着快速且大规模交付AI解决方案的挑战。
这就是Redis的用武之地 - 作为NoSQL世界的基石,以其多功能的数据结构和处理引擎而闻名。Redis在实时工作负载如缓存、会话管理和搜索方面表现出色。它也是RAG的强大向量数据库、LLM缓存和对话式AI的聊天会话内存存储。
Redis向量库弥合了AI原生开发者生态系统和Redis强大功能之间的差距。通过轻量级、优雅和直观的接口,RedisVL使利用Redis的力量变得容易。基于Redis Python客户端构建,redisvl
将Redis的特性转化为完全符合当今AI/ML工程师和数据科学家需求的语法。
😁 有用的链接
如需更多帮助,请查看以下资源:
🫱🏼🫲🏽 贡献
请通过贡献PR、为错误或新功能想法开启GitHub问题、改进文档或增加测试覆盖率来帮助我们。阅读更多关于如何贡献的信息!
🚧 维护
本项目由Redis, Inc以善意努力的基础提供支持。要报告错误、请求功能或获取帮助,请提交问题。