【高速缓存】RedisVL为文本生成嵌入向量实践指南
在现代语义搜索和 RAG 应用中文本嵌入Embedding是核心基础——它将自然语言转换成高维数值向量使得计算机能够“理解”语义相似性。RedisVL 提供了一套统一的向量化器接口让你可以使用多种主流嵌入服务OpenAI、HuggingFace、Ollama、Cohere 等轻松生成向量并直接与 Redis 的向量索引无缝集成。前置准备在开始之前请确保已安装 RedisVLpip install redisvl有运行的 Redis 实例Redis 8 或 Redis Cloud且已启用 RediSearch 模块根据你计划使用的嵌入服务准备好对应的 API 密钥或本地模型服务如 Ollama 本地运行概要使用 OpenAI、HuggingFace、Ollama、Cohere 等主流 Provider 生成文本向量同步与异步的嵌入方法以及批量嵌入的高效技巧如何构建自定义向量器适配你自己的嵌入函数如何将向量器与 RedisVL 索引结合实现语义搜索整体工作流程下图展示了使用向量化器的完整流程用户文本向量化器选择 ProviderOpenAIHuggingFaceOllamaCohere / 其他生成向量存入 Redis 索引执行向量查询返回相似结果向量化器充当了“翻译官”的角色将文本转化为数值表示这个过程通常称为嵌入Embedding。不同的 Provider 背后是不同的模型架构和训练数据但 RedisVL 提供了统一的 API使得切换 Provider 变得非常简单。示例文本为了演示一致性我们将在所有示例中使用以下三句英文That is a happy dogThat is a happy personToday is a sunny day一、OpenAI 向量化器OpenAI 提供高质量通用嵌入模型如text-embedding-ada-002。使用前需安装openai库并设置 API 密钥。安装与配置pipinstallopenaiimportosimportgetpassfromredisvl.utils.vectorizeimportOpenAITextVectorizer api_keyos.environ.get(OPENAI_API_KEY)orgetpass.getpass(Enter your OpenAI API key: )# 创建向量化器实例oaiOpenAITextVectorizer(modeltext-embedding-ada-002,api_config{api_key:api_key},)单条嵌入embeddingoai.embed(This is a test sentence.)print(len(embedding))# 输出 1536批量嵌入sentences[That is a happy dog,That is a happy person,Today is a sunny day]embeddingsoai.embed_many(sentences)# 返回列表每个元素是一个向量异步嵌入提高并发效率embeddingsawaitoai.aembed_many(sentences)原理embed_many内部可能会将多个文本拼接成一次 API 请求取决于 Provider 支持从而减少网络往返次数大幅提升吞吐量。二、Azure OpenAI 向量化器Azure OpenAI 是 OpenAI 模型的 Azure 托管版本配置稍有不同。fromredisvl.utils.vectorizeimportAzureOpenAITextVectorizer az_oaiAzureOpenAIVectorizer(modelyour-deployment-name,# 注意这是你在 Azure 中的部署名称而非模型名api_config{api_key:your-azure-key,api_version:2023-05-15,azure_endpoint:https://your-resource.openai.azure.com/,},)其余用法与标准 OpenAI 完全一致embed、embed_many、aembed_many。三、HuggingFace 向量化器HuggingFace 提供海量开源嵌入模型如all-MiniLM-L6-v2、all-mpnet-base-v2。RedisVL 基于sentence-transformers库实现模型在本地运行无需 API 密钥。安装pipinstallsentence-transformers使用fromredisvl.utils.vectorizeimportHFTextVectorizer hfHFTextVectorizer(modelsentence-transformers/all-mpnet-base-v2)embeddinghf.embed(This is a test sentence.)embeddingshf.embed_many(sentences,as_bufferTrue)# as_bufferTrue 返回字节流便于存入 Redis注意本地模型会下载到缓存目录首次运行需要联网。之后完全离线运行适合对数据隐私敏感的场景。四、Ollama 向量化器Ollama 允许你在本地运行嵌入模型如nomic-embed-text完全离线且免费。你需要先安装 Ollama 并拉取模型。安装与准备pipinstallredisvl[ollama]ollama pull nomic-embed-text ollama serve# 确保后台进程运行使用fromredisvl.utils.vectorizeimportOllamaTextVectorizer ollamaOllamaTextVectorizer(modelnomic-embed-text)embeddingollama.embed(This is a test sentence.)embeddingsollama.embed_many(sentences,batch_size2)# batch_size 控制每次发送的文本数embed_many也支持异步aembed_many。五、VertexAI 向量化器Google CloudVertexAI 是 GCP 的统一 AI 平台提供多种嵌入模型。你需要启用 Vertex AI API配置服务账号并设置环境变量。安装pipinstallgoogle-cloud-aiplatform1.26环境变量GOOGLE_APPLICATION_CREDENTIALS服务账号 JSON 文件路径GCP_PROJECT_ID项目 IDGCP_LOCATION区域如us-central1使用fromredisvl.utils.vectorizeimportVertexAIVectorizer vtxVertexAIVectorizer(api_config{project_id:os.environ[GCP_PROJECT_ID],location:os.environ[GCP_LOCATION],google_application_credentials:os.environ[GOOGLE_APPLICATION_CREDENTIALS],})embeddingvtx.embed(This is a test sentence.)六、Cohere 向量化器Cohere 提供专用嵌入模型如embed-english-v3.0特别注重语义表示。与 OpenAI 类似你需要 API 密钥。安装pipinstallcohere使用fromredisvl.utils.vectorizeimportCohereTextVectorizer coCohereTextVectorizer(modelembed-english-v3.0,api_config{api_key:your-cohere-key},)# 查询时使用 input_typesearch_queryquery_vecco.embed(search query,input_typesearch_query)# 文档索引时使用 input_typesearch_documentdoc_vecco.embed(document content,input_typesearch_document)为什么需要input_typeCohere 的不同模型针对查询和文档做了优化指定类型有助于模型调整内部表示提升检索效果。七、VoyageAI 向量化器VoyageAI 提供高性能嵌入模型如voyage-law-2、voyage-2等。也支持input_type参数query/document。安装与使用pipinstallvoyageaifromredisvl.utils.vectorizeimportVoyageAIVectorizer voVoyageAIVectorizer(modelvoyage-law-2,api_config{api_key:your-voyage-key},)query_vecvo.embed(query,input_typequery)doc_vecvo.embed(document,input_typedocument)八、Mistral AI 向量化器Mistral AI 提供其嵌入模型如mistral-embed。使用方式与 OpenAI 类似。pipinstallmistralaifromredisvl.utils.vectorizeimportMistralAITextVectorizer mistralMistralAITextVectorizer()# 默认从环境变量读取 MISTRAL_API_KEYembeddingawaitmistral.aembed(This is a test sentence.)# 异步示例九、Amazon Bedrock 向量化器Bedrock 提供来自多个厂商的基础模型包括 Amazon 自研的 Titan 嵌入模型。需要配置 AWS 凭证。安装pipinstallredisvl[bedrock]配置凭证importos os.environ[AWS_ACCESS_KEY_ID]...os.environ[AWS_SECRET_ACCESS_KEY]...os.environ[AWS_REGION]us-east-1使用fromredisvl.utils.vectorizeimportBedrockVectorizer bedrockBedrockVectorizer(modelamazon.titan-embed-text-v2:0)embeddingbedrock.embed(This is a test sentence.)embeddingsbedrock.embed_many(sentences)十、自定义向量器CustomVectorizer如果你有自己的嵌入函数例如封装了某个私有模型RedisVL 提供了CustomVectorizer让你轻松接入。fromredisvl.utils.vectorizeimportCustomVectorizerdefmy_embed(text_input,**kwargs):# 你的嵌入逻辑返回一个向量列表或单个向量return[0.1]*768# 示例custom_vecCustomVectorizer(my_embed)embeddingcustom_vec.embed(test)自定义向量器可以直接用于 RedisVL 的其他组件例如语义缓存SemanticCache或索引查询。将向量器与 SearchIndex 集成生成向量后我们通常需要将它们存入 Redis 并执行相似性搜索。下面演示完整流程。1. 定义 SchemaYAML 格式# schema.yamlversion:0.1.0index:name:vectorizersprefix:docstorage_type:hashfields:-name:texttype:text-name:embeddingtype:vectorattrs:dims:768# 必须与模型输出维度一致algorithm:flatdistance_metric:cosine2. 创建索引并加载数据fromredisvl.indeximportSearchIndexfromredisvl.redis.utilsimportarray_to_buffer indexSearchIndex.from_yaml(./schema.yaml,redis_urlredis://localhost:6379)index.create(overwriteTrue)# 使用 HuggingFace 向量器生成向量hfHFTextVectorizer(modelsentence-transformers/all-mpnet-base-v2)embeddingshf.embed_many(sentences)# 准备数据向量需转换为字节格式float32data[{text:t,embedding:array_to_buffer(v,dtypefloat32)}fort,vinzip(sentences,embeddings)]index.load(data)3. 执行向量查询fromredisvl.queryimportVectorQuery query_vechf.embed(That is a happy cat)# 查询文本queryVectorQuery(vectorquery_vec,vector_field_nameembedding,return_fields[text],num_results3)resultsindex.query(query)fordocinresults:print(doc[text],doc[vector_distance])输出示例That is a happy dog 0.123 That is a happy person 0.145 Today is a sunny day 0.567原理Redis 使用 FAISS 或 HNSW 等算法在向量字段上执行近似最近邻ANN搜索返回与查询向量最相似的文档同时提供距离度量余弦相似度/内积等。选择浮点数据类型RedisVL 支持将向量存储为不同的数值类型float16、float32、float64、bfloat16以及整数类型int8、uint8。dtype必须在向量器实例化时指定并且必须与索引 Schema 中定义的维度类型一致。hf_float16HFTextVectorizer(modelsentence-transformers/all-mpnet-base-v2,dtypefloat16)bytes_vechf_float16.embed(test,as_bufferTrue)# 返回 float16 编码的字节流选择较低精度如float16可节省存储空间和加速计算但可能轻微影响精度。float32是默认值兼容性最好。总结与最佳实践Provider适用场景注意点OpenAI通用、高质量需要 API Key费用较高需网络Azure OpenAI企业 Azure 环境配置复杂但合规性更好HuggingFace开源免费可离线模型较大首次需下载Ollama本地运行完全免费需安装 Ollama 并拉取模型VertexAIGCP 生态用户需要 GCP 权限和配置Cohere针对检索优化的模型注意input_type参数VoyageAI特定领域如法律模型同样需指定input_typeMistral AI欧洲 AI 供应商支持异步需 API KeyAmazon BedrockAWS 企业用户需要 AWS 凭证关键要点所有向量化器共享相同的接口embed单条、embed_many批量、aembed/aembed_many异步批量嵌入能显著提高效率尤其对于 API 类服务内部实现可能将多个文本打包成一次请求向量存储前需转换为字节流as_bufferTrue或array_to_buffer查询时使用VectorQuery并传入查询向量即可获得相似结果通过 RedisVL 的向量化器你可以轻松地在多个嵌入模型之间切换并与 Redis 的向量索引完美结合构建高性能的语义搜索、推荐系统或 RAG 应用。现在就开始尝试吧

