训练营^^冒个泡
关卡^^瞧一瞧
文档教程:
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)
噔噔!魔术开场:
答案里确实有了更为准确的信息,同时这个工具还提供了所依据的相关材料。以后可以在字符串上稍作处理,将回答结果和依据材料分开显示,提高用户体验。