书生浦语大模型实战营第二期第3节作业

本页面包括实战营第二期第三节作业的全部操作步骤。如果需要知道RAG相关知识请访问学习笔记

作业要求

  • 基础作业

    1. 茴香豆 Web 版中创建自己领域的知识问答助手

    2. InternLM Studio 上部署茴香豆技术助手
  • 进阶作业 - 二选一

    • A.【应用方向】 结合自己擅长的领域知识(游戏、法律、电子等)、专业背景,搭建个人工作助手或者垂直领域问答助手,参考茴香豆官方文档,部署到下列任一平台。

    • B.【算法方向】尝试修改 good_questions.json、调试 prompt 或应用其他 NLP 技术,如其他 chunk 方法,提高个人工作助手的表现。
      • 完成不少于 400 字的笔记 ,记录自己的尝试和调试思路,涵盖全过程和改进效果截图
  • 大作业项目选题

    • 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_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是很有用的:

作业运行截图

这次的作业只要求回答一个问题,所以我们将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。



个人助手问答截图

显存使用

建立向量数据库时,使用的显存大小为:

最后使用茴香豆推理时,使用的显存大小为:

茴香豆 RAG 平台实操-书生浦语大模型实战营第二期第3节作业的更多相关文章

  1. SFUD+FAL+EasyFlash典型场景需求分析,并记一次实操记录

    SFUD+FAL+EasyFlash典型场景需求分析:用整个flash存储数据,上千条数据,读取得时候用easyflash很慢,估计要检索整个flash太慢了. 改进方法:分区检索. 1存数据时,根据 ...

  2. 号外号外:9月13号《Speed-BI云平台案例实操--十分钟做报表》开讲了

    引言:如何快速分析纷繁复杂的数据?如何快速做出老板满意的报表?如何快速将Speed-BI云平台运用到实际场景中?         本课程将通过各行各业案例背景,将Speed-BI云平台运用到实际场景中 ...

  3. 6.3 Pandora 实操 - 数据立方

    简介 数据立方是适用于大规模实时数据(每天百亿条,10TB+ 级别数据)查询与分析的数据库系统,提供交互式的访问数据的能力,支持数据过滤.分组.聚合,实现亚秒级以内对亿行级别的数据表进行多维探索分析. ...

  4. 【Social listening实操】作为一个合格的“增长黑客”,你还得重视外部数据的分析!

    本文转自知乎 作者:苏格兰折耳喵 ----------------------------------------------------- 在本文中,作者引出了"外部数据"这一概 ...

  5. 动手实操:如何用 Python 实现人脸识别,证明这个杨幂是那个杨幂?

    当前,人脸识别应用于许多领域,如支付宝的用户认证,许多的能识别人心情的 AI,也就是人的面部表情,还有能分析人的年龄等等,而这里面有着许多的难度,在这里我想要分享的是一个利用七牛 SDK 简单的实现人 ...

  6. 第十章 Fisco Bcos 权限控制下的数据上链实操演练

    一.目的 前面已经完成fisco bcos 相关底层搭建.sdk使用.控制台.webase中间件平台等系列实战开发, 本次进行最后一个部分,体系化管理区块链底层,建立有序的底层控管制度,实现权限化管理 ...

  7. css知识笔记:水平垂直居中(别只看,请实操!!!)

    css实现元素的水平垂直居中. (尝试采用5W2H方法说明): 别只看,请实操!!! What: 1.这篇文档主要描述元素水平方向居中的几种最常见和最实用的几种方式,并说明优缺点. 2.写这篇文章的目 ...

  8. css知识笔记:垂直居中(别只看,请实操!!!)

    css实现元素的垂直居中. (尝试采用5W2H方法说明): 别只看,请实操!!! What: 1.这篇文档主要描述元素水平方向居中的几种最常见和最实用的几种方式,并说明优缺点. 2.写这篇文章的目的, ...

  9. css知识笔记:水平居中(别只看,请实操!!!)

    css实现元素的水平居中. (尝试采用5W2H方法说明): 别只看,请实操!!! What: 1.这篇文档主要描述元素水平方向居中的几种最常见和最实用的几种方式,并说明优缺点. 2.写这篇文章的目的, ...

  10. 决策树算法的Python实现—基于金融场景实操

    决策树是最经常使用的数据挖掘算法,本次分享jacky带你深入浅出,走进决策树的世界 基本概念 决策树(Decision Tree) 它通过对训练样本的学习,并建立分类规则,然后依据分类规则,对新样本数 ...

随机推荐

  1. KingbaseES Json 系列八:Json记录操作函数三

    KingbaseES Json 系列八--Json记录操作函数三(JSON_TABLE) JSON 数据类型是用来存储 JSON(JavaScript Object Notation)数据的.King ...

  2. 【Learning eBPF-2】eBPF 的“Hello world”

    前一章讲了 eBPF 为什么这么吊,不理解没关系,现在开始,我们通过一个 "Hello world" 例子,来真正入门一下. BCC Python 框架是上手 eBPF 的最友好方 ...

  3. 一篇文章了解CI/CD管道全流程

    从CI/CD过程开始,包含所有阶段并负责创建自动化和无缝的软件交付的一系列步骤称为CI/CD管道工作流.使用CI/CD管道,软件发布工件可以从代码提交阶段到测试.构建.部署和生产阶段在管道中移动和前进 ...

  4. 学习Source Generators之IncrementalValueProvider

    前面我们使用了IIncrementalGenerator来生成代码,接下来我们来详细了解下IIncrementalGenerator的核心部分IncrementalValueProvider. 介绍 ...

  5. #斯坦纳树#洛谷 4294 [WC2008]游览计划

    题目 分析 几乎就是模板题,考虑不同点就是它是点权, 所以在求两个子集的时候要减去这个点的点权, 还有一点恶心的就是要输出方案,令人作呕 代码 #include <cstdio> #inc ...

  6. netty系列之:给ThreadLocal插上梦想的翅膀,详解FastThreadLocal

    目录 简介 从ThreadLocalMap中获取数据 FastThreadLocal 总结 简介 JDK中的ThreadLocal可以通过get方法来获得跟当前线程绑定的值.而这些值是存储在Threa ...

  7. mysql 简单进阶 ———— 多列索引[一]

    前文 整理一下mysql 的一些简单进阶技巧,来源于高性能mysql,但不是根据书的序列来的. 正文 库地址: https://dev.mysql.com/doc/index-other.html 有 ...

  8. 涂色-【BFS】

    涂色 有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间.给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newC ...

  9. 开源在线表单工具 HeyForm 使用教程

    HeyForm 是一个非常出色的开源在线表单工具,可以通过直观的拖拽式编辑器,快速构建出美观实用的表单. HeyForm 的功能非常丰富: 支持丰富的输入类型,从基础的文本.数字到高级的图片选择.日期 ...

  10. ImageJ软件使用教程(二):图像测量

    目录 图像比例尺 加载图像 设置比例尺 标注比例尺 测量长度面积 测量长度 测量面积 参考资料 图像比例尺 使用ImageJ软件测量图像中的长度.面积等信息时,需要先设置图像的比例尺,比例尺用于将图像 ...