参考知识
任务
基础任务 (完成此任务即完成闯关)
- 任务要求1(必做,参考readme_api.md) :基于 LlamaIndex 构建自己的 RAG 知识库,寻找一个问题 A 在使用 LlamaIndex 之前 浦语 API 不会回答,借助 LlamaIndex 后 浦语 API 具备回答 A 的能力,截图保存。注意:写博客提交作业时切记不要泄漏自己 api_key!
- 任务要求2(可选,参考readme.md) :基于 LlamaIndex 构建自己的 RAG 知识库,寻找一个问题 A 在使用 LlamaIndex 之前 InternLM2-Chat-1.8B 模型不会回答,借助 LlamaIndex 后 InternLM2-Chat-1.8B 模型具备回答 A 的能力,截图保存。
- 任务要求3(优秀学员必做) :将 Streamlit+LlamaIndex+浦语API的 Space 部署到 Hugging Face。
过程
在 Intern Studio 服务器上部署LlamaIndex
2.1 配置基础环境
填写 开发机名称 后,点击 选择镜像 使用 Cuda12.0-conda 镜像,然后在资源配置中,使用 30% A100 * 1 的选项,然后立即创建开发机器。
点击
进入开发机 选项。
创建新的conda环境,命名为 llamaindex,在命令行模式下运行:
conda create -n llamaindex python=3.10
复制完成后,在本地查看环境。
conda env list
运行
conda 命令,激活 llamaindex 然后安装相关基础依赖 python 虚拟环境:
conda activate llamaindex
安装python 依赖包
pip install einops==0.7.0 protobuf==5.26.1
2.2 安装 Llamaindex
安装 Llamaindex和相关的包
conda activate llamaindex
pip install llama-index==0.11.20
pip install llama-index-llms-replicate==0.3.0
pip install llama-index-llms-openai-like==0.2.0
pip install llama-index-embeddings-huggingface==0.3.1
pip install llama-index-embeddings-instructor==0.2.1
pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 --index-url https://download.pytorch.org/whl/cu121
2.3 下载 Sentence Transformer 模型
源词向量模型 Sentence Transformer:(我们也可以选用别的开源词向量模型来进行 Embedding,目前选用这个模型是相对轻量、支持中文且效果较好的,同学们可以自由尝试别的开源词向量模型) 运行以下指令,新建一个python文件
cd ~
mkdir llamaindex_demo
mkdir model
cd ~/llamaindex_demo
touch download_hf.py
打开download_hf.py 贴入以下代码
import os
# 设置环境变量
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
# 下载模型
os.system('huggingface-cli download --resume-download sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 --local-dir /root/model/sentence-transformer')
然后,在 /root/llamaindex_demo 目录下执行该脚本即可自动开始下载:
cd /root/llamaindex_demo
conda activate llamaindex
python download_hf.py
更多关于镜像使用可以移步至 HF Mirror 查看。
推荐用户从modelscope下载
git lfs install
cd /root/model/
git clone https://www.modelscope.cn/Ceceliachenen/paraphrase-multilingual-MiniLM-L12-v2.git
mv paraphrase-multilingual-MiniLM-L12-v2 sentence-transformer
2.4 下载 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.zip
之后使用时服务器即会自动使用已有资源,无需再次下载
3. 是否使用 LlamaIndex 前后对比
3.1 不使用 LlamaIndex RAG(仅API)
浦语官网和硅基流动都提供了InternLM的类OpenAI接口格式的免费的 API,可以访问以下两个了解两个 API 的使用方法和 Key。
浦语官方 API:internlm.intern-ai.org.cn/api/documen…
硅基流动:cloud.siliconflow.cn/models?mfs=…
运行以下指令,新建一个python文件
cd ~/llamaindex_demo
touch test_internlm.py
打开test_internlm.py 贴入以下代码
from openai import OpenAI
base_url = "https://internlm-chat.intern-ai.org.cn/puyu/api/v1/"
api_key = "sk-请填写准确的 token!"
model="internlm2.5-latest"
# base_url = "https://api.siliconflow.cn/v1"
# api_key = "sk-请填写准确的 token!"
# model="internlm/internlm2_5-7b-chat"
client = OpenAI(
api_key=api_key ,
base_url=base_url,
)
chat_rsp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "xtuner是什么?"}],
)
for choice in chat_rsp.choices:
print(choice.message.content)
之后运行
conda activate llamaindex
cd ~/llamaindex_demo/
python test_internlm.py
- 使用自己DIY的问题,浦语 API 回答的不对
- messages=[{"role": "user", "content": "本周主打怪这个TRPG规则中猎魔人有哪些基本动作?"}],
回答
在TRPG(桌面角色扮演游戏)中,猎魔人通常被设定为擅长使用各种武器和魔法对抗邪恶生物的角色。具体的基本动作会因不同的游戏系统和设定而有所不同,但一般来说,猎魔人的基本动作可以包括以下几个方面:
1. **攻击**:
- 猎魔人可以使用各种武器进行物理攻击,如剑、弓箭、长鞭等。
- 攻击动作通常包括“攻击”、“刺击”、“挥击”等,具体取决于所使用的武器。
- 攻击动作可能包括白刃攻击和远程攻击。
2. **防御**:
- 猎魔人可以使用盾牌或特定的防御技能来减少受到的伤害。
- 防御动作可能包括“格挡”、“闪避”、“躲闪”等,帮助猎魔人在战斗中保持生存能力。
3. **移动**:
- 猎魔人可以在战场上移动,以接近敌人或远离危险。
- 移动动作可能包括“前进”、“后退”、“侧移”等,帮助猎魔人调整战斗位置。
- 某些系统中,移动还可能与潜行或隐蔽相关。
4. **技能使用**:
- 猎魔人可能拥有特定的技能,如追踪、隐秘行动、治疗等。
- 这些技能通常在特定的条件下可以使用,如在隐蔽状态时使用技能“隐秘行动”,或在战斗中使用技能“治疗”来恢复自己的生命值。
5. **魔法/法术**:
- 在一些设定中,猎魔人可能能够使用魔法或法术,如祝福、诅咒、召唤生物等。
- 这些法术可能用于增强自身或削弱敌人,是战斗中不可或缺的一部分。
6. **探索与调查**:
- 虽然这可能不被视为“基本动作”,但在许多TRPG中,探索和调查环境是猎魔人任务的重要组成部分。
- 这可能包括寻找线索、解开谜题、与NPC互动等。
需要注意的是,不同的TRPG系统对猎魔人的设定可能会有所不同,上述动作只是基于一般TRPG设定中猎魔人可能具备的基本动作。具体到某个特定的游戏系统,猎魔人的能力和动作可能会有所差异。如果你是在玩某个特定的TRPG,最好参考该游戏的官方规则书或指南,以获取最准确的信息。
3.2 使用 API+LlamaIndex
conda activate llamaindex
运行以下命令,获取知识库
cd ~/llamaindex_demo
mkdir data
cd data
git clone https://github.com/InternLM/xtuner.git
mv xtuner/README_zh-CN.md ./
运行以下指令,新建一个python文件
cd ~/llamaindex_demo
touch llamaindex_RAG.py
打开llamaindex_RAG.py贴入以下代码
import os
os.environ['NLTK_DATA'] = '/root/nltk_data'
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.settings import 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 = "请填写 API Key"
# api_base_url = "https://api.siliconflow.cn/v1"
# model = "internlm/internlm2_5-7b-chat"
# api_key = "请填写 API Key"
llm =OpenAILike(model=model, api_base=api_base_url, api_key=api_key, is_chat_model=True,callback_manager=callback_manager)
#初始化一个HuggingFaceEmbedding对象,用于将文本转换为向量表示
embed_model = HuggingFaceEmbedding(
#指定了一个预训练的sentence-transformer模型的路径
model_name="/root/model/sentence-transformer"
)
#将创建的嵌入模型赋值给全局设置的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)
之后运行
conda activate llamaindex
cd ~/llamaindex_demo/
python llamaindex_RAG.py
运行很慢 导入自己的word后运行报错
pip install docx2txt
询问自己的问题