展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Langchain+Redis构建文本向量库教程

Langchain+Redis构建文本向量库教程

本教程详细阐述了如何利用Langchain框架,结合Redis向量数据库,实现自定义文本数据的加载、分割、嵌入生成及高效存储与检索。我们将通过实际代码示例,指导读者从本地文件读取文本,将其转化为向量嵌入,并持久化到Redis中,最终执行语义相似度搜索,为构建智能问答、推荐系统等应用奠定基础。

本文目录

    使用Langchain与Redis构建高效文本嵌入向量数据库教程

    本教程详细阐述了如何利用Langchain框架,结合Redis向量数据库,实现自定义文本数据的加载、分割、嵌入生成及高效存储与检索。我们将通过实际代码示例,指导读者从本地文件读取文本,将其转化为向量嵌入,并持久化到Redis中,最终执行语义相似度搜索,为构建智能问答、推荐系统等应用奠定基础。

    引言:Langchain与Redis在向量检索中的应用

    在人工智能和自然语言处理领域,将非结构化文本数据转化为数值向量(即嵌入,Embeddings)并进行高效存储与检索已成为核心需求。向量数据库应运而生,它能够存储高维向量,并支持基于相似度的快速检索。Redis,作为一款高性能的内存数据库,结合其RediSearch模块,可以作为强大的向量数据库使用。Langchain作为一个大型语言模型(LLM)应用开发框架,则提供了便捷的工具链,简化了文本处理、嵌入生成以及与各类向量数据库的交互过程。本教程将聚焦于如何利用Langchain,将自定义文本文件处理后存储到Redis向量数据库中,并进行后续的相似度搜索。

    准备工作:环境配置

    在开始之前,请确保您已安装必要的Python库,并运行着一个Redis服务器实例。

    1. 安装Python库:
      pip install langchain redis openai tiktoken
      • langchain: Langchain框架的核心库。
      • redis: Python Redis客户端,用于连接Redis服务器。
      • openai: 如果使用OpenAI的嵌入模型,需要安装此库。
      • tiktoken: OpenAI模型所需的分词器。
    2. 运行Redis服务器: 确保您的本地或远程Redis服务器正在运行,并且启用了RediSearch模块。RediSearch是Redis支持向量索引和查询的关键组件。

    数据加载与文本分割

    在将文本转化为嵌入之前,通常需要从文件加载文本,并将其分割成适合处理的较小块。这有助于提高嵌入的质量,并更好地管理上下文。

    1. 加载文本文件

    Langchain的TextLoader可以方便地从本地文件加载文本内容。

    from langchain.document_loaders import TextLoader
    
    # 假设您有一个名为 'union.txt' 的文本文件
    # 请根据您的实际文件路径和编码进行调整
    loader = TextLoader("union.txt", encoding="utf-8")
    documents = loader.load()
    
    print(f"已加载 {len(documents)} 个文档(文件)。")
    # 每个文档对象通常包含 page_content(文本内容)和 metadata(元数据)
    # print(documents[0].page_content[:200]) # 打印前200个字符预览

    2. 分割文本

    对于大型文档,直接生成嵌入可能会导致信息丢失或超出模型输入限制。CharacterTextSplitter等文本分割器可以将长文本分割成更小的、有意义的块。

    from langchain.text_splitter import CharacterTextSplitter
    
    # 初始化文本分割器
    # chunk_size: 每个文本块的最大字符数
    # chunk_overlap: 相邻文本块之间的重叠字符数,有助于保留上下文
    text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
    
    # 分割加载的文档
    docs = text_splitter.split_documents(documents)
    
    print(f"原始文档分割后生成了 {len(docs)} 个文本块。")
    # print(docs[0].page_content[:200]) # 打印分割后第一个文本块的预览

    注意事项:

    • chunk_size和chunk_overlap的选择取决于您的具体应用场景和嵌入模型的上下文窗口大小。
    • CharacterTextSplitter是基于字符进行分割,Langchain还提供了其他分割器,如RecursiveCharacterTextSplitter,它会尝试保留更有意义的结构(如段落、句子)。

    生成文本嵌入 (Embeddings)

    将文本分割成块后,下一步是使用嵌入模型将这些文本块转换为高维向量。

    from langchain.embeddings import OpenAIEmbeddings
    # from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings # 也可以选择本地模型
    
    # 初始化嵌入模型
    # 如果使用OpenAIEmbeddings,请确保您的OPENAI_API_KEY环境变量已配置
    # 或者通过 os.environ["OPENAI_API_KEY"] = "your_api_key" 设置
    embeddings = OpenAIEmbeddings()
    
    # 如果您希望使用本地模型,可以尝试 SentenceTransformerEmbeddings
    # embeddings = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")

    选择嵌入模型:

    • OpenAIEmbeddings: 易于使用,效果通常很好,但需要API密钥并产生费用。
    • SentenceTransformerEmbeddings: 可以在本地运行,无需外部API,适合对数据隐私有要求或需要离线部署的场景,但需要下载模型文件。

    将文档与嵌入存储到Redis

    一旦文本块和嵌入模型准备就绪,就可以将它们存储到Redis向量数据库中。Langchain的Redis向量存储类提供了便捷的接口。

    from langchain.vectorstores import Redis
    
    # 将文档和嵌入存储到Redis
    # docs: 经过分割的文档列表
    # embeddings: 初始化的嵌入模型实例
    # redis_url: Redis服务器的连接地址,格式为 "redis://:"
    # index_name: 在Redis中创建的向量索引名称,用于区分不同的数据集
    vectorstore = Redis.from_documents(
        docs,
        embeddings,
        redis_url="redis://localhost:6379",
        index_name="my_custom_text_index", # 建议使用有意义的索引名称
    )
    
    print(f"文档和嵌入已成功存储到Redis索引 '{vectorstore.index_name}' 中。")

    关键参数:

    • docs: 包含文本内容和元数据的Document对象列表。
    • embeddings: 用于生成和查询嵌入的嵌入模型实例。
    • redis_url: Redis服务器的连接字符串。
    • index_name: 这是一个非常重要的参数,它定义了在Redis中存储这些向量和元数据的索引名称。不同的数据集应该使用不同的索引名称。

    执行相似度搜索

    数据存储完成后,您可以根据查询文本执行语义相似度搜索,检索出最相关的文档块。

    # 初始化一个Redis向量存储实例以进行查询(如果之前未保留实例)
    # vectorstore = Redis(
    #     embedding_function=embeddings.embed_query, # 查询时也需要嵌入函数
    #     redis_url="redis://localhost:6379",
    #     index_name="my_custom_text_index"
    # )
    
    # 定义查询文本
    query = "乌克兰人民怎么样了?" # 示例查询,与union.txt内容相关
    
    # 1. 执行相似度搜索 (只返回文档内容)
    results = vectorstore.similarity_search(query)
    print("\n--- 相似度搜索结果 (仅内容) ---")
    for i, doc in enumerate(results):
        print(f"结果 {i+1}:\n{doc.page_content}\n---")
    
    # 2. 执行带分数的相似度搜索 (返回文档内容和相似度分数)
    # 分数通常表示距离,值越小表示越相似(例如,余弦距离)
    results_with_score = vectorstore.similarity_search_with_score(query)
    print("\n--- 相似度搜索结果 (带分数) ---")
    for i, (doc, score) in enumerate(results_with_score):
        print(f"结果 {i+1}:")
        print(f"内容: {doc.page_content}")
        print(f"分数: {score}\n---")

    搜索方法:

    • similarity_search(query): 返回与查询最相似的Document对象列表。
    • similarity_search_with_score(query): 返回一个元组列表,每个元组包含一个Document对象和对应的相似度分数。分数越小通常代表相似度越高(取决于所使用的距离度量,如余弦距离)。

    注意事项与进阶考量

    1. 索引命名 (index_name): 为不同的数据集或应用场景选择有意义且唯一的index_name至关重要。这有助于管理和区分Redis中的向量数据。
    2. Redis连接 (redis_url): 确保redis_url正确指向您的Redis服务器,并且该服务器已启动并启用了RediSearch模块。如果Redis需要密码认证,可以在URL中包含密码,例如redis://:password@localhost:6379。
    3. 嵌入模型的选择: 根据您的预算、性能需求、隐私要求以及是否需要离线部署来选择合适的嵌入模型。OpenAI模型通常性能优异,但有API调用限制和成本;Sentence Transformers等本地模型则更灵活。
    4. 关于嵌入数据的TTL (Time-to-Live): 原始问题中提到了TTL。Langchain的Redis向量存储在通过from_documents方法存储数据时,没有直接提供设置单个嵌入数据TTL的参数。Redis本身支持对键设置TTL(EXPIRE命令),但Langchain的抽象层并未直接暴露此功能给向量存储的文档。如果您的应用需要对存储的嵌入数据设置过期时间,您可能需要:
      • 在Langchain存储数据后,通过底层的redis-py客户端手动对Redis中存储文档的哈希键(通常是doc::格式)设置TTL。
      • 在数据摄取管道中,自行管理数据的生命周期,例如定期清理旧数据或重新索引。
      • 考虑使用支持原生TTL的向量数据库,或通过更高级的Langchain集成(如使用自定义的add_documents实现)来管理。 对于大多数教程场景,数据通常被视为持久化存储,除非手动删除。

    总结

    本教程详细介绍了如何利用Langchain框架,结合Redis向量数据库,构建一个端到端的文本嵌入存储与检索系统。从加载本地文本文件,到进行有效的文本分割,再到生成高质量的文本嵌入,并最终将这些数据高效地存储到Redis中并执行相似度搜索,整个流程清晰明了。掌握这些技能,将使您能够为各种智能应用(如语义搜索、问答系统、内容推荐等)构建强大的向量检索能力。记住,根据您的具体需求,可以灵活调整文本分割策略、嵌入模型选择以及Redis的部署方式。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。