向量化和向量数据库的开发步骤,以及本地docker下载Redis-stack-server,以及如何将文本转成向量,以及文本向量化成功后将数据存入到Redis-stack-server这个向量数据库

为什么选用Redis-stack-server?
新增了ReJSON-RL,用于存储向量化后的数据,所以可以当作向量数据库
并且Redis-Stack本身也是高性能的查询内存的分布式数据库,所以不用引入新的技术

embedding是进行向量化(通常是embeddingModel来实现具体功能,也叫做嵌入式模型),向量化后就可以存入向量库,向量库可以用PostgreSQL,也可以用Redis-stack




内存可以作为向量数据库,但是一重启一断电数据就没了

这了选择RedisStack作为向量数据,用来向量的存储,未来会改名成Redis8,也就是在原本的Reids的功能上增加了新的特性,本质上还是Redis

向量数据库还可以用ElaticSearch、MongoDB等

一、改pom.xml

重点:

       <!--spring-ai-alibaba dashscope-->
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
        </dependency>
        <!-- 添加 Redis 向量数据库依赖 -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-vector-store-redis</artifactId>
        </dependency>

完整:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.atguigu.study</groupId>
        <artifactId>SpringAIAlibaba-atguiguV1</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>SAA-11Embed2vector</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--spring-ai-alibaba dashscope-->
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
        </dependency>
        <!-- 添加 Redis 向量数据库依赖 -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-vector-store-redis</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.38</version>
        </dependency>
        <!--hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.22</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-m
<think> 我们使用LangChainRedis构建一个文档向量存储系统。步骤如下: 1. 加载文档(这里假设使用文本文件) 2. 分割文档(使用文本分割器) 3. 使用嵌入模型生成向量(比如OpenAI的embedding) 4.向量文档存储到Redis中 注意:需要安装必要的库,如langchain, redis, openai等。 我们将按照以下步骤编写代码: - 设置环境变量(例如OPENAI_API_KEY) - 创建文档加载器(这里使用TextLoader作为示例) - 使用文本分割器(如RecursiveCharacterTextSplitter) - 初始化嵌入模型(如OpenAIEmbeddings- 初始化Redis向量数据库(使用Redis作为向量存储) 代码示例: """ 注意:以下代码需要根据实际情况调整,比如Redis的连接信息、文档路径等。 """ import os from langchain.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Redis # 设置环境变量,例如OpenAI的API密钥 os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # 1. 加载文档 loader = TextLoader("your_document.txt") # 替换为你的文档路径 documents = loader.load() # 2. 分割文档 text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0) docs = text_splitter.split_documents(documents) # 3. 初始化嵌入模型 embeddings = OpenAIEmbeddings() # 4. 将文档向量存储到Redis # 注意:需要提前启动Redis服务器,并确保redis-py库已安装 # 连接Redis的参数:例如redis_url="redis://localhost:6379" # 索引名称(index_name)可以自定义 redis_url = "redis://localhost:6379" index_name = "my_index" # 将分割后的文档对应的向量添加到Redis db = Redis.from_documents( docs, embeddings, redis_url=redis_url, index_name=index_name ) # 这样,向量就已经存储到Redis中了 # 如果需要后续使用,可以这样初始化一个Redis向量数据库对象 # db = Redis.from_existing_index(embeddings, redis_url=redis_url, index_name=index_name) print("向量成功存储到Redis数据库中。") """ 请注意: 1. 确保Redis服务器正在运行。 2. 替换`your_document.txt`为你的文档路径。 3. 替换`your-openai-api-key`为你的OpenAI API密钥。 以上代码完成了将文档分割、生成向量并存储到Redis的过程。 §§相关问题§§ 1. 如何处理多种格式的文档(如PDF、Word)而不只是文本文件? 2. 如何调整文本分割的参数(如块大小重叠大小)以优化向量表示? 3. 除了OpenAI的嵌入模型,LangChain还支持哪些嵌入模型? 4. 如何从Redis中检索相似文档? 5.Redis中存储向量时,索引的配置参数有哪些需要注意的地方? </think> 以下是使用Python + LangChain + Redis实现文档分割、向量生成与存储的完整代码: ```python import os from langchain.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Redis from langchain.schema import Document # 环境配置(需替换为实际值) os.environ["OPENAI_API_KEY"] = "sk-your-openai-key" REDIS_URL = "redis://localhost:6379" INDEX_NAME = "docs_index" def process_document(file_path: str): """文档处理与向量存储流水线""" # 1. 加载文档 loader = TextLoader(file_path, encoding='utf-8') raw_document = loader.load()[0] # 获取第一个文档对象 # 2. 文档分割 text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, # 每个分块最大字符数 chunk_overlap=50, # 分块间重叠字符 separators=["\n\n", "\n", "。", "!", "?"] # 中文分割符 ) chunks = text_splitter.split_documents([raw_document]) # 3. 生成嵌入向量 embeddings = OpenAIEmbeddings(model="text-embedding-ada-002") # 4. 存储到Redis Redis.from_documents( documents=chunks, embedding=embeddings, index_name=INDEX_NAME, redis_url=REDIS_URL ) print(f"✅ 成功存储 {len(chunks)} 个分块到Redis索引 {INDEX_NAME}") # 使用示例 if __name__ == "__main__": process_document("path/to/your_document.txt") # 替换为实际文件路径 ``` ### 关键组件说明: 1. **文档加载器**:`TextLoader` 支持.txt文件(其他格式需使用`PyPDFLoader`/`Docx2txtLoader`) 2. **中文分割器**:通过`separators`参数优化中文文本分割 3. **向量模型**:使用OpenAI的text-embedding-ada-002生成嵌入向量 4. **Redis配置**: - 需提前安装Redis服务(`docker run -p 6379:6379 redis/redis-stack-server:latest`) - 索引自动创建在RedisSearch中 ### 依赖安装: ```bash pip install langchain openai redis tiktoken ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值