在当今数字化时代,Redis 不仅是一个高性能的缓存系统,更是一个强大的 AI 支持平台。Redis 通过其向量数据库功能和 AI 工具,为现代应用提供了独特的技术优势。
Redis 的向量数据库功能是其 AI 能力的核心。它支持以下功能:
RedisAI 是 Redis 的一个模块,旨在将机器学习和深度学习带入 Redis 生态系统。它的主要特性包括:
Redis for AI 是 Redis 提供的一套工具,旨在帮助开发者更高效地构建和部署 AI 应用。它包括:
import redis
import numpy as np
from redis.commands.search.field import TextField, VectorField
from redis.commands.search.indexDefinition import IndexDefinition, IndexType
from redis.commands.search.query import Query
from sentence_transformers import SentenceTransformer
# 连接 Redis
client = redis.Redis(host="localhost", port=6379, decode_responses=True)
# 存储向量数据
keys = ["doc:1", "doc:2"]
embeddings = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]], dtype=np.float32)
for key, embedding in zip(keys, embeddings):
client.hset(key, mapping={"embedding": embedding.tobytes()})
# 创建索引
schema = (
TextField("id", no_stem=True, as_name="id"),
VectorField(
"embedding",
"FLAT",
{"TYPE": "FLOAT32", "DIM": 3, "DISTANCE_METRIC": "L2"},
as_name="embedding",
),
)
definition = IndexDefinition(prefix=["doc:"], index_type=IndexType.HASH)
client.ft("idx:docs").create_index(fields=schema, definition=definition)
以下代码展示了如何执行向量搜索:
# 查询向量
query_embedding = np.array([0.1, 0.2, 0.3], dtype=np.float32)
query = (
Query("(*)=>[KNN 2 @embedding $query_embedding AS score]")
.sort_by("score")
.return_fields("id", "score")
.dialect(2)
)
results = client.ft("idx:docs").search(query, query_params={"query_embedding": query_embedding.tobytes()})
for doc in results.docs:
print(doc)
pom.xml
文件中添加以下依赖:<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-redis-store-spring-boot-starter</artifactId>
</dependency>application.properties
文件中配置 Redis:spring.ai.vectorstore.redis.uri=redis://localhost:6379
spring.ai.vectorstore.redis.index=default-index
spring.ai.vectorstore.redis.prefix=default:以下代码展示了如何在 Spring Boot 应用程序中使用 Redis 向量数据库:
@Autowired
private VectorStore vectorStore;
@PostMapping("/embedding")
public ResultEntity<Boolean> embedding(@RequestParam MultipartFile file) throws Exception {
TikaDocumentReader tikaDocumentReader = new TikaDocumentReader(new InputStreamResource(file.getInputStream()));
List<Document> splitDocuments = new TokenTextSplitter().apply(tikaDocumentReader.read());
vectorStore.add(splitDocuments);
return ResultUtils.success(true);
}
@GetMapping("/query")
public List<Document> query(@RequestParam String query) {
return vectorStore.similaritySearch(query);
}
Redis 的内存存储特性使其能够快速缓存 API 返回值,提高响应速度。例如,使用 LangChain 的 RedisCache
实现 LLM(大语言模型)的缓存功能:
set_llm_cache(RedisCache(redis_client));
Redis 的向量数据库功能可以用于语义搜索。例如,结合 LangChain 的 RedisVectorStore
,可以实现智能搜索功能:
vector_store = RedisVectorStore(redis_client);
Redis 可以记录和检索会话历史,增强对话系统的持续性。例如,使用 LangGraph 的 langgraph-checkpoint-redis
,可以实现跨会话的持久化记忆。
Redis 的 AI 能力和缓存功能的结合,为现代应用架构提供了强大的支持。通过合理配置和使用,可以在单一实例中同时满足缓存和向量搜索的需求,既节省了资源,又简化了系统架构。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。