茴香豆 RAG 平台实操-书生浦语大模型实战营第二期第3节作业
书生浦语大模型实战营第二期第3节作业
本页面包括实战营第二期第三节作业的全部操作步骤。如果需要知道RAG相关知识请访问学习笔记。
作业要求
-
基础作业
-
进阶作业 - 二选一
-
大作业项目选题
- A.【工程方向】 参与贡献茴香豆前端,将茴香豆助手部署到下列平台:Github issue、Discord、钉钉、X
- B.【应用方向】 茴香豆RAG-Agent:应用茴香豆建立一个 ROS2 的机器人Agent
- C.【算法方向】 茴香豆多模态:参与茴香豆多模态的工作
在茴香豆 Web 版中创建自己领域的知识问答助手
这个作业其实是比较简单的,对着视频教程做就好了。这里也为了凑够400字给出一个文字版的教程。
注册知识库
首先我们打开茴香豆的Web 版,如下图:
然后下方输入知识库名称和密码。第一次可以自己创建:
创建完成后是这样的:
导入检索文档
接着点击“查看或上传”上传自己的PDF。按照要求我们上传了一个STM32教程。
等待上传结束,界面会变化的。
开始聊天
之后就可以开始聊天了:
好慢啊。。。然后就崩掉了!!!提示内部错误
想了想,我重新简历个库,终于成功了:
不过,总感觉这么简单的例子不使用RAG也能答出来。还有,模型生成的回答并没有与书中的代码重复或接近。
所以,我从刚才STM32的PDF中取出了几页做成文件加了进去,换了个例子问它:
嘿嘿嘿。。。
挑了个问题:
书中的内容是这样的:
它的回答是这样的:
感觉AI在偷懒,有意回避写代码这个工作!!!于是,我直接和AI说我要代码:
对照一下文档,,,只能说RAG的效果一言难尽。。。它的回答可能是正确的,但是它并没有按照我给出的文档来。
这里,我创建的环境密码是123456,欢迎大家体验!
在 InternLM Studio
上部署茴香豆技术助手
这个作业需要使用的环境是30%A100的环境。
配置环境
在上一个作业中,我们已经能够很熟练地完成这些步骤了,这里简单过一下。首先是创建conda环境:
studio-conda -o internlm-base -t InternLM2_Huixiangdou
conda activate InternLM2_Huixiangdou
pip install protobuf==4.25.3 accelerate==0.28.0 aiohttp==3.9.3 auto-gptq==0.7.1 bcembedding==0.1.3 beautifulsoup4==4.8.2 einops==0.7.0 faiss-gpu==1.7.2 langchain==0.1.14 loguru==0.7.2 lxml_html_clean==0.1.0 openai==1.16.1 openpyxl==3.1.2 pandas==2.2.1 pydantic==2.6.4 pymupdf==1.24.1 python-docx==1.1.0 pytoml==0.1.21 readability-lxml==0.8.1 redis==5.0.3 requests==2.31.0 scikit-learn==1.4.1.post1 sentence_transformers==2.2.2 textract==1.6.5 tiktoken==0.6.0 transformers==4.39.3 transformers_stream_generator==0.0.5 unstructured==0.11.2
点击查看`InternLM2_Huixiangdou`环境中的所有软件包
# packages in environment at /root/.conda/envs/InternLM2_Huixiangdou:
#
# Name Version Build Channel
_libgcc_mutex 0.1 main defaults
_openmp_mutex 5.1 1_gnu defaults
accelerate 0.28.0 pypi_0 pypi
aiohttp 3.9.3 pypi_0 pypi
aiosignal 1.3.1 pypi_0 pypi
annotated-types 0.6.0 pypi_0 pypi
anyio 4.3.0 pypi_0 pypi
argcomplete 1.10.3 pypi_0 pypi
asttokens 2.4.1 pypi_0 pypi
async-timeout 4.0.3 pypi_0 pypi
attrs 23.2.0 pypi_0 pypi
auto-gptq 0.7.1 pypi_0 pypi
backoff 2.2.1 pypi_0 pypi
bcembedding 0.1.3 pypi_0 pypi
beautifulsoup4 4.8.2 pypi_0 pypi
blas 1.0 mkl defaults
brotli-python 1.0.9 py310h6a678d5_7 defaults
bzip2 1.0.8 h7b6447c_0 defaults
ca-certificates 2023.08.22 h06a4308_0 defaults
certifi 2023.11.17 py310h06a4308_0 defaults
cffi 1.16.0 py310h5eee18b_0 defaults
chardet 3.0.4 pypi_0 pypi
charset-normalizer 2.0.4 pyhd3eb1b0_0 defaults
click 8.1.7 pypi_0 pypi
comm 0.2.2 pypi_0 pypi
compressed-rtf 1.0.6 pypi_0 pypi
cryptography 41.0.3 py310hdda0065_0 defaults
cssselect 1.2.0 pypi_0 pypi
cuda-cudart 11.7.99 0 nvidia
cuda-cupti 11.7.101 0 nvidia
cuda-libraries 11.7.1 0 nvidia
cuda-nvrtc 11.7.99 0 nvidia
cuda-nvtx 11.7.91 0 nvidia
cuda-runtime 11.7.1 0 nvidia
dataclasses-json 0.6.4 pypi_0 pypi
datasets 2.18.0 pypi_0 pypi
debugpy 1.8.1 pypi_0 pypi
decorator 5.1.1 pypi_0 pypi
dill 0.3.8 pypi_0 pypi
distro 1.9.0 pypi_0 pypi
docx2txt 0.8 pypi_0 pypi
ebcdic 1.1.1 pypi_0 pypi
einops 0.7.0 pypi_0 pypi
emoji 2.11.0 pypi_0 pypi
et-xmlfile 1.1.0 pypi_0 pypi
exceptiongroup 1.2.0 pypi_0 pypi
executing 2.0.1 pypi_0 pypi
extract-msg 0.28.7 pypi_0 pypi
faiss-gpu 1.7.2 pypi_0 pypi
ffmpeg 4.3 hf484d3e_0 pytorch
filelock 3.13.1 py310h06a4308_0 defaults
filetype 1.2.0 pypi_0 pypi
freetype 2.12.1 h4a9f257_0 defaults
frozenlist 1.4.1 pypi_0 pypi
fsspec 2024.2.0 pypi_0 pypi
gekko 1.1.0 pypi_0 pypi
giflib 5.2.1 h5eee18b_3 defaults
gmp 6.2.1 h295c915_3 defaults
gmpy2 2.1.2 py310heeb90bb_0 defaults
gnutls 3.6.15 he1e5248_0 defaults
greenlet 3.0.3 pypi_0 pypi
h11 0.14.0 pypi_0 pypi
httpcore 1.0.5 pypi_0 pypi
httpx 0.27.0 pypi_0 pypi
huggingface-hub 0.22.2 pypi_0 pypi
idna 3.4 py310h06a4308_0 defaults
imapclient 2.1.0 pypi_0 pypi
intel-openmp 2023.1.0 hdb19cb5_46306 defaults
ipykernel 6.29.4 pypi_0 pypi
ipython 8.23.0 pypi_0 pypi
jedi 0.19.1 pypi_0 pypi
jinja2 3.1.2 py310h06a4308_0 defaults
joblib 1.3.2 pypi_0 pypi
jpeg 9e h5eee18b_1 defaults
jsonpatch 1.33 pypi_0 pypi
jsonpointer 2.4 pypi_0 pypi
jupyter-client 8.6.1 pypi_0 pypi
jupyter-core 5.7.2 pypi_0 pypi
lame 3.100 h7b6447c_0 defaults
langchain 0.1.14 pypi_0 pypi
langchain-community 0.0.31 pypi_0 pypi
langchain-core 0.1.40 pypi_0 pypi
langchain-text-splitters 0.0.1 pypi_0 pypi
langdetect 1.0.9 pypi_0 pypi
langsmith 0.1.40 pypi_0 pypi
lcms2 2.12 h3be6417_0 defaults
ld_impl_linux-64 2.38 h1181459_1 defaults
lerc 3.0 h295c915_0 defaults
libcublas 11.10.3.66 0 nvidia
libcufft 10.7.2.124 h4fbf590_0 nvidia
libcufile 1.8.1.2 0 nvidia
libcurand 10.3.4.101 0 nvidia
libcusolver 11.4.0.1 0 nvidia
libcusparse 11.7.4.91 0 nvidia
libdeflate 1.17 h5eee18b_1 defaults
libffi 3.4.4 h6a678d5_0 defaults
libgcc-ng 11.2.0 h1234567_1 defaults
libgomp 11.2.0 h1234567_1 defaults
libiconv 1.16 h7f8727e_2 defaults
libidn2 2.3.4 h5eee18b_0 defaults
libnpp 11.7.4.75 0 nvidia
libnvjpeg 11.8.0.2 0 nvidia
libpng 1.6.39 h5eee18b_0 defaults
libstdcxx-ng 11.2.0 h1234567_1 defaults
libtasn1 4.19.0 h5eee18b_0 defaults
libtiff 4.5.1 h6a678d5_0 defaults
libunistring 0.9.10 h27cfd23_0 defaults
libuuid 1.41.5 h5eee18b_0 defaults
libwebp 1.3.2 h11a3e52_0 defaults
libwebp-base 1.3.2 h5eee18b_0 defaults
loguru 0.7.2 pypi_0 pypi
lxml 5.2.1 pypi_0 pypi
lxml-html-clean 0.1.0 pypi_0 pypi
lz4-c 1.9.4 h6a678d5_0 defaults
markupsafe 2.1.1 py310h7f8727e_0 defaults
marshmallow 3.21.1 pypi_0 pypi
matplotlib-inline 0.1.6 pypi_0 pypi
mkl 2023.1.0 h213fc3f_46344 defaults
mkl-service 2.4.0 py310h5eee18b_1 defaults
mkl_fft 1.3.8 py310h5eee18b_0 defaults
mkl_random 1.2.4 py310hdb19cb5_0 defaults
mpc 1.1.0 h10f8cd9_1 defaults
mpfr 4.0.2 hb69a4c5_1 defaults
mpmath 1.3.0 py310h06a4308_0 defaults
multidict 6.0.5 pypi_0 pypi
multiprocess 0.70.16 pypi_0 pypi
mypy-extensions 1.0.0 pypi_0 pypi
ncurses 6.4 h6a678d5_0 defaults
nest-asyncio 1.6.0 pypi_0 pypi
nettle 3.7.3 hbbd107a_1 defaults
networkx 3.1 py310h06a4308_0 defaults
nltk 3.8.1 pypi_0 pypi
numpy 1.26.2 py310h5f9d8c6_0 defaults
numpy-base 1.26.2 py310hb5e798b_0 defaults
olefile 0.47 pypi_0 pypi
openai 1.16.1 pypi_0 pypi
openh264 2.1.1 h4ff587b_0 defaults
openjpeg 2.4.0 h3ad879b_0 defaults
openpyxl 3.1.2 pypi_0 pypi
openssl 3.0.12 h7f8727e_0 defaults
orjson 3.10.0 pypi_0 pypi
packaging 23.2 pypi_0 pypi
pandas 2.2.1 pypi_0 pypi
parso 0.8.4 pypi_0 pypi
pdfminer-six 20191110 pypi_0 pypi
peft 0.10.0 pypi_0 pypi
pexpect 4.9.0 pypi_0 pypi
pillow 10.0.1 py310ha6cbd5a_0 defaults
pip 23.3.1 py310h06a4308_0 defaults
platformdirs 4.2.0 pypi_0 pypi
prompt-toolkit 3.0.43 pypi_0 pypi
protobuf 4.25.3 pypi_0 pypi
psutil 5.9.8 pypi_0 pypi
ptyprocess 0.7.0 pypi_0 pypi
pure-eval 0.2.2 pypi_0 pypi
pyarrow 15.0.2 pypi_0 pypi
pyarrow-hotfix 0.6 pypi_0 pypi
pycparser 2.21 pyhd3eb1b0_0 defaults
pycryptodome 3.20.0 pypi_0 pypi
pydantic 2.6.4 pypi_0 pypi
pydantic-core 2.16.3 pypi_0 pypi
pygments 2.17.2 pypi_0 pypi
pymupdf 1.24.1 pypi_0 pypi
pymupdfb 1.24.1 pypi_0 pypi
pyopenssl 23.2.0 py310h06a4308_0 defaults
pysocks 1.7.1 py310h06a4308_0 defaults
python 3.10.13 h955ad1f_0 defaults
python-dateutil 2.9.0.post0 pypi_0 pypi
python-docx 1.1.0 pypi_0 pypi
python-iso639 2024.2.7 pypi_0 pypi
python-magic 0.4.27 pypi_0 pypi
python-pptx 0.6.23 pypi_0 pypi
pytoml 0.1.21 pypi_0 pypi
pytorch 2.0.1 py3.10_cuda11.7_cudnn8.5.0_0 pytorch
pytorch-cuda 11.7 h778d358_5 pytorch
pytorch-mutex 1.0 cuda pytorch
pytz 2024.1 pypi_0 pypi
pyyaml 6.0.1 pypi_0 pypi
pyzmq 25.1.2 pypi_0 pypi
rapidfuzz 3.8.1 pypi_0 pypi
readability-lxml 0.8.1 pypi_0 pypi
readline 8.2 h5eee18b_0 defaults
redis 5.0.3 pypi_0 pypi
regex 2023.12.25 pypi_0 pypi
requests 2.31.0 py310h06a4308_0 defaults
rouge 1.0.1 pypi_0 pypi
safetensors 0.4.2 pypi_0 pypi
scikit-learn 1.4.1.post1 pypi_0 pypi
scipy 1.13.0 pypi_0 pypi
sentence-transformers 2.2.2 pypi_0 pypi
sentencepiece 0.2.0 pypi_0 pypi
setuptools 68.0.0 py310h06a4308_0 defaults
six 1.12.0 pypi_0 pypi
sniffio 1.3.1 pypi_0 pypi
sortedcontainers 2.4.0 pypi_0 pypi
soupsieve 2.5 pypi_0 pypi
speechrecognition 3.8.1 pypi_0 pypi
sqlalchemy 2.0.29 pypi_0 pypi
sqlite 3.41.2 h5eee18b_0 defaults
stack-data 0.6.3 pypi_0 pypi
sympy 1.11.1 py310h06a4308_0 defaults
tabulate 0.9.0 pypi_0 pypi
tbb 2021.8.0 hdb19cb5_0 defaults
tenacity 8.2.3 pypi_0 pypi
textract 1.6.5 pypi_0 pypi
threadpoolctl 3.4.0 pypi_0 pypi
tiktoken 0.6.0 pypi_0 pypi
tk 8.6.12 h1ccaba5_0 defaults
tokenizers 0.15.2 pypi_0 pypi
torchaudio 2.0.2 py310_cu117 pytorch
torchtriton 2.0.0 py310 pytorch
torchvision 0.15.2 py310_cu117 pytorch
tornado 6.4 pypi_0 pypi
tqdm 4.66.2 pypi_0 pypi
traitlets 5.14.2 pypi_0 pypi
transformers 4.39.3 pypi_0 pypi
transformers-stream-generator 0.0.5 pypi_0 pypi
typing-inspect 0.9.0 pypi_0 pypi
typing_extensions 4.7.1 py310h06a4308_0 defaults
tzdata 2024.1 pypi_0 pypi
tzlocal 5.2 pypi_0 pypi
unstructured 0.11.2 pypi_0 pypi
urllib3 1.26.18 py310h06a4308_0 defaults
wcwidth 0.2.13 pypi_0 pypi
wheel 0.41.2 py310h06a4308_0 defaults
wrapt 1.16.0 pypi_0 pypi
xlrd 1.2.0 pypi_0 pypi
xlsxwriter 3.2.0 pypi_0 pypi
xxhash 3.4.1 pypi_0 pypi
xz 5.4.2 h5eee18b_0 defaults
yarl 1.9.4 pypi_0 pypi
zlib 1.2.13 h5eee18b_0 defaults
zstd 1.5.5 hc292b87_0 defaults
这一步我在做的时候程序运行了好久啊,建议切到10% 的 A100 去做。
另外需要额外说的是,huixiangdou其实是有自己的requirement.txt
的,比对了一下这里的指令只是额外指定了这些包的版本号(为我们能够成功完成实验操碎了心)
huixiangdou的requirement.txt
如下,可自行与上面的命令进行比对:
accelerate>=0.26.1
aiohttp
auto-gptq
bcembedding
beautifulsoup4
einops
faiss-gpu
langchain>=0.1.12
loguru
lxml_html_clean
openai>=1.0.0
openpyxl
pandas
pydantic>=1.10.13
pymupdf
python-docx
pytoml
readability-lxml
redis
requests
scikit-learn
sentence_transformers==2.2.2
textract
tiktoken
torch>=2.0.0
transformers>=4.37.0
transformers_stream_generator
unstructured
然后是下载模型和茴香豆代码:
cd /root && mkdir models
## 复制BCE模型
ln -s /root/share/new_models/maidalun1020/bce-embedding-base_v1 /root/models/bce-embedding-base_v1
ln -s /root/share/new_models/maidalun1020/bce-reranker-base_v1 /root/models/bce-reranker-base_v1
## 复制大模型参数
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b /root/models/internlm2-chat-7b
# 下载茴香豆源码并指定代码版本
cd /root
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 447c6f7e68a1657fce1c4f7c740ea1700bde0440
我们还需要将源码中的文件替换为自己刚才下载(复制)的文件位置。茴香豆项目在这一块的处理比大模型demo处理得好了很多,我们仅需修改配置文件即可,而不需要修改源代码。
在这里,官方教程给的修改文件方案是使用sed -i
命令。这个命令的作用就是修改某一行的内容。sed
是一个文件编辑命令。我们自己使用其他方式编辑文件效果其实也是一样的。
# 修改用于向量数据库和词嵌入的模型
# 将第6行的内容替换为embedding_model_path = "/root/models/bce-embedding-base_v1"
sed -i '6s#.*#embedding_model_path = "/root/models/bce-embedding-base_v1"#' /root/huixiangdou/config.ini
# 替换第7行的内容以修改用于检索的重排序模型
sed -i '7s#.*#reranker_model_path = "/root/models/bce-reranker-base_v1"#' /root/huixiangdou/config.ini
# 替换第29行的内容以修改本次选用的大模型
sed -i '29s#.*#local_llm_path = "/root/models/internlm2-chat-7b"#' /root/huixiangdou/config.ini
改之前是:
embedding_model_path = "maidalun1020/bce-embedding-base_v1"
reranker_model_path = "maidalun1020/bce-reranker-base_v1"
local_llm_path = "internlm/internlm2-chat-7b"
改之后是:
embedding_model_path = "/root/models/bce-embedding-base_v1"
reranker_model_path = "/root/models/bce-reranker-base_v1"
local_llm_path = "/root/models/internlm2-chat-7b"
这说明,我们使用的大语言模型是internlm2-chat-7b
,使用的embedding_model是网易的bce-embedding-base_v1
,使用的reranker_model
是网易的bce-reranker-base_v1
。
如果我们使用vscode,它的版本管理插件就会以行首标蓝的方式提示我们文件发生变动:
创建知识库
首先下载语料:
cd /root/huixiangdou && mkdir repodir
git clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou
之后,我们向/root/huixiangdou/resource/good_questions.json
中追加一些教程里的内容,更改完成以后/root/huixiangdou/resource/good_questions.json
如下:
再创建一个用于测试拒答流程的问询列表:
echo '[
"huixiangdou 是什么?",
"你好,介绍下自己"
]' > /root/huixiangdou/test_queries.json
在这里,官方教程使用echo
命令将指定的。这个命令的作用就是将后面的参数输出至标准输出流。之后,该命令通过>
将标准输出流重定向至/root/huixiangdou/test_queries.json
文件。
创建完成后/root/huixiangdou/
下会出现如下test_queries.json
文件:
创建向量数据库
# 创建向量数据库存储目录
cd /root/huixiangdou && mkdir workdir
# 分别向量化知识语料、接受问题和拒绝问题中后保存到 workdir
python3 -m huixiangdou.service.feature_store --sample /root/huixiangdou/test_queries.json
这里,数据库向量化的过程用到了LangChain的相关模块(甚至还是一堆过时的API),默认嵌入和重排序模型调用的网易BCE双语模型。完成后,新增的知识向量数据库就存储在 workdir
文件夹下。源码调用的API可能在不久的将来都会被废弃,所以运行的时候报了非常多的LangChainDeprecationWarning
。
避坑指南:assert (len(context) <= context_max_length)
如果只有Warning
的话其实也还好,但是实际上跟着教程走的话程序是会报错的。
我们的解决方法就比较骚气了,直接编辑/root/huixiangdou/huixiangdou/service/retriever.py
的第109行,将 context_max_length
由 16000
改大一些,如修改为 160000
就能不报错。
但是,其实这样做是有问题的。我们的学习笔记里提到过,context_length
超过16k会导致中间丢失现象的出现。但是这里为了完成作业先这样吧。
运行结束后会报一个信息非常长的warning,但是其实此时知识库已经搭建完成了。最后的输出如下图:
运行茴香豆知识助手
我们已经提取了知识库特征,并创建了对应的向量数据库。现在,让我们来测试一下效果。
我们更改/root/huixiangdou/huixiangdou/main.py
第74行的queries
。
之后再运行/root/huixiangdou/huixiangdou/main.py
:
# 运行茴香豆
cd /root/huixiangdou/
python3 -m huixiangdou.main --standalone
运行结果为:
04/08/2024 20:52:56 - [INFO] -aiohttp.access->>> 127.0.0.1 [08/Apr/2024:20:52:33 +0800] "POST /inference HTTP/1.1" 200 2369 "-" "python-requests/2.31.0"
2024-04-08 20:52:56.505 | INFO | __main__:lark_send_only:79 - ErrorCode.SUCCESS, huixiangdou 是什么?, HuixiangDou 是一个基于 LLM(大型语言模型)的群组聊天助手。它使用两阶段管道来处理群组聊天场景,以回答用户问题,而不会导致信息过载。该工具的优点包括:
1. 两阶段管道:HuixiangDou 使用一个两阶段管道来处理群组聊天。首先,它使用一个预训练的模型来快速判断一个消息是否需要被处理。如果消息需要被处理,它将使用另一个模型来生成回答。这种设计可以避免信息过载,并提高处理效率。
2. 低成本:HuixiangDou 只需要 1.5GB 的内存,并且不需要进行训练,因此它的成本相对较低。
3. 完整套件:HuixiangDou 提供了 Web、Android 和管道源代码的完整套件,这些代码是工业级和商业上可行的。
4. 运行场景:HuixiangDou 已经在多个场景中运行,包括 WeChat 和 Feishu 群组。
5. 开源:HuixiangDou 的源代码是开源的,并且可以在 [OpenXLab](https://openxlab.org.cn/apps/detail/tpoisonooo/huixiangdou-web) 上使用,用户可以轻松地构建自己的知识助手,而无需编写任何代码。
HuixiangDou 的更多信息可以在 [arxiv2401.08772](https://arxiv.org/abs/2401.08772) 论文中找到。, ['README.md']
模型找到了第一个问题的答案,也找到了第二个问题的答案:
2024-04-08 20:53:44.837 | INFO | __main__:lark_send_only:79 - ErrorCode.SUCCESS, 茴香豆怎么部署到微信群, 要部署茴香豆到微信群,请按照以下步骤操作:
1. __安装茴香豆__:
- 首先,您需要从 GitHub 上下载茴香豆的源代码。
- 在您的计算机上安装 Python 3.8 或更高版本。
- 使用 `pip` 安装茴香豆的依赖项:`pip install -r requirements.txt`。
2. __准备数据__:
- 您需要为茴香豆提供一些数据,例如问题、答案和相关知识。
- 将数据整理成 JSON 格式,并保存为 `data.json` 文件。
3. __配置茴香豆__:
- 打开 `config.ini` 文件,并根据您的需求配置参数。
- 配置 `model` 参数,以选择您要使用的模型。
- 配置 `data` 参数,以指定您要使用的数据文件。
- 配置 `log` 参数,以指定日志文件的路径。
4. __运行茴香豆__:
- 在终端中,导航到茴香豆的根目录。
- 运行 `python huixiangdou.py` 启动茴香豆。
- 茴香豆将开始处理数据,并准备回答用户的问题。
5. __集成到微信群__:
- 在您的微信中,创建一个新的群聊。
- 将茴香豆的 QQ 号添加到该群聊中。
- 茴香豆将开始接收来自微信群的消息,并尝试回答用户的问题。
6. __测试和优化__:
- 测试茴香豆的性能,并根据需要进行调整。
- 您可以通过添加更多数据、调整参数或使用更高级的模型来提高茴香豆的性能。
请注意,以上步骤仅提供了一个基本的部署流程,您可能需要根据您的具体需求进行一些调整。同时,为了确保茴香豆的正常运行,请确保您的计算机具有足够的计算资源,并且您的数据集是干净、有组织且格式正确的。, ['README_zh.md']
模型将第三个问题判断为“不相关问题”:
2024-04-08 20:53:46.212 | INFO | huixiangdou.service.llm_server_hybrid:generate_response:519 - ('“今天天气怎么样?”\n请仔细阅读以上内容,判断句子是否是个有主题的疑问句,结果用 0~10 表示。直接提供得分不要解释。\n判断标准:有主语谓语宾语并且是疑问句得 10 分;缺少主谓宾扣分;陈述句直接得 0 分;不是疑问句直接得 0 分。直接提供得分不要解释。', '根据给定的标准,"今天天气怎么样?" 是一个有主语、谓语和宾语,并且是疑问句的句子。因此,它的得分是 10 分。')
2024-04-08 20:53:46.410 | INFO | __main__:lark_send_only:79 - ErrorCode.UNRELATED, 今天天气怎么样?, , ['HuixiangDou.pdf']
这里仍然提供教程里给出的InternLM2-Chat-7B
的关于 huixiangdou
问题的原始输出做一个对比,说明RAG是很有用的:
作业运行截图
这次的作业只要求回答一个问题,所以我们将main.py
第74行的queries
改为["茴香豆怎么部署到微信群"]
并运行。运行的全部输出为:
进阶作业:部署个人工作助手
先说一下为什么选A题吧。B题其实不难,但是使用什么指标评定改进效果?我还没有想好。所以就选择了A题。
在这里,我们将基于茴香豆的Web版搭建垂直领域问答助手,并将其部署至飞书。步骤如下:
-
进入飞书开放平台,创建企业自建应用
-
点击确定后稍等。进入机器人主页后点击“凭证与基础信息”
-
进去之后复制App ID和Secret
-
在茴香豆Web 版中输入知识库和密码,上传文档进行初步测试后,点击“零开发集成飞书”,在弹出的对话框中将先前复制的App ID和Secret输入至1和2处,并复制3和4处的内容备用。
-
在飞书机器人主页点击“事件与回调 | 加密策略”,将步骤4中的3和4分别填进飞书中的
Encrypt Key
和Verification Token
;
-
将步骤4中的6处飞书事件请求地址填入飞书后台的
开发配置-事件与回调tab-事件配置
中
-
点击“添加事件”,搜索“接收消息”
-
点击“权限管理”,申请开通权限:
im:chat:readonly
和im:message:send_as_bot
:
-
发布应用,创建应用版本
啪的一下,很快啊,就通过审核了。
-
记得给机器人添加机器人能力
-
创建群聊,注意群后缀要改为步骤4中5处的后缀,再将刚刚创建并发布的应用机器人添加到群聊中。
-
实际上我后来发消息以后机器人没反应,我才意识到这里需要开通更多的权限。事件与回调这一块要好好配。
-
我现在只是随便问问如何编程,它就直接照着文档开始教我如何使用 Quartus 了,因为我给的文档里面只有Quartus 。这就是RAG。
个人助手问答截图
显存使用
建立向量数据库时,使用的显存大小为:
最后使用茴香豆推理时,使用的显存大小为: