Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

git_7579_introduction #2994

Open
wants to merge 200 commits into
base: class
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
200 commits
Select commit Hold shift + click to select a range
ed76a8b
Update README.md
vansin Sep 3, 2024
eab12e6
update
vansin Sep 3, 2024
937cf4a
update
vansin Sep 3, 2024
02dd725
Camp4 add L0-linux (#1984)
acwwt Oct 8, 2024
cf43fbe
Update README.md
vansin Oct 14, 2024
e95b3f9
Update README.md
vansin Oct 15, 2024
5c03c12
Update README.md
vansin Oct 15, 2024
19f6617
Update README.md
vansin Oct 15, 2024
ec6546f
Create readme.md
vansin Oct 15, 2024
6017373
Create task.md
vansin Oct 15, 2024
a3504fd
Create readme.md
vansin Oct 15, 2024
1240878
Create task.md
vansin Oct 15, 2024
034d0c4
Create readme.md
vansin Oct 15, 2024
0687193
Update README.md
vansin Oct 15, 2024
28b775d
add Prompt Tutorial (#2004)
yzfly Oct 15, 2024
0498147
Update README.md
vansin Oct 15, 2024
32dfbe9
Update README.md
vansin Oct 15, 2024
35885ca
Update README.md
vansin Oct 15, 2024
bc04d49
Camp4 llamaindex rag (#2015)
blankanswer Oct 18, 2024
5b2269e
Camp4 hf ms ml (#2016)
blankanswer Oct 20, 2024
6a788ff
Camp4 hf ms ml words (#2022)
blankanswer Oct 21, 2024
5639946
git 已修改,图像居中,加了永久保存 (#2023)
random-zhou Oct 21, 2024
8870d23
Create L0/python (#2006)
charleson98 Oct 21, 2024
cebe4cc
update
vansin Oct 21, 2024
fd07c82
Update README.md
vansin Oct 21, 2024
aa8f4ba
Update README.md
vansin Oct 21, 2024
c88dc9d
Update README.md
vansin Oct 21, 2024
33be64c
Update README.md
vansin Oct 21, 2024
216db2b
Update readme.md (#2024)
blankanswer Oct 21, 2024
9a30e0f
Update task.md
vansin Oct 21, 2024
74fbf90
optimze: Git readme.md (#2025)
blankanswer Oct 21, 2024
d3b2c7e
Update task.md
vansin Oct 22, 2024
03bcfb1
fix: project-apply link (#2036)
blankanswer Oct 22, 2024
88e8d64
Update README.md
vansin Oct 22, 2024
3423756
git (#2046)
random-zhou Oct 22, 2024
dd775aa
Update README.md
vansin Oct 22, 2024
63e3508
[doc] XTuner assistant (#1933)
JimmyMa99 Oct 22, 2024
57e2e20
Update README.md
vansin Oct 22, 2024
797e2b8
[doc]Camp4 (#2053)
JimmyMa99 Oct 22, 2024
dcb5c8e
Update readme.md (#2089)
blankanswer Oct 24, 2024
bc6ba92
Camp4 (#2098)
JimmyMa99 Oct 24, 2024
be92157
Camp4 (#2099)
JimmyMa99 Oct 24, 2024
ea0658d
Update readme.md (#2101)
blankanswer Oct 25, 2024
0dc4013
Camp4 (#2109)
JimmyMa99 Oct 25, 2024
2134980
Camp4 (#2112)
JimmyMa99 Oct 25, 2024
6a2009b
Camp4 (#2117)
JimmyMa99 Oct 26, 2024
bd091c9
Update README.md (#2125)
JimmyMa99 Oct 27, 2024
715bc8b
update camp4 cource(#2013)
1587causalai Oct 27, 2024
a6300ac
Update readme.md (#2147)
random-zhou Oct 28, 2024
bf30d76
Update README.md
vansin Oct 28, 2024
198bb50
Update python doc (#2151)
charleson98 Oct 28, 2024
368b540
Update README.md
vansin Oct 29, 2024
6e37d86
[doc] Camp4-InternVL (#2021)
Control-derek Oct 29, 2024
e00957c
Update README.md
vansin Oct 29, 2024
168b795
Update README.md (#2167)
JimmyMa99 Oct 29, 2024
d70af12
Update README.md
vansin Oct 30, 2024
ae652db
Update tasks.md
vansin Oct 30, 2024
28dfc28
Update task.md
vansin Oct 31, 2024
b0625b3
add prompt practice.md (#2205)
yzfly Oct 31, 2024
e1c3211
fix: llamaindex_torch (#2192)
blankanswer Oct 31, 2024
d779296
update video
vansin Oct 31, 2024
8070834
Update readme.md (#2281)
huangjinyuu Nov 1, 2024
54ded8b
Update get_data.py (#2294)
JimmyMa99 Nov 2, 2024
0646685
update L1/Prompt/README.md (#2303)
Mictorinox Nov 2, 2024
6bad683
Camp4 (#2168)
1587causalai Nov 2, 2024
1dae48f
Llamaindex RAG 增加浦语 API 任务 (#2297)
cgq0816 Nov 2, 2024
af4a4d6
Update readme.md (#2311)
1587causalai Nov 2, 2024
8c11de7
Update task.md
vansin Nov 2, 2024
ae25bef
Update task.md
vansin Nov 2, 2024
d14ca20
Update task.md
vansin Nov 2, 2024
aac4e72
Update task.md
vansin Nov 2, 2024
c35dd2e
Update task.md
vansin Nov 2, 2024
d120d1c
add excellent blog (#2318)
Alannikos Nov 2, 2024
4cd81d9
Update task.md
vansin Nov 2, 2024
f95a206
Update task.md
vansin Nov 2, 2024
3f1ee7d
Update task.md
vansin Nov 2, 2024
d8503af
Update readme_api.md (#2323)
cgq0816 Nov 2, 2024
3104014
Update readme_api.md
vansin Nov 2, 2024
156e644
Update readme_api.md
vansin Nov 2, 2024
6f167ea
Update readme_api.md
vansin Nov 2, 2024
8211610
Update readme_api.md
vansin Nov 2, 2024
106af6c
Update readme_api.md
vansin Nov 2, 2024
d873285
Update readme_api.md
vansin Nov 2, 2024
6f71dc0
Update readme_api.md
vansin Nov 2, 2024
31a9e16
Update readme_api.md
vansin Nov 2, 2024
08d17a1
Update readme_api.md
vansin Nov 2, 2024
b4d0ff1
Update readme_api.md
vansin Nov 2, 2024
2513518
Update readme_api.md
vansin Nov 2, 2024
8855805
Update readme_api.md
vansin Nov 2, 2024
c007749
Create readme_local.py
vansin Nov 2, 2024
ab052c2
update
vansin Nov 2, 2024
d891ceb
Update readme.md
vansin Nov 2, 2024
fec33bb
Update readme.md
vansin Nov 2, 2024
8a24879
Update readme.md
vansin Nov 2, 2024
8dbeac9
Update readme.md
vansin Nov 2, 2024
e78332f
Update README.md
vansin Nov 3, 2024
380b296
Create readme.md
vansin Nov 3, 2024
df81b28
Update README.md
vansin Nov 3, 2024
42031e7
Update readme_api.md
vansin Nov 4, 2024
d55be11
Update readme_api.md
vansin Nov 4, 2024
64c344a
Update readme_api.md
vansin Nov 4, 2024
efa9d69
Update readme_api.md
vansin Nov 4, 2024
c23d296
update
vansin Nov 4, 2024
73af528
Update readme.md
vansin Nov 4, 2024
b1cb99c
Update README.md
vansin Nov 4, 2024
d7f4750
Update README.md
vansin Nov 4, 2024
3a646fd
Create readme.md
vansin Nov 4, 2024
e12739b
Update task.md
vansin Nov 4, 2024
2a0cbae
Update task.md
vansin Nov 4, 2024
c571168
Update README.md
vansin Nov 5, 2024
67c71d4
Update tasks.md
vansin Nov 6, 2024
b1cf3b9
Update tasks.md
vansin Nov 6, 2024
4730a34
update prompt task (#2418)
yzfly Nov 6, 2024
92c9f39
Camp4Tasks_InternIntro (#2275)
Abelmx Nov 6, 2024
b0e2b31
Update readme.md
vansin Nov 6, 2024
3ba99b8
Update practice.md
vansin Nov 7, 2024
4ae792e
Update task.md
vansin Nov 7, 2024
b567b2f
Update task.md
vansin Nov 7, 2024
102f081
Update task.md
vansin Nov 7, 2024
61cec19
Update task.md
vansin Nov 7, 2024
33a364b
Update README.md
vansin Nov 7, 2024
a96e8b7
Update README.md
vansin Nov 7, 2024
36e6670
Update task.md
vansin Nov 7, 2024
bbfeab4
Update tasks.md
vansin Nov 8, 2024
74ca0ec
Update readme.md (#2502)
Jun-Howie Nov 9, 2024
d0e26a8
Update assistant_Tuner.jsonl (#2509)
JimmyMa99 Nov 9, 2024
e28dfdb
Update readme_api.md
vansin Nov 10, 2024
50c30ea
Update readme_api.md (#2508)
Alannikos Nov 10, 2024
afc0ee8
Update task.md
vansin Nov 11, 2024
2683b75
Update task.md
vansin Nov 11, 2024
2cab8d7
Update task.md
vansin Nov 11, 2024
b44a905
update readme (#2531)
Alannikos Nov 13, 2024
5b7e212
Update task.md
vansin Nov 15, 2024
2d193ed
Update task.md
vansin Nov 15, 2024
9074bba
fix: add " to docs maas (#2594)
blankanswer Nov 16, 2024
73fc0cc
fix the error caused by model's path (#2596)
Alannikos Nov 16, 2024
e0a0407
增加Lagent部分的Task (#2611)
colorfulandcjy0806 Nov 18, 2024
ec23385
Create readme.md
vansin Nov 18, 2024
e3ef677
Update readme.md
vansin Nov 18, 2024
9991fdd
Create task.md
vansin Nov 18, 2024
fe1c23d
Update README.md
vansin Nov 18, 2024
88c89f9
Update README.md
vansin Nov 18, 2024
a4ffd76
lmdeploy 部署量化出现错误的解决方法,测试有效 (#2625)
boshallen Nov 19, 2024
bd518fc
Update readme.md
vansin Nov 19, 2024
cf98a32
Update readme_api.md
vansin Nov 21, 2024
9c76dae
Update readme_api.md
vansin Nov 21, 2024
775ce8d
Update readme_api.md
vansin Nov 21, 2024
c4e8ad3
Camp4 (#2645)
charleson98 Nov 21, 2024
f09bd00
Update python task (#2651)
charleson98 Nov 21, 2024
67b7cee
Update README.md
vansin Nov 22, 2024
e78faa8
Update README.md (#2659)
JimmyMa99 Nov 22, 2024
f9dfbf8
Update change_script.py (#2660)
JimmyMa99 Nov 22, 2024
257d25a
更新Lagent的readme.md (#2643)
colorfulandcjy0806 Nov 22, 2024
6093a36
新增Lagent文档、Task的链接 (#2664)
colorfulandcjy0806 Nov 22, 2024
88d9ae5
更新标题Lagent:从零搭建你的 Multi-Agent ,同时修改了readme的第一张图 (#2669)
colorfulandcjy0806 Nov 23, 2024
a93259e
fix docs maas (#2670)
blankanswer Nov 24, 2024
12a43e9
显存计算公式存在错误 (#2627)
lzl-am Nov 24, 2024
9cd5476
更新了和风天气API的注册说明 (#2677)
colorfulandcjy0806 Nov 25, 2024
cdad0e6
Update readme.md (#2680)
colorfulandcjy0806 Nov 25, 2024
df61fda
Update README.md (#2682)
colorfulandcjy0806 Nov 25, 2024
5a0c78e
Update README.md
vansin Nov 29, 2024
1b2ef18
update Mindsearch docs (#2750)
blankanswer Dec 6, 2024
ed2a071
Update README.md (#2756)
blankanswer Dec 6, 2024
08de287
Update task.md
vansin Dec 6, 2024
455ac30
Update readme.md (#2759)
blankanswer Dec 6, 2024
6b08306
Update README.md
vansin Dec 7, 2024
0500cf8
Update get_data.py (#2762)
JimmyMa99 Dec 7, 2024
557d8b2
Update task.md
vansin Dec 7, 2024
6128562
Update task.md
vansin Dec 7, 2024
ab046ef
[Doc] Camp4 internvl update (#2772)
Control-derek Dec 8, 2024
00c12fa
Update readme.md
vansin Dec 8, 2024
167ed47
Update README.md
vansin Dec 8, 2024
a434e77
Update README.md (#2784)
JimmyMa99 Dec 9, 2024
097a652
Create requirements.txt (#2783)
JimmyMa99 Dec 9, 2024
311d3f6
Update README.md (#2786)
JimmyMa99 Dec 10, 2024
5ef5ae5
Update task.md
vansin Dec 13, 2024
611b262
Create readme.md
vansin Dec 16, 2024
aee9419
Create task.me
vansin Dec 16, 2024
7d0aaa7
Rename task.me to task.md
vansin Dec 16, 2024
a2334ee
Update README.md
vansin Dec 16, 2024
bc2ecbb
Camp4 (#2831)
Control-derek Dec 16, 2024
8aaa9ea
Update easy_README.md
vansin Dec 17, 2024
4c641a2
Update easy_README.md
vansin Dec 17, 2024
793d354
Update mass docs (#2839)
blankanswer Dec 19, 2024
4face0e
Update task.md
vansin Dec 23, 2024
e4d2408
Update task.md
vansin Dec 23, 2024
fa24fe9
Update task.md
vansin Dec 23, 2024
00ca461
Update task.md
vansin Dec 23, 2024
c35e0e5
Update README.md (#2855)
JimmyMa99 Dec 25, 2024
efcdf9b
Update readme.md (#2860)
fresh-little-lemon Dec 28, 2024
139c4cd
修改Opencompass中的模型名称错误以及解决本地评测环境报错问题 (#2854)
fresh-little-lemon Dec 28, 2024
c928327
Update lagent tutorial (#2868)
fresh-little-lemon Jan 5, 2025
173da3d
Create readme.md
vansin Jan 6, 2025
cbccccd
Update README.md
vansin Jan 6, 2025
6c38ffd
Update readme.md
vansin Jan 6, 2025
6133655
Update task.md
vansin Jan 7, 2025
0be0f73
Update task.md
vansin Jan 7, 2025
a14edb4
Update README.md (#2962)
fresh-little-lemon Feb 6, 2025
9a389c6
Merge branch 'class' of https://github.com/lihongyuan99/Tutorial into…
lihongyuan99 Feb 24, 2025
3b7af1a
add git_camp4_7579_introduction
lihongyuan99 Feb 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Camp4 llamaindex rag (#2015)
  • Loading branch information
blankanswer authored Oct 18, 2024
commit bc04d49eecaa2ce75fd644c3a9b5cb753f72a47f
386 changes: 386 additions & 0 deletions docs/L1/LlamaIndex/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,386 @@
# llamaindex+Internlm2 RAG 实践

<img width="900" alt="img_v3_02fn_136796c2-1adb-429b-8c87-276fc43b483g" src="https://github.com/user-attachments/assets/27b038b6-1b0a-4884-a2b8-847b0b0b0bf9">

Hello大家好,迎来到实战营第四期的llamaindex+Internlm2 RAG课程,本文将分为以下几个部分来介绍,如何使用 LlamaIndex 来部署 InternLM2 1.8B并测试(以 InternStudio 的环境为例)

- 前置知识
- 环境、模型准备
- LlamaIndex HuggingFaceLLM
- LlamaIndex RAG

## 1. 前置知识

正式介绍检索增强生成(Retrieval Augmented Generation,RAG)技术以前,大家不妨想想为什么会出现这样一个技术。
给模型注入新知识的方式,可以简单分为两种方式,一种是内部的,即更新模型的权重,另一个就是外部的方式,给模型注入格外的上下文或者说外部信息,不改变它的的权重。
第一种方式,改变了模型的权重即进行模型训练,这是一件代价比较大的事情,大语言模型具体的训练过程,可以参考[InternLM2技术报告](https://arxiv.org/abs/2403.17297)。
第二种方式,并不改变模型的权重,只是给模型引入格外的信息。类比人类编程的过程,第一种方式相当于你记住了某个函数的用法,第二种方式相当于你阅读函数文档然后短暂的记住了某个函数的用法。
![image](https://github.com/Shengshenlan/tutorial/assets/57640594/5a72331f-1726-4e4e-9a69-75141cfd313e)
对比两种注入知识方式,第二种更容易实现。RAG 正是这种方式。它能够让基础模型实现非参数知识更新,无需训练就可以掌握新领域的知识。本次课程选用了 LlamaIndex 框架。LlamaIndex 是一个上下文增强的 LLM 框架,旨在通过将其与特定上下文数据集集成,增强大型语言模型(LLMs)的能力。它允许您构建应用程序,既利用 LLMs 的优势,又融入您的私有或领域特定信息。

### RAG 效果比对

如图所示,由于`xtuner`是一款比较新的框架, `InternLM2-Chat-1.8B` 训练数据库中并没有收录到它的相关信息。左图中问答均未给出准确的答案。右图未对 `InternLM2-Chat-1.8B` 进行任何增训的情况下,通过 RAG 技术实现的新增知识问答。
![image](https://github.com/Shengshenlan/tutorial/assets/57640594/3785a449-770a-45e1-a7ea-7cfd33a00076)

## 2. 环境、模型准备

### 2.1 配置基础环境

这里以在 [Intern Studio](https://studio.intern-ai.org.cn/) 服务器上部署 LlamaIndex 为例。

首先,打开 `Intern Studio` 界面,点击 **创建开发机** 配置开发机系统。
![image](https://github.com/Shengshenlan/tutorial/assets/57640594/e325d0c1-6816-4ea5-ba4a-f509bdd42323)

填写 `开发机名称` 后,点击 选择镜像 使用 `Cuda11.7-conda` 镜像,然后在资源配置中,使用 `30% A100 * 1` 的选项,然后立即创建开发机器。
![image](https://github.com/Shengshenlan/tutorial/assets/57640594/8c25b923-fda8-4af2-a4dc-2f4cf44845c9)

点击 `进入开发机` 选项。
![image](https://github.com/Shengshenlan/tutorial/assets/57640594/6bc3cde2-6309-4e14-9278-a65cd74d4a3a)

进入开发机后,创建新的 conda 环境,命名为 `llamaindex`,在命令行模式下运行:

```bash
conda create -n llamaindex python=3.10
```

复制完成后,在本地查看环境。

```bash
conda env list
```

结果如下所示。

```bash
# conda environments:
#
base * /root/.conda
llamaindex /root/.conda/envs/llamaindex
```

运行 `conda` 命令,激活 `llamaindex` 然后安装相关基础依赖
**python** 虚拟环境:

```bash
conda activate llamaindex
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia
```

**安装 python 依赖包**

```bash
pip install einops==0.7.0 protobuf==5.26.1
```

环境激活后,命令行左边会显示当前(也就是 `llamaindex` )的环境名称,如下图所示:
![image](https://github.com/Shengshenlan/tutorial/assets/57640594/bcfedc90-0d9d-4679-b1e9-4709b05711f3)

### 2.2 安装 Llamaindex

安装 Llamaindex 和相关的包

```bash
conda activate llamaindex
pip install llama-index==0.10.38 llama-index-llms-huggingface==0.2.0 "transformers[torch]==4.41.1" "huggingface_hub[inference]==0.23.1" huggingface_hub==0.23.1 sentence-transformers==2.7.0 sentencepiece==0.2.0
```

### 2.3 下载 Sentence Transformer 模型

源词向量模型 [Sentence Transformer](https://huggingface.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2):(我们也可以选用别的开源词向量模型来进行 Embedding,目前选用这个模型是相对轻量、支持中文且效果较好的,同学们可以自由尝试别的开源词向量模型)
运行以下指令,新建一个 python 文件

```bash
cd ~
mkdir llamaindex_demo
mkdir model
cd ~/llamaindex_demo
touch download_hf.py
```

打开`download_hf.py` 贴入以下代码

```bash
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 目录下执行该脚本即可自动开始下载:

```bash
cd /root/llamaindex_demo
conda activate llamaindex
python download_hf.py
```

更多关于镜像使用可以移步至 [HF Mirror](https://hf-mirror.com/) 查看。

### 2.4 下载 NLTK 相关资源

我们在使用开源词向量模型构建开源词向量的时候,需要用到第三方库 `nltk` 的一些资源。正常情况下,其会自动从互联网上下载,但可能由于网络原因会导致下载中断,此处我们可以从国内仓库镜像地址下载相关资源,保存到服务器上。
我们用以下命令下载 nltk 资源并解压到服务器上:

```bash
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 HuggingFaceLLM

运行以下指令,把 `InternLM2 1.8B` 软连接出来

```bash
cd ~/model
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b/ ./
```

运行以下指令,新建一个 python 文件

```bash
cd ~/llamaindex_demo
touch llamaindex_internlm.py
```

打开 llamaindex_internlm.py 贴入以下代码

```python
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)
```

之后运行

```bash
conda activate llamaindex
cd ~/llamaindex_demo/
python llamaindex_internlm.py
```

结果为:
![image](https://github.com/Shengshenlan/tutorial/assets/57640594/ac3f481d-cc5b-44be-b281-2cab7289f027)
回答的效果并不好,并不是我们想要的 xtuner。

## 4. LlamaIndex RAG

安装 `LlamaIndex` 词嵌入向量依赖

```bash
conda activate llamaindex
pip install llama-index-embeddings-huggingface==0.2.0 llama-index-embeddings-instructor==0.1.3
```

```bash
在这一步请确定llama-index-embeddings-huggingface安装成功
如果存在not found错误,请重新安装
pip install llama-index-embeddings-huggingface==0.2.0
确保 huggingface_hub==0.23.1
```

运行以下命令,获取知识库

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

运行以下指令,新建一个 python 文件

```bash
cd ~/llamaindex_demo
touch llamaindex_RAG.py
```

打开`llamaindex_RAG.py`贴入以下代码

```python

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)
```

之后运行

```bash
conda activate llamaindex
cd ~/llamaindex_demo/
python llamaindex_RAG.py
```

结果为:
![image](https://github.com/Shengshenlan/tutorial/assets/57640594/8d363e3f-edf9-4573-bd58-5b54fd8981df)

借助 RAG 技术后,就能获得我们想要的答案了。

## 5. LlamaIndex web

运行之前首先安装依赖

```shell
pip install streamlit==1.36.0
```

运行以下指令,新建一个 python 文件

```bash
cd ~/llamaindex_demo
touch app.py
```

打开`app.py`贴入以下代码

```python
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 HuggingFaceLLM

st.set_page_config(page_title="llama_index_demo", page_icon="🦜🔗")
st.title("llama_index_demo")

# 初始化模型
@st.cache_resource
def init_models():
embed_model = HuggingFaceEmbedding(
model_name="/root/model/sentence-transformer"
)
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}
)
Settings.llm = llm

documents = 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_click=clear_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)
```

之后运行

```bash
streamlit run app.py
```

然后在命令行点击,红框里的 url。

![image](https://github.com/user-attachments/assets/dc1e0e8c-bec3-49ad-b522-44f14c64ea01)

即可进入以下网页,然后就可以开始尝试问问题了。

![1721404075545](https://github.com/user-attachments/assets/1f55ae89-2568-4cd5-8e50-564ed032d275)

询问结果为:

![1721404159357](https://github.com/user-attachments/assets/6b479645-3bf6-4b94-b8e9-df4ea2e18530)

## 6. 小结

恭喜你,成功通关本关卡!继续加油!你成功使用 LlamaIndex 运行了 InternLM-2 1.8B 模型,并实现了知识库的构建与检索。这为管理和利用大规模知识库提供了强大的工具和方法。接下来,可以进一步优化和扩展功能,以满足更复杂的需求。

## 7. 作业

作业请访问[作业](./task.md)。
10 changes: 10 additions & 0 deletions docs/L1/LlamaIndex/task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Llamaindex RAG 实践

## 基础任务 (完成此任务即完成闯关)

- **任务要求**:基于 LlamaIndex 构建自己的 RAG 知识库,寻找一个问题 A 在使用 LlamaIndex 之前 InternLM2-Chat-1.8B 模型不会回答,借助 LlamaIndex 后 InternLM2-Chat-1.8B 模型具备回答 A 的能力,截图保存。

## 闯关材料提交 (完成任务并且提交材料时为闯关成功)

- 请将作业发布到知乎、CSDN 等任一社交媒体,将作业链接提交到以下问卷,助教老师批改后将获得 100 算力点奖励!!!
- 提交地址:https://aicarrier.feishu.cn/share/base/form/shrcnUqshYPt7MdtYRTRpkiOFJd