相关新闻

ADS131A0x高精度ADC实战:从硬件设计到固件驱动的电能计量系统指南

ADS131A0x高精度ADC实战:从硬件设计到固件驱动的电能计量系统指南

1. 项目概述:从芯片手册到高精度数据采集实战如果你正在为电能计量、电网保护或者高精度多通道数据采集系统选型,那么德州仪器(TI)的ADS131A02和ADS131A04这两颗24位同步采样Δ-Σ ADC,大概率已经进入了你的视野。它们…

2026/10/14 4:27:18 阅读更多 →
为什么你的英文Prompt总被误读?揭秘中文提示词翻译中隐藏的4层语义损耗机制

为什么你的英文Prompt总被误读?揭秘中文提示词翻译中隐藏的4层语义损耗机制

更多请点击: https://codechina.net 第一章:为什么你的英文Prompt总被误读?揭秘中文提示词翻译中隐藏的4层语义损耗机制 当你将“Generate a concise, professional email summarizing the Q3 sales report with bullet points and a call-t…

2026/10/4 1:28:20 阅读更多 →
TPS2373 PoE PD控制器设计:从协议原理到硬件实现详解

TPS2373 PoE PD控制器设计:从协议原理到硬件实现详解

1. 项目概述:深入理解TPS2373在PoE系统中的核心角色 在部署网络设备,尤其是那些需要安装在难以触及位置的设备时,比如天花板上的无线接入点、建筑外墙的IP摄像头,或者工厂车间里的物联网传感器,最头疼的问题往往不是网…

