【书生大模型实战营】闯关作业-InternLM + LlamaIndex RAG 实践

训练营^^冒个泡

在这里插入图片描述

关卡^^瞧一瞧

在这里插入图片描述

文档教程:

https://github.com/InternLM/Tutorial/blob/camp3/docs/L1/LlamaIndex

视频链接:

https://www.bilibili.com/video/BV19E4m1X79q/?spm_id_from=333.788&vd_source=aa73d1c15d764220f2a23f5806bddddc

在这里插入图片描述


理论篇

RAG简介

什么是RAG?:(Retrieval Augmented Generation) 检索增强生成。利用对外部知识库的检索来辅助LLM的说话能力。有据可依,就可使LLM说的更准确、掌握和表达的消息更具有实时性、降低胡说八道的幻觉。
在这里插入图片描述

RAG工作原理

将大篇文档成文本小段,每一小段文字编码成特征向量,存入向量数据库。同时也将问题语句编码成特征向量。检索就是对编码后、代表文段特征的特征向量进行相似度大小的计算和排序。根据检索结果,将问题最相关的文本片段组合在一起作为prompt,输入LLM,令其生成最终的回答。

在这里插入图片描述

相关基础知识拓展

在这里插入图片描述

在这里插入图片描述

RAG 与 提示词工程、微调 等手段的比较

主要可以从两个维度归纳:一个是模型对事实的实时性(纵轴),一个是模型对场景的适应性(横轴)

在这里插入图片描述

在这里插入图片描述

可用于RAG的评估指标

在这里插入图片描述

RAG理论篇总结

在这里插入图片描述


实践篇

使用LLAMAINDEX工具来做RAG

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

作业效果

使用RAG前:

运行naive脚本代码:

from llama_index.llms.huggingface import HuggingFaceLLM
from llama_index.core.llms import ChatMessage
llm = HuggingFaceLLM(
    model_name="/root/model/internlm2-chat-1_8b",
    tokenizer_name="/root/model/internlm2-chat-1_8b",
    model_kwargs={"trust_remote_code":True},
    tokenizer_kwargs={"trust_remote_code":True}
)

rsp = llm.chat(messages=[ChatMessage(content="xtuner是什么?")])
print(rsp)

哈哈开始白日造梦了:

在这里插入图片描述


使用RAG后:

加载知识文档:

cd ~/llamaindex_demo
mkdir data
cd data
git clone https://github.com/InternLM/xtuner.git
mv xtuner/README_zh-CN.md ./

运行以下脚本代码:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings

from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface import HuggingFaceLLM

#初始化一个HuggingFaceEmbedding对象,用于将文本转换为向量表示
embed_model = HuggingFaceEmbedding(
#指定了一个预训练的sentence-transformer模型的路径
    model_name="/root/model/sentence-transformer"
)
#将创建的嵌入模型赋值给全局设置的embed_model属性,
#这样在后续的索引构建过程中就会使用这个模型。
Settings.embed_model = embed_model

llm = HuggingFaceLLM(
    model_name="/root/model/internlm2-chat-1_8b",
    tokenizer_name="/root/model/internlm2-chat-1_8b",
    model_kwargs={"trust_remote_code":True},
    tokenizer_kwargs={"trust_remote_code":True}
)
#设置全局的llm属性,这样在索引查询时会使用这个模型。
Settings.llm = llm

#从指定目录读取所有文档,并加载数据到内存中
documents = SimpleDirectoryReader("/root/llamaindex_demo/data").load_data()
#创建一个VectorStoreIndex,并使用之前加载的文档来构建索引。
# 此索引将文档转换为向量,并存储这些向量以便于快速检索。
index = VectorStoreIndex.from_documents(documents)
# 创建一个查询引擎,这个引擎可以接收查询并返回相关文档的响应。
query_engine = index.as_query_engine()
response = query_engine.query("xtuner是什么?")

print(response)

噔噔!魔术开场:

在这里插入图片描述

答案里确实有了更为准确的信息,同时这个工具还提供了所依据的相关材料。以后可以在字符串上稍作处理,将回答结果和依据材料分开显示,提高用户体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值