检索增强生成:通过RAG助力鲜花运营

检索增强生成(RAG,Retrieval-Augmented Generation)是一种结合了信息检索技术与语言生成模型的人工智能技术。它通过从外部知识库中检索相关信息,并将其作为提示(Prompt)输入给大型语言模型(LLMs),以增强模型处理知识密集型任务的能力,如问答、文本摘要、内容生成等。

RAG的核心优势在于它能够将传统信息检索系统的优势与生成式大语言模型的功能结合起来,使得LLM能够通过结合额外的知识与自身的语言技能,撰写更准确、更具时效性且更贴合具体需求的文字。RAG技术的目的在于提高生成模型的性能,其关键创新在于打破传统生成模型仅仅依赖自身参数预测输出的限制,转而引入检索策略获取外部知识库中的相关信息,再利用这些信息引导模型生成更准确、更具信息量的内容。

RAG的工作流程通常包括以下几个步骤:

  1. 检索(Retrieval):根据用户请求从外部知识源检索相关上下文。使用嵌入模型将用户查询嵌入到与向量数据库中的附加上下文相同的向量空间中,执行相似性搜索,并返回矢量数据库中最接近的前k个数据对象。
  2. 增强(Augment):用户查询和检索到的附加上下文被填充到提示模板中,形成增强的输入。
  3. 生成(Generate):利用增强后的输入,大型语言模型生成响应或文本。

RAG技术相较于直接使用LLMs进行问答具有多个优点,包括可扩展性、准确性、可控性、可解释性、多功能性和时效性。它允许开发者无需为每个特定任务重新训练大型模型,仅需连接外部知识库,即可为模型注入额外的信息资源,从而显著提升其回答的精确度。这种技术尤其适用于那些高度依赖专业知识的任务,并且能够支持知识内容的灵活更新与个性化配置。

LangChain 是一个专为利用大型语言模型(LLMs)创建应用程序而设计的全面框架。以下是关于 LangChain 的一些关键点:

  1. 框架目标:LangChain 的主要目标是帮助开发人员轻松构建基于语言模型的应用,与多种语言模型兼容,特别是与 OpenAI ChatGPT 无缝集成。

  2. 核心组件:LangChain 通过三个核心组件实现增强:

    • Components(组件):为 LLMs 提供接口封装、模板提示和信息检索索引。
    • Chains(链):将不同的组件组合起来解决特定的任务,比如在大量文本中查找信息。
    • Agents(代理):使得 LLMs 能够与外部环境进行交互,例如通过 API 请求执行操作。
  3. 工具和代理:LangChain 提供各种工具和代理,用于帮助用户在应对挑战和生成有意义的回答时提高效率和便捷性。代理是根据自然语言指令行动的机器人,可以利用工具来回答查询。

  4. LangGraph:LangChain 还包含了 LangGraph,这是一个通过将步骤建模为图中的边和节点,构建强大且有状态的多参与者应用程序的框架。它与 LangChain 无缝集成,但也可以单独使用。

  5. LangServe 和 LangSmith:LangServe 用于将 LangChain 链部署为 REST API,而 LangSmith 是一个开发者平台,让开发者可以调试、测试、评估和监控 LLM 应用程序。

  6. 应用场景:LangChain 可以用于构建聊天机器人、生成式问答(GQA)、摘要等多种应用。

  7. 开发与部署:LangChain 简化了 LLM 应用程序生命周期的每个阶段,从开发到生产化再到部署,提供了一套完整的工具和平台支持。

LangChain 提供了一个灵活的框架,利用公司的数据和 API 构建上下文感知、推理应用程序,并使应用程序的未来证明,通过将供应商可选性作为 LLM 基础设施设计的一部分。通过这个框架,开发者可以构建更加智能和强大的应用程序,这些应用程序能够处理复杂的任务,并且能够与外部数据源和工具进行交互。

