一,环境准备
1,先更新pip版本: pip install --upgrade pip
2,安装Llamalndex相关包:
pip install llama-index
pip install llama-index-embeddings-huggingface
pip install llama-index-llms-huggingface
解释-llama-index是核心包;llama-index-embeddings-huggingface允许我们使用本地的embedding模型去完成文档的切分和编码等操作;llama-index-llms-huggingface允许我们使用本地的大模型去开发RAG应用。
3,下载embedding模型权重:Embedding模型是一种在机器学习和自然语言处理中广泛应用的技术,旨在将高维度的数据(如文字、图片、视频等)映射到低维度的空间
git lfs install
git clone https://www.modelscope.cn/AI-ModelScope/bge-base-zh-v1.5.git
4,下载模型文件:git clone https://www.modelscope.cn/qwen/Qwen1.5-14B-Chat.git
二,构建第一个RAG应用
1,文档准备:中医临床诊疗术语证候.txt(国家中医药管理局 国家卫生健康委员会关于印发《中医病证分类与代码》和《中医临床诊疗术语》的通知_国务院部门文件_中国政府网为落实《中共中央 国务院关于促进中医药传承创新发展的意见》《国务院办公厅关于加强三级公立医院绩效考核工作的意见》《关于印发国际疾病分类第十一次修订本(ICD-11)中文版的通知》等文件要求,国家中医药局组织修订了《中医病证分类与代码》和《中医临床诊疗术语》(可在国家中医药局官方网站“政策文件”栏目下载),现印发给你们,并就有关要求通知如下:https://www.gov.cn/zhengce/zhengceku/2020-11/24/content_5563703.htm)放入项目根目录下的document文件夹(新建文件夹document)中
2,导入所需要的包:
import logging
import sys
import torch
from llama_index.core import PromptTemplate, Settings, SimpleDirectoryReader, VectorStoreIndex, load_index_from_storage, \
StorageContext, QueryBundle
from llama_index.core.schema import MetadataMode
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface import HuggingFaceLLM
from llama_index.core.node_parser import SentenceSplitter
3,定义日志配置:
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
4,定义System Prompt:
SYSTEM_PROMPT = """You are a helpful AI assistant."""
query_wrapper_prompt = PromptTemplate(
"[INST]<<SYS>>\n" + SYSTEM_PROMPT + "<</SYS>>\n\n{query_str}[/INST] "
)
5,使用llama-index-llms-huggingface构建本地大模型:
llm = HuggingFaceLLM(
context_window=4096,
max_new_tokens=2048,
generate_kwargs={"temperature": 0.0, "do_sample": False},
query_wrapper_prompt=query_wrapper_prompt,
tokenizer_name='/mnt/workspace/Qwen1.5-14B-Chat',
model_name='/mnt/workspace/Qwen1.5-14B-Chat',
device_map="auto",
model_kwargs={"torch_dtype": torch.float16},
)
Settings.llm = llm
6,文档读取:
documents = SimpleDirectoryReader("document").load_data()
7,文档切分,构建向量索引:
index = VectorStoreIndex.from_documents(documents, transformations=[SentenceSplitter(chunk_size=256)])
8,构建查询引擎:
query_engine = index.as_query_engine(similarity_top_k=5)
9,获得答案:
response = query_engine.query("不耐疲劳,口燥、咽干可能是哪些证候?")
print(response)