2026/9/29 14:31:22 阅读更多 →

最新新闻

燃烧仿真中辐射传热模型怎么选?DO与WSGGM实战指南

燃烧仿真中辐射传热模型怎么选?DO与WSGGM实战指南

1. 辐射传热:燃烧仿真中最容易忽略的主角做燃烧仿真的人都知道一个矛盾:大多数人入门的第一个燃烧算例,火焰温度总是偏高。不管湍流模型怎么调、化学反应机理怎么换,炉膛出口温度就是压不下来。直到某天某位前辈淡淡说了一句“你开…

2026/10/14 4:27:51 阅读更多 →
GridView AJAX化实战:告别Postback,实现无刷新分页与排序

GridView AJAX化实战:告别Postback,实现无刷新分页与排序

简介:面向ASP.NET开发者的GridView实用示例包,针对VS自带的GridView在数据增删改操作上不灵活、页面刷新频繁、交互体验差等痛点,提供了一套基于ASP.NET 4.0与SQL Server 2008的轻量级解决方案,通过Ajax实现无刷新操作&#xff0c…

2026/10/14 4:27:51 阅读更多 →
什么情况下索引会失效

什么情况下索引会失效

一、什么叫做索引失效索引失效,是指查询时因为写法或条件的问题,数据库用不上(或只用上一部分)已有的索引,导致加速能力丧失,退化成全表扫描或逐行过滤。数据照样查得出来,结果也对,…

