快速上手LangChain(三)构建检索增强生成(RAG)应用

文章目录

  • 快速上手LangChain(三)构建检索增强生成(RAG)应用
    • 概述
    • 索引
      • 阿里嵌入模型 Embedding
    • 检索和生成
    • RAG应用(demo:根据我的博客主页,分析一下我的技术栈)

快速上手LangChain(三)构建检索增强生成(RAG)应用

langchain官方文档:https://python.langchain.ac.cn/docs/tutorials/rag/

概述

典型的 RAG 应用程序有两个主要组件

  • 索引:一个从源头摄取数据并对其进行索引的管道。这通常离线进行

  • 检索和生成:实际的 RAG 链,它在运行时获取用户查询,从索引中检索相关数据,然后将其传递给模型。

索引

在这里插入图片描述

  • 加载:首先我们需要加载数据。这可以使用文档加载器完成。
  • 拆分:文本拆分器将大型 Documents 分成更小的块。这对于索引数据和将其传递到模型中都很有用,因为大的块更难搜索,并且无法容纳在模型的有限上下文窗口中。
  • 存储:我们需要一个地方来存储和索引我们的拆分,以便稍后可以搜索它们。这通常使用向量存储和嵌入模型完成。

由于原始文档过大,超出了LLM的上下文窗口,需要将其分块才能让LLM识别。LangChain 提供了许多内置的文本分块工具,例如 CharacterTextSplitter

总结:RAG需要从向量数据库检索上下文然后输入LLM进行生成,因此需要提前将文本数据向量化并存储到向量数据库

阿里嵌入模型 Embedding

Embedding(也称为嵌入)是将文本、图片或音视频等数据转化为向量(数字序列)的一种方法。向量的特点在于可以用数学方式表示数据间的关系,向量之间的距离代表数据的相关性。距离越小,相关性越高;距离越大,相关性越低。

通用文本向量,是通义实验室基于LLM底座的多语言文本统一向量模型,面向全球多个主流语种,提供高水准的向量服务,帮助开发者将文本数据快速转换为高质量的向量数据。

通义官方文档:https://help.aliyun.com/zh/model-studio/user-guide/embedding
langchain相关代码:libs/community/langchain_community/embeddings/dashscope.py

检索和生成

  • 检索:给定用户输入,使用检索器从存储中检索相关拆分。
  • 生成:聊天模型 / LLM 使用包含问题和检索数据的提示来生成答案

在这里插入图片描述

一旦我们索引了数据,我们将使用LangGraph作为我们的编排框架来实现检索和生成步骤。

RAG应用(demo:根据我的博客主页,分析一下我的技术栈)

langchain官方文档:https://python.langchain.ac.cn/docs/tutorials/rag/

我们将构建一个应用程序,该应用程序可以回答有关网站内容的问题。我们将使用的特定网站是 Lilian Weng 的LLM Powered Autonomous Agents博客文章,这使我们可以询问有关该文章内容的问题。

这里我们把官方demo改造一下,指定我们自己的一篇博客文章,使用阿里的嵌入模型进行向量化,细节上做了一点优化。

  1. 安装依赖
pip install --upgrade langchain-text-splitters langchain-community
  1. 下载&加载语料
loader = WebBaseLoader(
    web_paths=(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/947576.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端系列】Pinia状态管理库

文章目录 一、前言🚀🚀🚀二、Pinia状态管理库:☀️☀️☀️2.1 pinia基本使用① pinia充当中转站存放token② 使用步骤 2.1 axios请求拦截器 一、前言🚀🚀🚀 ☀️ 回报不在行动之后,…

Springboot - Web

Spring Boot 是一个用于简化 Spring 应用程序配置和部署的框架。它提供了一种快速开发的方式,通过默认配置、自动化配置等特性,使得开发者能够更快捷地构建和部署基于 Spring 的应用。 Spring Boot Web 是 Spring Boot 的一个子模块,它专注于…

鸿蒙应用开发搬砖经验之—使用DevTools工具调试前端页面

环境说明: 系统环境:Mac mini M2 14.5 (23F79) 开发IDE:DevEco Studio 5.0.1 Release 配置步骤: 按着官方的指引来慢慢一步一步来,但前提是要配置好SDK的路径(没有配置的话,可能先看下面的配…

Java-数据结构-顺序表(ArrayList)

在之前的博客中,我们大部分都在学习数据结构相关的理论知识,而今天我们要学到的ArrayList便有所不同了,ArrayList这部分算是重要的知识,所以大家打起精神,让我们一起学习~ 在学习ArrayList之前,我们需要先…

stable diffusion安装mov2mov

第一步: 下载mov2mov,地址:https://gitcode.com/gh_mirrors/sd/sd-webui-mov2mov 下载包到web-ui的sd-webui-aki-v4.10\extensions文件夹面解压 第二步:在文件夹中调出cmd窗口,执行下列命令, git restore…

RWKV 语言模型

RWKV Language Model是一种独特的循环神经网络(RNN)架构的语言模型,具有诸多优势和特点,在自然语言处理领域展现出了良好的性能和应用潜力,以下是具体介绍: 核心原理 融合RNN与Transformer优点:…

基于单片机的温湿度采集系统(论文+源码)

2.1系统的功能 本系统的研制主要包括以下几项功能: (1)温度检测功能:对所处环境的温度进行检测; (2)湿度检测功能:对所处环境的湿度进行检测; (3)加热和制冷功能:可以完成加热和制冷功能。 (4)加湿和除…

「Mac畅玩鸿蒙与硬件49」UI互动应用篇26 - 数字填色游戏

本篇教程将带你实现一个数字填色小游戏,通过简单的交互逻辑,学习如何使用鸿蒙开发组件创建趣味性强的应用。 关键词 UI互动应用数字填色动态交互逻辑判断游戏开发 一、功能说明 数字填色小游戏包含以下功能: 数字选择:用户点击…

OCR图片中文字识别(Tess4j)

文章目录 Tess4J下载 tessdataJava 使用Tess4j 的 demo Tess4J Tess4J 是 Tesseract OCR 引擎的 Java 封装库,它让 Java 项目更轻松地实现 OCR(光学字符识别)功能。 下载 tessdata 下载地址:https://github.com/tesseract-ocr/…

Redis面试相关

Redis开篇 使用场景 缓存 缓存穿透 解决方法一: 方法二: 通过多次hash来获取对应的值。 小结 缓存击穿 缓存雪崩 打油诗 双写一致性 两种不同的要求 强一致 读锁代码 写锁代码 强一致,性能低。 延迟一致 方案一:消息队列 方…

【快速实践】深度学习 -- 数据曲线平滑化

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持! 在观察数据结果时,我们通常希望获得整体趋…

RS485方向自动控制电路分享

我们都知道RS485是半双工通信,所以在传输的时候需要有使能信号,标明是发送还是接收信号,很多时候就简单的用一个IO口控制就好了,但是有一些低成本紧凑型的MCU上,一个IO口也是很珍贵的,因此,如果…

DevSecOps自动化在安全关键型软件开发中的实践、Helix QAC Klocwork等SAST工具应用

DevSecOps自动化对于安全关键型软件开发至关重要。 那么,什么是DevSecOps自动化?具有哪些优势?为何助力安全关键型软件开发?让我们一起来深入了解~ 什么是DevSecOps自动化? DevSecOps自动化是指在软件开发生命周期的各…

【ArcGISPro/GeoScenePro】解决常见的空间参考和投影问题

修复空间参考缺失的图像 数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 查看属性坐标 查看属性范围 范围值并不是零或接近于零。 这意味着栅格具有范围,因此其已正确进行

十二、Vue 路由

文章目录 一、简介二、安装与基本配置安装 Vue Router创建路由实例在应用中使用路由实例三、路由组件与视图路由组件的定义与使用四、动态路由动态路由参数的定义与获取动态路由的应用场景五、嵌套路由嵌套路由的概念与配置嵌套路由的应用场景六、路由导航<router - link>…

C#实现画图,及实现图像运动,C#中GDI+图形图像技术(Graphics类、Pen类、Brush类)C#之快速入门GDI+绘图 C#实现快速画图功能

下载源码 <-------- 在C#的世界里&#xff0c;GDI如同一位多才多艺的艺术家&#xff0c;以其强大的绘图能力&#xff0c;让开发者能够轻松地在应用程序中挥洒创意&#xff0c;绘制出丰富多彩的图形世界。GDI不仅支持基本的几何图形绘制&#xff0c;还能处理复杂的图像处理任…

Echart实现3D饼图示例

在可视化项目中&#xff0c;很多地方会遇见图表&#xff1b;echart是最常见的&#xff1b;这个示例就是用Echart&#xff0c; echart-gl实现3D饼图效果&#xff0c;复制即可用 //需要安装&#xff0c;再引用依赖import * as echarts from "echarts"; import echar…

Devart dotConnect发布全新版本,支持EF Core 9、完全兼容 .NET 9 等!

dotConnect &#xff08;最新版dotConnect Universal试用下载&#xff09;是Devart旗下一种基于 ADO.NET 架构构建的增强型数据连接解决方案&#xff0c;也是一个采用多项创新技术的开发框架。dotConnect 包含面向主要数据库和流行云应用程序的高性能数据提供程序&#xff0c;并…

借助 FinClip 跨端技术探索鸿蒙原生应用开发之旅

在当今数字化浪潮汹涌澎湃的时代&#xff0c;移动应用开发领域正经历着深刻的变革与创新。鸿蒙操作系统的崛起&#xff0c;以其独特的分布式架构和强大的性能表现&#xff0c;吸引了众多开发者的目光。而FinClip 跨端技术的出现&#xff0c;为开发者涉足鸿蒙原生应用开发提供了…

UE5.3 虚幻引擎 Windows插件开发打包(带源码插件打包、无源码插件打包)

0 引言 随着项目体量的增大&#xff0c;所有代码功能都放一起很难管理。所以有什么办法可以将大模块划分成一个个小模块吗。当然有&#xff0c;因为虚幻引擎本身就遇到过这个问题&#xff0c;他的解决办法就是使用插件的形式开发。 例如&#xff0c;一个团队开发了文件I/O模块插…