""" 
本文件是【检索增强生成:通过 RAG 助力鲜花运营】章节的配套代码,课程链接:https://juejin.cn/book/7387702347436130304/section/7388069959185727524
您可以点击最上方的“运行“按钮,直接运行该文件;更多操作指引请参考Readme.md文件。
"""
# 设置OpenAI的API密钥
import osfrom volcenginesdkarkruntime import Ark
from typing import List, Any
from langchain.embeddings.base import Embeddings
from langchain.pydantic_v1 import BaseModel# 初始化Embedding类
class DoubaoEmbeddings(BaseModel, Embeddings):client: Ark = Noneapi_key: str = ""model: strdef __init__(self, **data: Any):super().__init__(**data)if self.api_key == "":self.api_key = os.environ["OPENAI_API_KEY"]self.client = Ark(base_url=os.environ["OPENAI_BASE_URL"],api_key=self.api_key)def embed_query(self, text: str) -> List[float]:"""生成输入文本的 embedding.Args:texts (str): 要生成 embedding 的文本.Return:embeddings (List[float]): 输入文本的 embedding,一个浮点数值列表."""embeddings = self.client.embeddings.create(model=self.model, input=text)return embeddings.data[0].embeddingdef embed_documents(self, texts: List[str]) -> List[List[float]]:return [self.embed_query(text) for text in texts]class Config:arbitrary_types_allowed = Trueembeddings_model = DoubaoEmbeddings(model=os.environ["EMBEDDING_MODELEND"],
)# Embed文本
embeddings = embeddings_model.embed_documents(["您好,有什么需要帮忙的吗?","哦,你好!昨天我订的花几天送达","请您提供一些订单号?","12345678",]
)
print(len(embeddings), len(embeddings[0]))# Embed查询
embedded_query = embeddings_model.embed_query("刚才对话中的订单号是多少?")
print(embedded_query[:3])

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

初遇Python-----python/anaconda/PyCharm安装应用问题

作为一名医学生,小编之前从未用过python,一直将R视为数据分析的利器,至于到底R好用还是Python好用,一直是广大网友们争论的热点,小编资历尚浅,对此就不予评价了。最近需要对部分数据进行建模工作,奈何三方工具完全基于python语言编写的,迫不得已小编也只能挠头学习了。本…

基于reads的宏基因组与宏转录组医学分析流程正式上线!

随着生物医学领域的快速发展,宏基因组学和宏转录组学正逐渐成为研究微生物群落及其在人体健康与疾病中作用的关键技术。然而,医学研究样品往往存在微生物含量较低的情况,这给数据分析带来了挑战。为了解决这一难题,并适应不断增长…

使用Aria2实现离线下载

最近有需要BT下载,但有的资源很冷门,速度很慢,总不能一直开着电脑下载,于是想到部署个离线下载。想起之前用雨云服务器拿来部署兰空图床感觉效果不错,发现内存剩的还挺多,所以继续压榨一下😏 提…

第三百二十三节 Java线程教程 - Java同步器

Java线程教程 - Java同步器 同步器对象与一组线程一起使用。 它维护一个状态,根据它的状态,它让一个线程通过或强迫它等待。 本节将讨论四种类型的同步器: SemaphoresBarriersLatchesExchangers 信号量 信号量用于控制可以访问资源的线程…

