大語言模型-6.茴香豆RAG平臺實操
書生浦語大模型實戰營第二期第三節作業
本頁面包括實戰營第二期第三節作業的全部操作步驟。如果需要知道RAG相關知識請訪問學習筆記。
作業要求
-
基礎作業
- 在茴香豆 Web 版中建立自己領域的知識問答助手
- 參考影片零程式設計玩轉大模型,學習茴香豆部署群聊助手
- 完成不少於 400 字的筆記 + 線上茴香豆助手對話截圖(不少於5輪)
- (可選)參考 程式碼 在自己的伺服器部署茴香豆 Web 版
- 點選跳轉操作步驟
- 點選跳轉執行結果
- 在
InternLM Studio
上部署茴香豆技術助手- 根據教程文件搭建
茴香豆技術助手
,針對問題"茴香豆怎麼部署到微信群?"進行提問- 點選跳轉操作步驟
- 點選跳轉執行結果
- 完成不少於 400 字的筆記 + 截圖
- 根據教程文件搭建
- 在茴香豆 Web 版中建立自己領域的知識問答助手
-
進階作業 - 二選一
- A.【應用方向】 結合自己擅長的領域知識(遊戲、法律、電子等)、專業背景,搭建個人工作助手或者垂直領域問答助手,參考茴香豆官方文件,部署到下列任一平臺。
- 飛書、微信
- 可以使用 茴香豆 Web 版 或 InternLM Studio 雲端伺服器部署
- 涵蓋部署全過程的作業報告和個人助手問答截圖
- 點選跳轉操作步驟
- 點選跳轉執行結果
- B.【演算法方向】嘗試修改
good_questions.json
、除錯 prompt 或應用其他 NLP 技術,如其他 chunk 方法,提高個人工作助手的表現。- 完成不少於 400 字的筆記 ,記錄自己的嘗試和除錯思路,涵蓋全過程和改進效果截圖
- A.【應用方向】 結合自己擅長的領域知識(遊戲、法律、電子等)、專業背景,搭建個人工作助手或者垂直領域問答助手,參考茴香豆官方文件,部署到下列任一平臺。
-
大作業專案選題
- 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。
個人助手問答截圖
視訊記憶體使用
建立向量資料庫時,使用的視訊記憶體大小為:
最後使用茴香豆推理時,使用的視訊記憶體大小為: