手机app客户端做网站,个人小程序开发教程,做网站为什么需要购买域名,企业网站的公司和产品信息的介绍与网络营销关系文章目录 一、任务要求11.首先创建虚拟环境2. 安装依赖3. 下载 Sentence Transformer 模型4.下载 NLTK 相关资源5. 是否使用 LlamaIndex 前后对比6. LlamaIndex web7. LlamaIndex本地部署InternLM实践 一、任务要求1
任务要求1#xff08;必做#xff0c;参考readme_api.md本地部署InternLM实践 一、任务要求1
任务要求1必做参考readme_api.md基于 LlamaIndex 构建自己的 RAG 知识库寻找一个问题 A 在使用 LlamaIndex 之前 浦语 API 不会回答借助 LlamaIndex 后 浦语 API 具备回答 A 的能力截图保存。
1.首先创建虚拟环境
conda create -n llamaindex python3.102. 安装依赖
需要注意镜像cuda的版本这里使用的是12.2的版本如果是11.7版本的可以使用这个替代
conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.7 -c pytorch -c nvidia
# 安装python 依赖包
pip install einops0.7.0 protobuf5.26.1
# 安装 Llamaindex和相关的包
pip install llama-index0.11.20
pip install llama-index-llms-replicate0.3.0
pip install llama-index-llms-openai-like0.2.0
pip install llama-index-embeddings-huggingface0.3.1
pip install llama-index-embeddings-instructor0.2.1
pip install torch2.5.0 torchvision0.20.0 torchaudio2.5.0 --index-url https://download.pytorch.org/whl/cu1213. 下载 Sentence Transformer 模型
源词向量模型 Sentence Transformer 创建文件和python文件进行下载 这个embeding文本嵌入式模型用来处理文档转换成向量数据库进行检索的 注意安装路径我这里是安装在 /root/llamaindex_demo/paraphrase-multilingual-MiniLM-L12-v2
git lfs install# 如果git lfs install 下面的报错 则执行git lfs install
#git: lfs is not a git command. See git --help.
#The most similar command is
apt-get install git-lfs
git lfs install
git clone https://www.modelscope.cn/Ceceliachenen/paraphrase-multilingual-MiniLM-L12-v2.git4.下载 NLTK 相关资源
我们在使用开源词向量模型构建开源词向量的时候需要用到第三方库 nltk 的一些资源。正常情况下其会自动从互联网上下载但可能由于网络原因会导致下载中断此处我们可以从国内仓库镜像地址下载相关资源保存到服务器上。 我们用以下命令下载 nltk 资源并解压到服务器上
cd /root
git clone https://gitee.com/yzy0612/nltk_data.git --branch gh-pages
cd nltk_data
mv packages/* ./
cd tokenizers
unzip punkt.zip
cd ../taggers
unzip averaged_perceptron_tagger.zip5. 是否使用 LlamaIndex 前后对比
5.1 不使用LlamaIndex
from openai import OpenAIbase_url https://internlm-chat.intern-ai.org.cn/puyu/api/v1/
api_key
modelinternlm2.5-latest# base_url https://api.siliconflow.cn/v1
# api_key sk-请填写准确的 token
# modelinternlm/internlm2_5-7b-chatclient OpenAI(api_keyapi_key,base_urlbase_url,
)chat_rsp client.chat.completions.create(modelmodel,messages[{role: user, content: xtuner是什么}],
)for choice in chat_rsp.choices:print(choice.message.content)输出 5.2 使用LlamaIndex
获取知识库
cd ~/llamaindex_demo
mkdir data
cd data
git clone https://github.com/InternLM/xtuner.git
mv xtuner/README_zh-CN.md ./报错一zipfile.BadZipFile: File is not a zip file
报错问题:缺少punkt_tab
解决方案确保执行下面代码的时候NLTK_DATA已经跑完结构目录是这样的 如果缺少punkt_tab会报错,第一次执行一定要耐心等待NLTK_DATA下载完成
报错二
AttributeError: HuggingFaceEmbedding object has no attribute __pydantic_private__. Did you mean: __pydantic_complete__?
报错问题:pip install llama-index-embeddings-huggingface0.3.1
解决方案必须是0.3.1版本的执行代码
import os
os.environ[NLTK_DATA] /root/nltk_datafrom llama_index.core import Settings, SimpleDirectoryReader, VectorStoreIndex
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.legacy.callbacks import CallbackManager
from llama_index.llms.openai_like import OpenAILikecallback_manager CallbackManager()api_base_url https://internlm-chat.intern-ai.org.cn/puyu/api/v1/
api_key xxx
model internlm2.5-latestllm OpenAILike(modelmodel, api_baseapi_base_url, api_keyapi_key, is_chat_modelTrue,callback_managercallback_manager)embed_model HuggingFaceEmbedding(#指定了一个预训练的sentence-transformer模型的路径model_name/root/llamaindex_demo/paraphrase-multilingual-MiniLM-L12-v2
)
# 将创建的嵌入模型赋值给全局设置的embed_model属性
# 这样在后续的索引构建过程中就会使用这个模型。
Settings.embed_model embed_model
# 初始化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)输出
6. LlamaIndex web
运行之前首先安装依赖
pip install streamlit1.39.0运行以下指令新建一个python文件
cd ~/llamaindex_demo
touch app.py复制一下代码
import streamlit as st
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.legacy.callbacks import CallbackManager
from llama_index.llms.openai_like import OpenAILike# Create an instance of CallbackManager
callback_manager CallbackManager()api_base_url https://internlm-chat.intern-ai.org.cn/puyu/api/v1/
model internlm2.5-latest
api_key xxx# api_base_url https://api.siliconflow.cn/v1
# model internlm/internlm2_5-7b-chat
# api_key 请填写 API Keyllm OpenAILike(modelmodel, api_baseapi_base_url, api_keyapi_key, is_chat_modelTrue,callback_managercallback_manager)st.set_page_config(page_titlellama_index_demo, page_icon)
st.title(llama_index_demo)# 初始化模型
st.cache_resource
def init_models():embed_model HuggingFaceEmbedding(model_name/root/llamaindex_demo/paraphrase-multilingual-MiniLM-L12-v2)Settings.embed_model embed_model#用初始化llmSettings.llm llmdocuments SimpleDirectoryReader(/root/llamaindex_demo/data).load_data()index VectorStoreIndex.from_documents(documents)query_engine index.as_query_engine()return query_engine# 检查是否需要初始化模型
if query_engine not in st.session_state:st.session_state[query_engine] init_models()def greet2(question):response st.session_state[query_engine].query(question)return response# Store LLM generated responses
if messages not in st.session_state.keys():st.session_state.messages [{role: assistant, content: 你好我是你的助手有什么我可以帮助你的吗}] # Display or clear chat messages
for message in st.session_state.messages:with st.chat_message(message[role]):st.write(message[content])def clear_chat_history():st.session_state.messages [{role: assistant, content: 你好我是你的助手有什么我可以帮助你的吗}]st.sidebar.button(Clear Chat History, on_clickclear_chat_history)# Function for generating LLaMA2 response
def generate_llama_index_response(prompt_input):return greet2(prompt_input)# User-provided prompt
if prompt : st.chat_input():st.session_state.messages.append({role: user, content: prompt})with st.chat_message(user):st.write(prompt)# Gegenerate_llama_index_response last message is not from assistant
if st.session_state.messages[-1][role] ! assistant:with st.chat_message(assistant):with st.spinner(Thinking...):response generate_llama_index_response(prompt)placeholder st.empty()placeholder.markdown(response)message {role: assistant, content: response}st.session_state.messages.append(message)然后运行
streamlit run app.pyctrl左键打开网址 测试
7. LlamaIndex本地部署InternLM实践
我们可以看到开发机上已经有下好的本地模型我们只需要直接测试使用即可
1.运行以下指令把 InternLM2 1.8B 软连接出来
cd ~/model
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b/ ./2.创建llamaindex_internlm.py文件 在这之前必须要确保以下命令安装完成 确定pytorch-cuda的版本修改为正确的版本。
pip install llama-index-embeddings-huggingface0.2.0 llama-index-embeddings-instructor0.1.3
conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda12.1 -c pytorch -c nvidia
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(contentxtuner是什么)])
print(rsp)3.运行结果 4.创建文件llamaindex_RAG_local.py
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settingsfrom llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface import HuggingFaceLLM#初始化一个HuggingFaceEmbedding对象用于将文本转换为向量表示
embed_model HuggingFaceEmbedding(
#指定了一个预训练的sentence-transformer模型的路径pythmodel_name/root/llamaindex_demo/paraphrase-multilingual-MiniLM-L12-v2
)
#将创建的嵌入模型赋值给全局设置的embed_model属性
#这样在后续的索引构建过程中就会使用这个模型。
Settings.embed_model embed_modelllm 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)5.运行结果 6.创建app_local.py文件 插入代码
import streamlit as st
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface import HuggingFaceLLMst.set_page_config(page_titlellama_index_demo, page_icon)
st.title(llama_index_demo)# 初始化模型
st.cache_resource
def init_models():embed_model HuggingFaceEmbedding(model_name/root/llamaindex_demo/paraphrase-multilingual-MiniLM-L12-v2)Settings.embed_model embed_modelllm 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})Settings.llm llmdocuments SimpleDirectoryReader(/root/llamaindex_demo/data).load_data()index VectorStoreIndex.from_documents(documents)query_engine index.as_query_engine()return query_engine# 检查是否需要初始化模型
if query_engine not in st.session_state:st.session_state[query_engine] init_models()def greet2(question):response st.session_state[query_engine].query(question)return response# Store LLM generated responses
if messages not in st.session_state.keys():st.session_state.messages [{role: assistant, content: 你好我是你的助手有什么我可以帮助你的吗}]# Display or clear chat messages
for message in st.session_state.messages:with st.chat_message(message[role]):st.write(message[content])def clear_chat_history():st.session_state.messages [{role: assistant, content: 你好我是你的助手有什么我可以帮助你的吗}]st.sidebar.button(Clear Chat History, on_clickclear_chat_history)# Function for generating LLaMA2 response
def generate_llama_index_response(prompt_input):return greet2(prompt_input)# User-provided prompt
if prompt : st.chat_input():st.session_state.messages.append({role: user, content: prompt})with st.chat_message(user):st.write(prompt)# Gegenerate_llama_index_response last message is not from assistant
if st.session_state.messages[-1][role] ! assistant:with st.chat_message(assistant):with st.spinner(Thinking...):response generate_llama_index_response(prompt)placeholder st.empty()placeholder.markdown(response)message {role: assistant, content: response}st.session_state.messages.append(message)7.运行 streamlit run app_loacl.py