HTB:Active[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many SMB shares are shared by the target? 使用nmap对靶机TCP端口进行开放扫描 2.What is the name of the share that allows anonymous read access? 使用smbmap通过SMB服务对匿名用户共享权限情况进行扫描 3.Which file has…

vue3【组件封装】S-icon 图标 ( 集成 iconify )

1. 安装依赖 npm i -D iconify/jsonnpm i --save-dev iconify/vue2. 组件封装 src/components/S-icon.vue <script setup lang"ts"> // 搜索图标 https://icon-sets.iconify.design/ import { Icon } from iconify/vue defineProps({icon: {type: String,requ…

AI视觉小车基础--1.开发前的准备

1. 结束开机大程序 为了能够方便体验小车的APP功能&#xff0c;系统中增加了一个程序&#xff0c;此程序集合了APP的控制功能和玩法&#xff0c;所以称做“大程序”&#xff0c;而且在主板系统开机时&#xff0c;此程序会自动启动&#xff0c;所以称做“开机自启动大程序”。 开…

6.传输层协议、ACL

TCP和UDP协议 TCP/IP协议组的传输层协议 TCP(Transmission Control Protocol ) 传输控制协议 UDP&#xff08;User Datagram Protocol &#xff09; 用户数据报协议 TCP协议 TCP是面向连接的、可靠的进程到进程通信的协议 TCP提供全双工服务&#xff0c;即数据可在同一时间双…

避免数据丢失!在NAS上保存Docker容器配置的正确姿势

引言 如果你使用NAS来管理家庭或小型企业的数据,那么Docker容器一定不陌生。它能快速部署各种应用,比如Jellyfin、Plex等多媒体服务器。然而,很多人却踩过一个坑:NAS关机重启后,Docker容器的配置居然丢了!辛苦搭建的环境瞬间化为乌有。别担心,今天就来分享一套实用的技…

【Java的动态代理】

Java中有两种实现动态代理的方式jdk动态代理和CGLIB动态代理 jdk动态代理: 基于接口的动态代理, 目标对象必须实现接口cglib动态代理: 基于字节生成技术(ASM代码生成库), 能在运行时对java类和接口进行扩展实现 那么动态代理这个技术到底能帮我们干啥? 个人感觉这个技术在框…

python怎么安装numpy

1、在python官网https://pypi.python.org/pypi/numpy中找到安装的python版本对应的numpy版本。 例如&#xff1a; python版本是&#xff1a; 下载的对应numpy版本是&#xff1a; 2、将numpy下载到python的安装目录下的scripts文件夹中&#xff1b; 3、然后在cmd中执行以下命…

计算机三级 数据库技术

第一章 数据库应用系统开发方法 1.1 数据库应用系统生命周期 软件工程:软件工程的思想&#xff0c;即用工程的概念、原理、技术和方法对软件生产、开发的全过程进行跟踪和管理 软件开发方法:瀑布模型、快速原型模型、螺旋模型 DBAS生命周期模型 1.2 规划与分析 系统规划与定…

网络编程套接字2

之前我们已经介绍了UDP套接字流程&#xff0c;接下来我们介绍TCP流套接字编程&#xff0c;TCP的一个核心特点&#xff0c;面向字节流&#xff0c;读写数据的基本单位就是字节。 1.API介绍 1.1ServerSocket:是创建TCP服务器Socket的API&#xff08;专门给服务器用&#xff09;…

偌依-防重复提交

其中的使用工具类可去偌依的代码中查找 需要配合 springboot自定义过滤器构建可重复读取inputStream的request&#xff08;来源若依&#xff09; springboot自定义过滤器构建可重复读取inputStream的request&#xff08;来源若依&#xff09;-CSDN博客 定义注解 package co…

3D 数组插值 MATLAB

插值是一种根据现有数据点创建的趋势查找查询数据点值的方法。MATLAB 提供了许多选项来对 N 维数据执行插值。 在本文中&#xff0c;我们将讨论如何借助一些示例在 3D 数组中插入数据。我们将使用 MATLAB 的 interpn&#xff08;&#xff09; 函数来执行插值。 语法 vq interp…

如何在Typora中绘制流程图

如何在Typora中绘制流程图 在撰写文档时&#xff0c;清晰的流程图能极大地提升信息传递的效率。Typora是一款优秀的Markdown编辑器&#xff0c;支持通过Mermaid语法快速绘制流程图。本文将介绍如何在Typora中创建和自定义流程图&#xff0c;帮助你用更直观的方式呈现逻辑结构和…

SpringBoot集成Redis(全流程详解)

前言 通过在SpringBoot中集成Redis&#xff0c;详细梳理集成过程。包括SpringBoot启动过程中&#xff0c;容器的刷新、自动配置的流程、各类注解的处理。 类比在纯Spring中集成Redis&#xff0c;体验SpringBoot自动配置给开发带来了哪些便利。 一、测试样例 1.1配置文件 a…

机器人控制技术、传感器技术、Wi-Fi无线通信技术、AI视觉应用教学和实训: 智能小车车臂教学平台

1、基本介绍 智能车臂教学平台在硬件上采用模块化设计&#xff0c;主控板、运动车体、机械臂、各类传感器等都可以进行拆卸操作&#xff1b;在接口上&#xff0c;采用标准拔插式设计&#xff0c;减少接线&#xff0c;方便组装。使用Wi-Fi与控制软件进行通信&#xff0c;支持遥…

ssm113ssm框架的购物网站+vue(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;网上超市系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本网上超市系统就是在这…