当前位置: 首页 > news >正文

langchain应用-RAG

简述

检索增强生成(Retrieval Augmented Generation),简称 RAG,已经成为当前最火热的LLM应用方案。

RAG(中文为检索增强生成) = 检索技术 + LLM 提示。例如,我们向 LLM 提问一个问题(answer),RAG 从各种数据源检索相关的信息,并将检索到的信息和问题(answer)注入到 LLM 提示中,LLM 最后给出答案。

完整的RAG应用流程主要包含两个阶段:

  • 数据准备阶段:数据提取——>文本分割——>向量化(embedding)——>数据入库
  • 应用阶段:用户提问——>数据检索(召回)——>注入Prompt——>LLM生成答案

下面我们详细介绍一下各环节的技术细节和注意事项:

数据准备阶段

数据准备一般是一个离线的过程,主要是将私域数据向量化后构建索引并存入数据库的过程。主要包括:数据提取、文本分割、向量化、数据入库等环节。

code

from langchain.text_splitter import RecursiveCharacterTextSplitter                                                                                                                      
from langchain_community.document_loaders import WebBaseLoader
from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddings
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_ollama import ChatOllama


# 数据提取
loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/")
data = loader.load()
 
# 文本分割
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
#print(all_splits)
 
#向量化(embedding)
local_embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma.from_documents(documents=all_splits, embedding=local_embeddings)

应用阶段

在应用阶段,我们根据用户的提问,通过高效的检索方法,召回与提问最相关的知识,并融入Prompt;大模型参考当前提问和相关知识,生成相应的答案。关键环节包括:数据检索、注入Prompt等。

code

prompt = ChatPromptTemplate.from_template(
    "Summarize the main themes in these retrieved docs: {docs}"
)
 
 
llm = ChatOllama(
            model="qwen2:7b",
            # model="llama3.1:8b",
            # model="ollama.com/wangshenzhi/llama3.1_8b_chinese_chat:latest",
            # model="EntropyYue/chatglm3:6b",
            # temperature=0.4,
            temperature=0.2,
            verbose=True
        )
 
def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)
 
 
chain = {"docs": format_docs} | prompt | llm | StrOutputParser()
 
question = "What are the approaches to Task Decomposition?"
 

# 数据检索
docs = vectorstore.similarity_search(question)
 
# 注入Prompt
response = chain.invoke(docs)
 
print(response)                   

参考文章

一文读懂:大模型RAG(检索增强生成)_rag大模型-CSDN博客

相关文章:

  • 【Unity Shader编程】之图元装配与光栅化
  • springcloud的组件及作用
  • 2012年下半年软件设计师上午题知识点及其详细解释(附真题及答案解析)
  • 【linux】更换ollama的deepseek模型默认安装路径
  • Vue 3 生命周期和生命周期函数
  • sql server查询IO消耗大的排查sql诊断语句
  • 机器学习入门实战 4 - 基本模型
  • 【SQL】SQL多表查询
  • FastAdmin后端列表导入表格数据
  • 瑞芯微RV1126部署YOLOv8全流程:环境搭建、pt-onnx-rknn模型转换、C++推理代码、错误解决、优化、交叉编译第三方库
  • 确保设备始终处于最佳运行状态,延长设备的使用寿命,保障系统的稳定运行的智慧地产开源了
  • HTTP2.0 和 HTTP1.1 的区别
  • 【分布式理论13】分布式存储:数据存储难题与解决之道
  • JavaEE基础之- 数据库与建模工具
  • BSD协议栈:UDP输入
  • Scrapy安装,创建Scrapy项目,启动Scrapy爬虫
  • 【Vue】集成Antlr4
  • k8s-对接NFS存储
  • java:用Guava的TypeToken优雅处理通配符类型(WildcardType): ? extends Number
  • JSON类型理解(前后端交互/内存对数据操作)
  • 云南省司法厅党委书记、厅长茶忠旺主动投案,正接受审查调查
  • 十大券商看后市|A股风险偏好有回升空间,把握做多窗口
  • 申活观察|演出场次破纪录、入境游导游档期忙,上海文旅商“热力”拉满
  • 巴菲特股东大会4.5万字问答实录:股神60年穿越牛熊的最新心得和人生思考
  • 德国巴斯夫:关税政策加剧全球市场不确定性,间接影响已显现
  • 新华社评论员:在推进中国式现代化的宽广舞台上绽放青春光彩