茴香豆RAG平臺實操-書生浦語大模型實戰營第二期第三節作業&大語言模型6

vanilla阿草發表於2024-04-08

大語言模型-6.茴香豆RAG平臺實操

書生浦語大模型實戰營第二期第三節作業

本頁面包括實戰營第二期第三節作業的全部操作步驟。如果需要知道RAG相關知識請訪問學習筆記

作業要求

  • 基礎作業

    1. 茴香豆 Web 版中建立自己領域的知識問答助手
      • 參考影片零程式設計玩轉大模型,學習茴香豆部署群聊助手
      • 完成不少於 400 字的筆記 + 線上茴香豆助手對話截圖(不少於5輪)
      • (可選)參考 程式碼 在自己的伺服器部署茴香豆 Web 版
        • 點選跳轉操作步驟
        • 點選跳轉執行結果
    2. InternLM Studio 上部署茴香豆技術助手
      • 根據教程文件搭建 茴香豆技術助手,針對問題"茴香豆怎麼部署到微信群?"進行提問
        • 點選跳轉操作步驟
        • 點選跳轉執行結果
      • 完成不少於 400 字的筆記 + 截圖
  • 進階作業 - 二選一

    • A.【應用方向】 結合自己擅長的領域知識(遊戲、法律、電子等)、專業背景,搭建個人工作助手或者垂直領域問答助手,參考茴香豆官方文件,部署到下列任一平臺。
      • 飛書、微信
      • 可以使用 茴香豆 Web 版 或 InternLM Studio 雲端伺服器部署
      • 涵蓋部署全過程的作業報告和個人助手問答截圖
        • 點選跳轉操作步驟
        • 點選跳轉執行結果
    • B.【演算法方向】嘗試修改 good_questions.json、除錯 prompt 或應用其他 NLP 技術,如其他 chunk 方法,提高個人工作助手的表現。
      • 完成不少於 400 字的筆記 ,記錄自己的嘗試和除錯思路,涵蓋全過程和改進效果截圖
  • 大作業專案選題

    • A.【工程方向】 參與貢獻茴香豆前端,將茴香豆助手部署到下列平臺:Github issue、Discord、釘釘、X
    • B.【應用方向】 茴香豆RAG-Agent:應用茴香豆建立一個 ROS2 的機器人Agent
    • C.【演算法方向】 茴香豆多模態:參與茴香豆多模態的工作

茴香豆 Web 版中建立自己領域的知識問答助手

這個作業其實是比較簡單的,對著影片教程做就好了。這裡也為了湊夠400字給出一個文字版的教程。

註冊知識庫

首先我們開啟茴香豆的Web 版,如下圖:

茴香豆的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_length16000 改大一些,如修改為 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是很有用的:

InternLM2-Chat-7B

作業執行截圖

這次的作業只要求回答一個問題,所以我們將main.py第74行的queries改為["茴香豆怎麼部署到微信群"]並執行。執行的全部輸出為:

茴香豆作業

進階作業:部署個人工作助手

先說一下為什麼選A題吧。B題其實不難,但是使用什麼指標評定改進效果?我還沒有想好。所以就選擇了A題。

在這裡,我們將基於茴香豆的Web版搭建垂直領域問答助手,並將其部署至飛書。步驟如下:

  1. 進入飛書開放平臺,建立企業自建應用

  2. 點選確定後稍等。進入機器人主頁後點選“憑證與基礎資訊”

  3. 進去之後複製App ID和Secret

  4. 在茴香豆Web 版中輸入知識庫和密碼,上傳文件進行初步測試後,點選“零開發整合飛書”,在彈出的對話方塊中將先前複製的App ID和Secret輸入至1和2處,並複製3和4處的內容備用。

  5. 在飛書機器人主頁點選“事件與回撥 | 加密策略”,將步驟4中的3和4分別填進飛書中的 Encrypt KeyVerification Token

  6. 將步驟4中的6處飛書事件請求地址填入飛書後臺的開發配置-事件與回撥tab-事件配置

  7. 點選“新增事件”,搜尋“接收訊息”

  8. 點選“許可權管理”,申請開通許可權:im:chat:readonlyim:message:send_as_bot

  9. 釋出應用,建立應用版本

啪的一下,很快啊,就透過稽核了。

  1. 記得給機器人新增機器人能力

  2. 建立群聊,注意群后綴要改為步驟4中5處的字尾,再將剛剛建立併發布的應用機器人新增到群聊中。

  3. 實際上我後來發訊息以後機器人沒反應,我才意識到這裡需要開通更多的許可權。事件與回撥這一塊要好好配。

  4. 我現在只是隨便問問如何程式設計,它就直接照著文件開始教我如何使用 Quartus 了,因為我給的文件裡面只有Quartus 。這就是RAG。

個人助手問答截圖

視訊記憶體使用

建立向量資料庫時,使用的視訊記憶體大小為:

建庫gpu

最後使用茴香豆推理時,使用的視訊記憶體大小為:

推理gpu

相關文章