2026/10/14 4:27:51 阅读更多 →
数据中心废热回收:从能源黑洞到热源工厂的工程实践

数据中心废热回收:从能源黑洞到热源工厂的工程实践

数据中心在多数人的第一印象里就是“电老虎”“能源黑洞”,这个印象不算错,但往往忽略了一件关键的事:电力穿过服务器之后,并没有真的消失,而是变成了热量。只是这些热量通常被冷却塔、风机和冷冻水系统当作废料排进大…

2026/10/14 4:27:51 阅读更多 →
2025年12月六级真题三套全解析:考点拆解与复盘方法

2025年12月六级真题三套全解析:考点拆解与复盘方法

2025年12月的大学英语六级考试一结束,我就开始整理这一批真题。原因很简单:备考群里连续好几天都有人在问卷子做得对不对、作文跑没跑题、三套卷到底该先做哪套。我把三套题目重新过了一遍,也把答案解析重新盘了一遍,这篇就从这套…

2026/10/14 4:27:51 阅读更多 →
AnyPS5跨平台图像处理管线:色彩管理与批量处理实战避坑指南

AnyPS5跨平台图像处理管线:色彩管理与批量处理实战避坑指南

1. 项目缘起与核心定位AnyPS5 这个名字第一次出现在我视野里的时候,我正被一堆跨平台图像处理的需求折腾得够呛。团队里有人用 Windows 做设计,有人用 macOS 做后期,还有几个同事习惯在 Linux 环境下跑批处理脚本,每次交付素材都要…

2026/10/14 4:26:51 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →