☰
Redis 8.0向量检索实战:从缓存到AI数据底座
2026/10/2 4:45:34 网站建设 项目流程

最近Redis社区最热闹的消息,就是Redis开始全面拥抱AI场景了。这事乍一听像是噱头,但如果你这几年一直在用Redis做缓存、做队列、做分布式锁,再回头看看Redis 8.0新增的向量检索能力,会发现这其实是个信号——Redis不再甘于只当一个"快"的键值存储,它正在往AI基础设施的方向冲。这篇文章不聊概念,就讲讲Redis接入AI到底接的是什么、作为开发者该关注哪些点,以及我实际部署和踩坑后整理出来的一套可复用的操作方案。

先回答那个最直接的问题:Redis接AI,跟普通业务系统有什么关系?如果你只是把Redis当缓存用,关系确实不大,你该用SET、GET还是用。但如果你在搞AI应用——不管是RAG检索增强、智能体对话记忆,还是向量召回、Embedding存储——那Redis这次升级就是实实在在的利好。它把本来需要单独部署向量数据库的活儿,收敛到了Redis自己身上,意味着你的技术栈可以更薄、运维更简单、延迟更低。我下面会从原理、部署、实操、踩坑四个维度把这个事拆开讲清楚。

1. 从"缓存工具"到"AI数据底座":Redis到底变了什么

1.1 Redis在AI架构里原本就很尴尬

先回顾一下Redis在传统业务里的定位。它是个内存数据库,核心优势就是快,单线程模型下纯读操作能做到10万+ QPS,配合持久化机制可以做缓存、做计数器、做消息队列、做分布式锁。但AI应用进来以后,情况变了。

AI应用跟传统业务有个本质区别:它的核心数据不是用户ID、订单金额这种结构化数据,而是文本、图片、音频经过模型转换后的向量。比如你用OpenAI的Embedding接口把一篇文档转成1536维的浮点数组,这个数组就是向量。要检索相关内容,就要把这个向量跟库里所有向量做相似度计算,找出最接近的几个。这个操作叫向量检索,以前得靠Milvus、Pinecone、Faiss这类的专用向量数据库来做。

于是问题就来了:很多团队为了做AI应用,不得不在原有的Redis之外再搭一套向量库。数据要双写,链路要多一跳,运维要多管一个组件,而且向量库通常比较重,部署在中小团队里并不轻松。更麻烦的是,业务逻辑里既有普通的缓存读写,又有向量检索需求,两套系统的数据一致性很难保证。这就是Redis团队这几年一直在琢磨的事:能不能让Redis自己把向量这活也干了。

1.2 Redis 8.0的答案:Query Engine与Vector Set

Redis在8.0版本里放出了两个核心能力:一个是Query Engine(查询引擎),另一个是Vector Set(向量集合)数据结构。这两个东西合在一起,让Redis获得了原生的向量索引与相似度检索能力,不再需要额外的模块或者外部向量库。

我之前用过RediSearch模块,也能做向量索引,但那毕竟是个模块,配置和运维上多一层复杂度。8.0这次是直接以核心数据结构的方式把Vector Set变成了Redis的一等公民,用起来更像原生命令,学习成本和维护成本都降了一大截。

Vector Set的基本用法其实不复杂。它本质上是把一组向量作为一个集合存储,每个向量可以带一个ID和若干属性字段(即metadata)。查的时候,给定一个查询向量,Redis会按照指定的距离算法(比如余弦相似度、欧氏距离、内积)计算后返回最相似的TopK个结果。

用代码来表示大概是这样:

# 创建一个向量索引 FT.CREATE idx:docs ON HASH PREFIX 1 doc: SCHEMA embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 768 DISTANCE_METRIC COSINE # 写入一条带向量的数据 HSET doc:1001 embedding "*向量二进制数据*" title "Redis接入AI实战" tag "redis,ai" # 向量检索,找出最相似的5条 FT.SEARCH idx:docs "*=>[KNN 5 @embedding $vec AS score]" PARAMS 2 vec "*查询向量二进制数据*" SORTBY score ASC

这套东西跑起来以后,你就能用一个Redis实例同时处理常规缓存和向量检索,技术栈自然就薄了。我在下面第3章会给出完整的实操过程,包括怎么把文本转成向量再写进Redis。

1.3 AI Agent场景里Redis的隐藏价值

除了向量检索,Redis在AI Agent场景里还有个容易被忽略的角色:记忆管理。

