当前位置:   article > 正文

大模型RAG文档问答langchain实践_rag 提示词 模板

rag 提示词 模板

本文档目的:

  1. 快速了解RAG的背景与原理
  2. 使用langchain框架快速搭建问答系统

大模型RAG 问答的背景

随着自然语言处理技术的不断发展,问答系统作为一种重要的应用形式,已经得到了广泛的关注和研究。传统的问答系统通常依赖于手动编写的规则和模板,这种方式不仅效率低下,而且难以适应复杂多变的自然语言表达方式。

为了解决这些问题,人们开始研究基于深度学习的问答系统。其中,大语言模型(LLM)的出现改变了自然语言处理(NLP)的格局。这些模型具有极高的语言理解能力,可以处理各式各样的自然语言任务,例如文本生成、知识问答、推理计算、阅读理解等。其中,问答系统是一种常见的 NLP 应用,它允许用户提出问题,并根据预训练的知识或信息库提供答案。

近几年出现了大量的预训练模型(Bert[1]、Gpt3[2]、RoBERTa[3]、T5[4])。这些大型预训练模型大都基于公开语料(书籍、维基百科等),导致模型都是基于先前训练过的数据进行内容的生成,会产生幻觉问题(胡言乱语或答非所问),当用户的查询超出范围时,例如在训练数据中未见过的内容或需要最新信息来回答时,LLM会产生较差的性能。对于实时数据以及保存在企业私有文档或数据库中的内容进行问答,一般都是通过微调的方法,但此方法费时费力,为了解决这个问题,研究人员提出了检索增强生成(RAG)的方法。RAG 是一种基于生成式模型的问答方法,它首先从私有数据文档或数据库中对提问进行检索,然后再将检索到的数据送入LLM中,最大可能的消除了模型的幻觉问题。LLM可以利用来自外部数据源的额外相关信息来增强文本生成能力。

未来大模型的发展趋势:大模型就像一个基座,可以基于此开发多种应用,类似于电脑中的CPU。

暂时无法在飞书文档外展示此内容

什么是RAG(Retrieval Augmented Generation)

RAG,全称检索增强生成(Retrieval-Augmented Generation),是一种优化大型语言模型(LLM)输出的方法,使其能够在生成响应之前引用权威知识库。它结合了语言模型和信息检索技术,可以在多种自然语言处理任务中提高质量和准确性。

RAG是一种利用向量数据库和大模型结合的应用方案,可以解决大模型的知识局限性、幻觉问题和数据安全性等问题。它是一种基于向量数据库的文本检索技术,能够快速找到相似的文本。

检索增强生成的通用流程

暂时无法在飞书文档外展示此内容

检索增强生成的最先进流程

  1. 查询重写技术(query translation)
  2. 查询路由(Routing)
  3. 查询构建(query construction)
  4. 索引(Indexing)
  5. 检索(Retrieval)
  6. 生成(Generation)

在这里插入图片描述

什么是Langchain

LangChain 是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型(LLM)和聊天模型提供支持的应用程序的过程。

简单来说,可以将 LangChain 理解为开源版的 GPT 插件,它提供了丰富的大语言模型工具,支持在开源模型的基础上快速增强模型的能力。

实践

环境安装配置

安装langchian的相关依赖包

# 安装包
! pip install langchain_community tiktoken langchain-openai langchainhub chromadb langchain

  • 1
  • 2
  • 3

我们可以选择大模型的api调用或者本地有显卡 自己部署开源大模型进行问答生成,如果选择大模型api调用,则一般需要申请相关大模型的api key,根据自己的需要选择所需的模型。

在这里插入图片描述

(可选,用来追踪问答的过程和结果)LangSmith 配置

import os
os.environ['LANGCHAIN_TRACING_V2'] = 'true'
os.environ['LANGCHAIN_ENDPOINT'] = 'https://api.smith.langchain.com'
os.environ['LANGCHAIN_API_KEY'] = <your-api-key>

  • 1
  • 2
  • 3
  • 4
  • 5

配置open api key 用来访问openai 的api

os.environ['OPENAI_API_KEY'] = <your-api-key>

  • 1
  • 2
  1. 通用流程

下面这个代码是使用langchain框架最通用的一个过程

import bs4
from langchain import hub
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI, OpenAIEmbeddings

#### 索引 ####

# 1. 加载文档 : 使用的langchain自带的web库 解析网页
loader = WebBaseLoader(
    web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",),
    bs_kwargs=dict(
        parse_only=bs4.SoupStrainer(
            class_=("post-content", "post-title", "post-header")
        )
    ),
)
# 加载文档
docs = loader.load()

# 2. 分割 : 使用langchain的文本分割库 参数:chunk_size 分割的文档块大小 chunk_overlap 相邻文档块的重叠数字
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)

# 3. 嵌入 : 使用Openai的embed模型将分割好的文档块进行向量化,并将向量存储
vectorstore = Chroma.from_documents(documents=splits, 
                                    embedding=OpenAIEmbeddings())

# 4. 创建检索器:k是参数 可调 用来控制查到的块个数
retriever = vectorstore.as_retriever(search_kwargs={"k": 1})

#### 检索并生成 ####

# 5. 提示词
prompt = hub.pull("rlm/rag-prompt")

# 6. 调用了gpt-3.5的 api
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)

# 文档前处理 用来拼接文档的所有页
def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

# 构建调用链
rag_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# 开始提问
rag_chain.invoke("What is Task Decomposition?")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  1. 查询重写技术 (Query Transformations)

基于距离的矢量数据库在高维空间中查询并根据“距离”寻找相似的嵌入文档。但是,检索可能会根据查询语义的微妙变化产生不同的结果,所以,我们可以对用户的查询进行重写操作,从而自动化调优提示过程。

2.1 多重查询(Multi Query)

多重查询是将问题使用模型再生成几个不同的版本,这几个版本并行去查向量数据库,把检索到的文档全部送到大模型中去生成答案。

2.2 查询结果融合(Rag-Fusion)[7]

RAG-Fusion 的工作流程包括:首先,通过 LLM 将用户的查询转换为相似但不同的查询;然后,对原始查询及其新生成的同级查询执行矢量搜索;接着,使用倒数排名融合来聚合和细化所有结果;最后,将精心挑选的结果与新查询配对,引导大型语言模型精心设计输出,考虑所有查询和重新排序的结果列表。

相比于上一小节的部分,只多了将查询到的文档集进行融合的一个过程,而不是把查到的所有文档送到LLM中。

2.3 查询分解(Quert Decomposition)

查询分解是将用户的问题

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/688091
推荐阅读
相关标签
  

闽ICP备14008679号