做AI Agent的人都知道,大模型自身是无状态的,每次对话都要把历史上下文塞进Prompt里。上下文一长,Token成本就上去了,而且超出窗口长度还会报错。这时候就需要一个外部记忆层,把对话记录、用户偏好、工具调用的中间状态存起来。Redis天然适合干这件事——读写快、支持TTL过期、支持List和Hash存储消息序列、支持SCAN做会话清理。

我个人的做法是把Redis同时用两个角色:一个角色是向量库,存文档Embedding供RAG检索;另一个角色是短期记忆库,存最近N轮对话,TTL设置为2小时,过了就自动失效。这样Agent的"短期记忆"由Redis负责,"长期知识"也由Redis负责,一套存储解决两个问题,运维负担小很多。

2. 向量检索的三个核心概念:不懂这个没法调参

2.1 维度、向量类型与距离度量

向量检索这东西,说穿了就三件事:向量怎么表示、距离怎么算、TopK怎么取。这三个点都不难,但每一个都直接关系到检索效果。

第一是维度。一个文本通过Embedding模型转换后,向量的维度取决于模型。OpenAI的text-embedding-3-small是1536维,BGE系列通常是768维或者1024维,本地部署的SentenceTransformer模型常见的是384维或768维。维度越高,理论上能表达的信息越丰富,但存储空间和计算量也越大。Redis 8.0的Vector Set对维度上限放宽了很多,我自己测过768维的向量,一组10万条的集合,构建索引和查询响应都在可接受范围内。

第二是类型。向量里的浮点数有32位和64位之分。用FLOAT32还是FLOAT64,是个典型的空间换精度问题。FLOAT32在绝大多数检索场景里精度完全够,存储却只有FLOAT64的一半。我建议除非你有特殊需求,否则一律用FLOAT32,如果维度很高、数据量很大,甚至可以考虑降维到INT8量化。

第三是距离度量。这是最需要根据业务性质选的参数,选错会导致检索结果完全不可用。常用的就三种:

距离算法适用场景我的体感
COSINE(余弦相似度)文本语义检索、文档去重最常用,对向量模长不敏感,适合Embedding后的文本
L2(欧氏距离)图像特征、数值型特征向量模长有意义的场景更合适
IP(内积)推荐系统、需要给长向量加权的场景对模长敏感,通常配合归一化使用

我自己的经验是:做文本类的RAG检索,无脑选COSINE就好;做图像或音频特征召回,L2更容易达到预期;只有当你明确知道向量已经做了L2归一化,才放心的用IP。

2.2 HNSW索引的核心参数

Redis 8.0的Vector Set底层用的是HNSW(分层的可导航小世界图)算法。这个算法的核心优势是检索速度极快,在百万级向量里做TopK检索能控制在百毫秒级别,缺点是构建索引的时间和内存占用比暴力检索(FLAT)要高。

HNSW有三个参数必须理解:

  • M:每个节点的最大邻居数。M越大,图连接越密,召回率越高,但内存和构建时间也涨。默认16,文本语义检索我建议设16~32,视觉类检索可以试着设8~16。
  • EF_CONSTRUCTION:构建索引时的动态候选集大小。这个值越大,索引质量越高,构建越慢。默认100,数据量不是特别大时可以适当调高到200。
  • EF_SEARCH:查询时的候选集大小。这个值跟前两个不一样,它只影响查询精度和延迟,不影响索引结构。实际使用中如果发现召回率不够,优先调这个参数,而不是重建索引。

调参这块有一个很实用的建议:先用小数据集跑通,再逐步加大数据量验证性能。我见过不少新手一上来就灌100万条数据,然后查询慢得不行,其实不是Redis不行,是M和EF_SEARCH参数没调好。

2.3 召回率与准确率在向量检索中的取舍

向量检索的目标是"找到最相似的",跟数据库"精确匹配"逻辑完全不同。这个特点决定了你不能用传统SQL的思路来验收结果。

有一个基本概念必须清楚:向量检索的召回率(Recall)指的是"返回的TopK结果里,包含了暴力穷举下真正最相似的多少个"。HNSW这种近似最近邻算法,本质上是在召回率与速度之间做平衡。你当然可以用FLAT做暴力搜索拿到100%召回,但数据量一大,延迟就难看。所以工程上通常是牺牲一点点召回率,换取数量级的性能提升。

我在一个RAG项目里做过对比:10万条向量,FLAT暴力查询单次要120ms,HNSW只用了8ms,召回率在Top10场景下大约97%。这个差距在实际业务中完全可接受,但查询性能是数量级的提升。这就是为什么HNSW成了默认选择。

3. 实操:从零部署一个支持向量检索的Redis环境

3.1 Docker部署与基础配置

如果你是在自己的机器上做实验,最快的方式就是用Docker跑一个Redis容器。我是Mac环境,Windows上的操作也基本一致,注意路径和端口映射的区别就行。

# 拉取Redis镜像(建议用7.4以上版本,8.0及之后原生支持Vector Set) docker pull redis:8.0 # 启动容器,映射6379端口,开启AOF持久化 docker run -d --name redis-ai \ -p 6379:6379 \ -v /data/redis-ai:/data \ redis:8.0 \ redis-server --appendonly yes --save 60 1000

启动后验证一下连接:

redis-cli -p 6379 ping # 返回 PONG 即正常

这里有个用户常问的问题:Redis的AI能力在旧版本上能用吗?我的回答是,Vector Set是8.0引入的新数据结构,旧版本想用向量检索必须加载RediSearch模块,但命令语法和功能覆盖跟原生还是有差异。如果你是为了新项目,直接上8.0就行。

配置上我有几个建议:一是开启持久化,AI场景通常不希望向量索引在重启后全部重建;二是注意内存规划,向量数据很吃内存,10万条768维的FLOAT32向量,光原始数据就大概30M,再加上HNSW索引的额外开销,要预留至少一倍空间。

3.2 文本转向量:Embedding的调用示例

Redis本身不负责把文本转成向量,它只管存和查。所以实操的第一步是先把你的文本变成向量。

下面我用OpenAI的接口举个例子,你可以换成任何Embedding模型,比如开源的BGE、M3E,或者本地跑的text2vec。

import openai # 初始化客户端 client = openai.OpenAI(api_key="sk-你的key") # 把文档切块后逐个转向量 texts = ["Redis是内存数据库", "向量检索用于语义搜索", "AI Agent需要记忆管理"] def get_embedding(text, model="text-embedding-3-small"): resp = client.embeddings.create( model=model, input=text ) return resp.data[0].embedding embeddings = [get_embedding(t) for t in texts] # 每个embedding是一个1536维的float列表

实际操作中,文档切块是个需要循序渐进的步骤。切太小语义不完整,切太大检索颗粒度太粗。我一般按150~300个中文字符切一个块,块与块之间重叠20~30个字符,保证边界语义不丢失。

3.3 创建索引并写入向量

拿到向量以后,就可以在Redis里建索引、写数据了。注意向量在Redis里的存储格式是二进制,需要把Python列表转成bytes再存。

import struct import redis r = redis.Redis(host="localhost", port=6379, decode_responses=False) # 先创建索引:注意向量类型、维度、距离算法要对上 idx_cmd = """ FT.CREATE idx:docs ON HASH PREFIX 1 doc: SCHEMA embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 1536 DISTANCE_METRIC COSINE """ r.execute_command(*idx_cmd.strip().split()) def vec_to_bytes(vec): """float列表 -> 二进制bytes""" return struct.pack(f"{len(vec)}f", *vec) # 写入文档向量 for i, (text, emb) in enumerate(zip(texts, embeddings)): key = f"doc:{i}" mapping = { "text": text, "title": f"文档{i}", "embedding": vec_to_bytes(emb), } r.hset(key, mapping=mapping)

这里有几个非常容易踩的坑:

  • 维度必须跟Embedding模型的输出维度完全一致,比如text-embedding-3-small就是1536,写成1535或者1537都会报错。
  • 距离算法错误时不会立刻报错,而是检索结果很差,所以要确认模型输出语义与距离算法匹配。
  • bytes写入时,必须确保使用的是二进制模式连接。Python的redis-py库里decode_responses=True会把bytes解码成字符串,导致向量数据损坏。我建议连接时始终设置decode_responses=False。

3.4 执行相似度查询与结果解析

向量写入后,最关键的就是查询。查询的本质是:拿一个查询向量,去索引里找最相似的TopK。

query_text = "Redis和AI有什么关系" query_vec = get_embedding(query_text) # 向量检索命令 query_cmd = f""" FT.SEARCH idx:docs "*=>[KNN 3 @embedding $vec AS score]" PARAMS 4 vec {vec_to_bytes(query_vec).hex()} SORTBY score ASC RETURN 3 text title score """ res = r.execute_command(*query_cmd.strip().split())

这里有一个我在实践中踩过的坑:Redis的FT.SEARCH命令里,二进制参数是通过十六进制字符串传的,不是直接传bytes。我一开始直接用bytes拼接,结果一直报参数解析失败。后来看了官方文档才发现,要用.hex()把bytes转成十六进制字符串,Redis内部再按二进制解析。

查询返回的结果是一个嵌套数组,需要解析。大致结构是:第一个元素是命中总数,之后每三个元素一组(文档ID、字段名数组、字段值数组)。实际项目里我会封装一层解析函数,把返回结果转成dict列表,方便业务使用。

def search_similar(query_text, top_k=3): query_vec = get_embedding(query_text) cmd = [ "FT.SEARCH", "idx:docs", f"*=>[KNN {top_k} @embedding $vec AS score]", "PARAMS", "2", "vec", vec_to_bytes(query_vec).hex(), "SORTBY", "score", "ASC", "RETURN", "3", "text", "title", "score", ] raw = r.execute_command(*cmd) # 解析返回结果,提取text、title、score results = [] # 依次跳过总数和ID,读取字段对 idx = 1 while idx < len(raw): doc_id = raw[idx] fields = raw[idx + 1] values = raw[idx + 2] item = dict(zip(fields, values)) item["doc_id"] = doc_id results.append(item) idx += 3 return results

执行一次检索,你就能看到跟查询文本最相似的几条文档记录和相似度分数。这会让你对"语义检索"有非常直观的感受——你搜"Redis和AI什么关系",返回的可能是原来文中压根没有这几个字、但语义相近的段落。

3.5 可视化工具选型与连接配置

光用命令行和Python调试还可以,但日常查数据、看索引状态,还是配一个可视化工具效率高。市面上的Redis桌面客户端我基本都用过,这里做个对比:

工具特点适合场景
Redis Desktop Manager(RDM)老牌工具,功能全,界面传统日常键值查看、内存监控
Another Redis Desktop Manager免费开源,跨平台,支持集群中小团队、个人开发者首选
RedisInsightRedis官方出品,支持搜索和可视化索引使用Redis 8.0、调试向量索引时最推荐

我个人现在的主力是RedisInsight,因为官方工具对FT.SEARCH这类新特性的支持最好,还能直接看索引信息和内存分析。连接配置很简单,填入host、port和密码就行,本地调试一般不设密码。有一点要注意:如果你用Docker跑Redis,别把容器里的6379映射到宿主机另一个端口上,连接时端口要写映射后的那个。

4. AI场景下的缓存治理与数据一致性

4.1 缓存穿透、击穿、雪崩在AI场景的新表现

AI应用引进来以后,传统的缓存三大问题不但没消失,反而换了副面孔。

先看缓存穿透。以前是查一个不存在的用户ID,请求直接打到数据库。AI场景是怎么穿透的?最常见的是向量检索时,用户输入的问题过于冷门,跟索引库里的内容完全不搭边,返回结果是空。如果这个查询没有缓存,每个请求都要做一次完整的Embedding和向量检索计算,计算成本比查数据库高多了。我的方案是:把高频且命中率为空的查询在Redis里缓存一小时,用空结果做标记,防止反复计算。

再看缓存击穿。某个热点文档突然爆火,比如一篇行业分析报告被大量用户同时检索,如果这个文档的向量结果没有缓存,瞬间的并发请求全压到向量索引上,延迟会明显升高。解决方案也很传统,就是热点key加互斥锁或提前预热。

最后是缓存雪崩。如果大量向量数据同时过期,检索命中率会瞬间骤降,所有请求都回源到Embedding模型重新计算,这可比数据库回源贵多了。所以AI场景的缓存TTL,我强烈建议加一个随机抖动,让过期时间分散开。比如基础TTL设为2小时,再加0~30分钟的随机值。

4.2 序列化方案的选型与避坑

AI场景下,Redis里存的往往不只是简单字符串,还有Python对象、JSON结构、向量二进制数据。这时候序列化方案就很重要了。

我自己在项目里遇到过非常典型的坑:用一个自定义的CacheUtil存了一个Embedding向量列表,结果启动后反序列化报错,查了半天发现是pickle反序列化时类名不同。因为AI团队的代码经常重构,class的包路径一变,pickle就崩了。从那以后,我在团队里定了一个规矩:缓存数据一律不用pickle,要么用JSON存可序列化结构,要么用MessagePack存二进制高效数据。

用Redis官方推荐的json序列化方式,代码大概是这样的:

import json class CacheService: def __init__(self, redis_client): self.r = redis_client self.prefix = "app:cache:" def set_json(self, key, value, ttl=None): data = json.dumps(value, ensure_ascii=False) self.r.set(self.prefix + key, data, ex=ttl) def get_json(self, key): data = self.r.get(self.prefix + key) if not data: return None return json.loads(data)

对于向量数据这种二进制类型,就不要走JSON了,直接用struct转bytes,或者用numpy的tobytes().npy格式。我在前面第3章的示例里用的就是struct.pack,这个方案简单可靠。

4.3 分布式锁在AI并发场景的正确姿势

AI应用里并发问题一点不比传统业务少。最典型的是模型训练任务或数据同步任务的幂等保护——多个实例同时跑一个任务,重复执行会浪费资源甚至产生脏数据。

Redis分布式锁是解决这个问题的老办法,也是面试高频题。核心思路是SETNX + 过期时间,但细节上有一个容易忽略的点:必须用SET命令的NX和EX参数原子地设置锁,而不是分开用SETNX和EXPIRE。分开用的话,如果SETNX之后、EXPIRE之前进程挂了,锁就永远不释放。

下面是正确的加锁姿势:

import uuid import time def acquire_lock(redis_client, lock_key, timeout=10, retry_interval=0.1): """尝试获取分布式锁,返回锁标识或None""" token = str(uuid.uuid4()) while True: result = redis_client.set(lock_key, token, nx=True, ex=timeout) if result: return token time.sleep(retry_interval) def release_lock(redis_client, lock_key, token): """释放分布式锁,只有持有者才能释放""" lua_script = """ if redis.call("get", KEYS[1]) == ARGV[1] then return redis.call("del", KEYS[1]) else return 0 end """ return redis_client.eval(lua_script, 1, lock_key, token)

释放锁时必须用Lua脚本保证判断和删除的原子性,这是最关键的细节。我曾经图省事,先用get判断再del,结果在高并发下出现锁被其他线程误删的问题,后来统一改成Lua脚本就好了。

在AI场景里,这个锁还有一个额外用途:控制Embedding批量任务的执行。比如你要把一万篇文档转成向量写入Redis,如果有多台机器同时跑,会重复计算浪费API费用。加一个分布式锁,让一台机器全权负责,其他机器等待或者跳过,是最经济实惠的方案。

5. 运维实战:数据备份、性能监控与常见问题排查

5.1 向量数据的持久化与恢复策略

AI场景下的Redis,持久化设计必须提前想好,不能等到数据丢了才补救。向量索引重建的成本很高,十万条向量可能要好几分钟构建时间,如果只是当缓存用挂了就挂了,在AI场景里绝对不能这么想。

Redis的持久化有两种:RDB快照和AOF日志。RDB恢复速度快,但可能丢最近一次快照之后的数据;AOF不丢数据,但日志文件大、恢复慢。我的建议是两者结合:开启AOF的同时保留RDB,恢复时先加载RDB再回放AOF。

# redis.conf 关键配置 appendonly yes # 开启AOF appendfsync everysec # 每秒刷盘,性能和安全的平衡点 save 900 1 # 900秒内有1次写入就触发RDB save 300 10 # 300秒内有10次写入就触发RDB save 60 10000 # 60秒内有10000次写入就触发RDB

另外,向量索引的持久化有一个和普通key不同的地方:如果你用的是Redis 8.0原生Vector Set,它跟普通Key一样自动走持久化,不需要额外处理。但如果你是用了RediSearch模块的老方案,有些版本的索引元数据持久化不够可靠,升级前一定要先在测试环境验证一次重启后索引还在不在。

5.2 内存分析:向量数据极速占满内存怎么办

如果说传统Redis运维的头号问题是缓存命中率,那AI场景Redis运维的头号问题就是内存。向量数据比普通字符串大得多,一个1536维的FLOAT32向量就是6KB,一万条就是60MB,一百万条就是6GB。

排查内存使用,我用的是RedisInsight的Memory Analysis功能,它能清楚地告诉你哪些key占用最多空间,哪些索引消耗最大。命令行方式则可以用MEMORY USAGE:

# 查看某个key占用的字节数 MEMORY USAGE doc:1001 # 查看某个索引占用的字节数 MEMORY USAGE idx:docs

如果内存快满了,有几个常用招数:一是把向量维度从FLOAT32降到INT8,精度影响不大但内存直接减少到四分之一;二是对向量数据做PCA降维,比如1536维降到256维,检索效果略微下降但内存大幅减少;三是开启maxmemory-policy,给Redis一个兜底的淘汰策略,不过向量索引的淘汰要谨慎,别让正在被查询的热点数据被清掉。

5.3 性能排查:查询变慢的常规操作

AI场景里Redis查询变慢,最常见的几个原因我列个速查表:

现象可能原因排查方法
单次查询延迟从几ms涨到几十msHNSW索引EF_SEARCH过小,导致召回不足反复重试调大EF_SEARCH参数
查询时CPU飙高向量维度太高,或者并发查询量过大检查索引类型,考虑降维或增加只读副本
大批量写入时查询卡顿HNSW索引构建期间CPU竞争写入放到低峰期,或用多个分片分散压力
偶发连接超时Redis线程阻塞,通常是大key操作引起用SLOWLOG查慢命令
返回结果相关度明显变差距离算法与数据类型不匹配检查索引的DISTANCE_METRIC,换COSINE或L2

SLOWLOG这个命令值得单独提一下。它在AI场景里能定位到到底是哪个命令吃掉了时间:

SLOWLOG GET 10 SLOWLOG RESET

我之前查过一次线上问题,就是通过SLOWLOG发现了某条向量写入命令足足花了500ms,原因是数据量太大且持久化同步刷盘。后来调整了appendfsync策略,写入延迟降了一个数量级。

5.4 数据一致性与多环境同步的实用方案

最后一个运维层面的话题:开发、测试、生产三套环境的Redis数据怎么保持配置一致。这个问题在AI项目里尤其突出,因为向量索引的schema稍微变一下,比如维度从768改成1536,所有环境都要同步更新,不然联调时全是坑。

我的做法是:把Redis索引创建脚本和数据结构定义统一放在一个项目目录下,比如redis/init.lua或者schema.py,然后通过CRD或者简单的CI Job在环境部署时自动执行。这样能保证每个环境的索引结构完全一致,不会出现开发环境跑通、生产环境报错的问题。

说个真实案例:我们团队之前有过一次线上事故,开发环境向量维度是768,因为某个同事本地改了Embedding模型没提交,结果测试环境没问题,生产部署时创建的索引维度还是768,线上模型输出却是1536维,写入直接报错。根本原因就是索引schema缺乏统一管理。从那以后,所有Redis索引变更都必须通过脚本执行并且走Code Review,再也没出现过这种问题。

6. 一些经验和后续玩法

文章写到这,核心内容基本都覆盖了。最后聊点我在这次实战里的真实体会吧。

Redis接入AI之后,给我最大的感受不是"Redis能跑向量检索了"这个单一功能的增加,而是AI应用的技术选型变得更灵活了。以前做RAG,最简单的方案也得Redis加一个专门的向量库,数据要同步、逻辑要兼容;现在一个小团队、一台机器、一个Redis实例,就能在保证性能的前提下把缓存、记忆、向量检索全部扛下来。对于刚起步的AI项目,这种"薄架构"的价值非常大。

当然,它也不是万能的。如果你的向量数据量已经到千万级别,并且对召回率要求极高、需要分布式扩缩容,那专门的向量数据库依然是更合适的选择。Redis的定位还是偏向"轻量、快速、够用",它解决了90%场景下的需求,剩下那10%的超大规模场景,才需要更重型的武器。

后续有几个方向我打算继续玩下去:一个是把Redis的向量检索跟本地部署的Embedding模型结合起来,做一套完全离线的RAG方案,不依赖外部API;另一个是尝试用Redis做Agent的长期记忆管理,把用户的偏好向量化存起来,在对话开始时做一次相似度召回,让Agent"想起"这个用户是谁。这些玩法在Redis 8.0之前都需要不少额外的工具支撑,现在一个Redis基本就够了。

如果你最近也在折腾AI应用,我建议你花一个下午把Redis 8.0的向量检索跑通一遍。照着上面的步骤,从Docker起容器到写入几条向量再到检索返回结果,整个过程走完,你对"AI基础设施需要什么"的理解会深很多。踩坑不可怕,关键是每一个坑都有对应的解法,这篇文章里写的基本都是我会员群里被反复问到的问题,希望能给你省点时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询