【书生大模型实战营(暑假场)】进阶任务五 茴香豆:企业级知识库问答工具

本文主要是介绍【书生大模型实战营(暑假场)】进阶任务五 茴香豆:企业级知识库问答工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

进阶任务五 茴香豆:企业级知识库问答工具

  • 任务
  • 文档
  • 视频
  • 茴香豆

1 茴香豆基本介绍

茴香豆 是由书生·浦语团队开发的一款开源、专门针对国内企业级使用场景设计并优化的知识问答工具。在基础 RAG 课程中我们了解到,RAG 可以有效的帮助提高 LLM 知识检索的相关性、实时性,同时避免 LLM 训练带来的巨大成本。在实际的生产和生活环境需求,对 RAG 系统的开发、部署和调优的挑战更大,如需要解决群应答、能够无关问题拒答、多渠道应答、更高的安全性挑战。因此,根据大量国内用户的实际需求,总结出了三阶段Pipeline的茴香豆知识问答助手架构,帮助企业级用户可以快速上手安装部署。

茴香豆特点:

  • 三阶段 Pipeline (前处理、拒答、响应),提高相应准确率和安全性
  • 打通微信和飞书群聊天,适合国内知识问答场景
  • 支持各种硬件配置安装,安装部署限制条件少
  • 适配性强,兼容多个 LLM 和 API
  • 傻瓜操作,安装和配置方便

在这里插入图片描述

2 茴香豆本地标准版搭建实战

任务
尝试将茴香豆从源码部署到本地服务器(以 InternlmLM Studio 为例),并开发一款简单的知识助手 Demo。

2.1 环境配置和源码准备

首先,准备 huixiangdou 专用 conda 环境,并安装相关依赖,完成环境配置;并且从官方码仓拉取仓库,并进行文件安装。

# 创建茴香豆专用 conda 环境
studio-conda -o internlm-base -t huixiangdou# 激活环境
conda activate huixiangdou# 从茴香豆仓库拉取代码到服务器
cd /root
# 克隆代码仓库并进入 huixiangdou 文件夹
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 79fa810# 安装茴香豆所需依赖
# parsing `word` format requirements
apt update
apt install python-dev libxml2-dev libxslt1-dev antiword unrtf poppler-utils pstotext tesseract-ocr flac ffmpeg lame libmad0 libsox-fmt-mp3 sox libjpeg-dev swig libpulse-dev
# python requirements
pip install BCEmbedding==0.1.5 cmake==3.30.2 lit==18.1.8 sentencepiece==0.2.0 protobuf==5.27.3 accelerate==0.33.0
pip install -r requirements.txt
# python3.8 安装 faiss-gpu 而不是 faiss

2.2 模型文件配置

茴香豆默认可以根据配置文件自动下载对应模型文件。但模型已经预载在开发机中,可以通过软连接直接配置模型文件。在这里我们选择的大模型是internlm2-chat-7b 大模型。

# 创建模型文件夹
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

在这里插入图片描述

2.3 更改配置文件

茴香豆的功能管理和模型切换可通过 config.ini 文件进行修改,默认参数如下:

[feature_store]
# `feature_store.py` use this throttle to distinct `good_questions` and `bad_questions`
reject_throttle = -1.0
# text2vec model, support local relative path, huggingface repo and URL.
# for example:
#  "maidalun1020/bce-embedding-base_v1"
#  "BAAI/bge-m3"
#  "https://api.siliconflow.cn/v1/embeddings"
embedding_model_path = "maidalun1020/bce-embedding-base_v1"# reranker model, support list:
#  "maidalun1020/bce-reranker-base_v1"
#  "BAAI/bge-reranker-v2-minicpm-layerwise"
#  "https://api.siliconflow.cn/v1/rerank"
reranker_model_path = "maidalun1020/bce-reranker-base_v1"# if using `siliconcloud` API as `embedding_model_path` or `reranker_model_path`, give the token
api_token = ""
api_rpm = 1000
work_dir = "workdir"[web_search]
engine = "serper"
# web search engine support ddgs and serper
# For ddgs, see https://pypi.org/project/duckduckgo-search
# For serper, check https://serper.dev/api-key to get a free API key
serper_x_api_key = "YOUR-API-KEY-HERE"
domain_partial_order = ["arxiv.org", "openai.com", "pytorch.org", "readthedocs.io", "nvidia.com", "stackoverflow.com", "juejin.cn", "zhuanlan.zhihu.com", "www.cnblogs.com"]
save_dir = "logs/web_search_result"[llm]
enable_local = 1
enable_remote = 0
# hybrid llm service address
client_url = "http://127.0.0.1:8888/inference"[llm.server]
# local LLM configuration
# support "internlm/internlm2-chat-7b", "internlm2_5-7b-chat" and "qwen/qwen-7b-chat-int8"
# support local path, for example
# local_llm_path = "/path/to/your/internlm2_5"local_llm_path = "internlm/internlm2_5-7b-chat"
local_llm_max_text_length = 3000
# llm server listen port
local_llm_bind_port = 8888# remote LLM service configuration
# support "gpt", "kimi", "deepseek", "zhipuai", "step", "internlm", "xi-api" and "alles-apin"
# support "siliconcloud", see https://siliconflow.cn/zh-cn/siliconcloud
# xi-api and alles-apin is chinese gpt proxy
# for internlm, see https://internlm.intern-ai.org.cn/api/documentremote_type = "kimi"
remote_api_key = "YOUR-API-KEY-HERE"
# max text length for remote LLM.
# use 128000 for kimi, 192000 for gpt/xi-api, 16000 for deepseek, 128000 for zhipuai, 40000 for internlm2
remote_llm_max_text_length = 128000
# openai API model type, support model list:
# "auto" for kimi. To save money, we auto select model name by prompt length.
# "auto" for step to save money, see https://platform.stepfun.com/
# "gpt-4-0613" for gpt/xi-api,
# "deepseek-chat" for deepseek,
# "glm-4" for zhipuai,
# "gpt-4-1106-preview" for alles-apin or OpenAOE
# "internlm2-latest" for internlm
# for example "alibaba/Qwen1.5-110B-Chat", see https://siliconflow.readme.io/reference/chat-completions-1
remote_llm_model = "auto"
# request per minute
rpm = 500

在终端执行以下命令更改配置文件,让茴香豆使用本地模型:

sed -i '9s#.*#embedding_model_path = "/root/models/bce-embedding-base_v1"#' /root/huixiangdou/config.ini
sed -i '15s#.*#reranker_model_path = "/root/models/bce-reranker-base_v1"#' /root/huixiangdou/config.ini
sed -i '43s#.*#local_llm_path = "/root/models/internlm2-chat-7b"#' /root/huixiangdou/config.ini

修改后,配置文件部分改变,茴香豆将使用本地模型:
在这里插入图片描述

注意!配置文件默认的模型和下载好的模型相同。如果不修改地址为本地模型地址,茴香豆将自动从 huggingface hub 拉取模型。如果选择拉取模型的方式,需要提前在命令行中运行 huggingface-cli login 命令,验证 huggingface 权限。

2.4 知识库创建

完成配置文件后,搭建知识库,除了茴香豆和 MMPose 的文档,这里还选取多个 github 上开源的机器学习,深度学习,大模型相关的开源资料。我们在 huixiangdou 文件加下创建 repodir 文件夹,用来储存知识库的原始文档。再创建一个文件夹 workdir 用来存放原始文档特征提取到的向量知识库。运行以下指令将完成知识库的构建以及从原始文档提取为向量知识库。我们期望可以得到一个了解茴香豆,MMPose,机器学习,深度学习和大模型知识的问答助手。

conda activate huixiangdoucd /root/huixiangdou && mkdir repodirgit clone https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes.git --depth=1 repodir/Coursera-ML-AndrewNg-Notes
git clone https://github.com/d2l-ai/d2l-zh.git --depth=1 repodir/d2l-zh
git clone https://github.com/amusi/Deep-Learning-Interview-Book.git --depth=1 repodir/Deep-Learning-Interview-Book
git clone https://github.com/unclestrong/DeepLearning_LHY21_Notes.git --depth=1 repodir/DeepLearning_LHY21_Notes
git clone https://github.com/datawhalechina/leedl-tutorial.git --depth=1 repodir/leedl-tutorial
git clone https://github.com/datawhalechina/so-large-lm.git --depth=1 repodir/so-large-lm
git clone https://github.com/datawhalechina/self-llm.git --depth=1 repodir/self-llm# Save the features of repodir to workdir, and update the positive and negative example thresholds into `config.ini`
mkdir workdir
python3 -m huixiangdou.service.feature_store

在这里插入图片描述

可以看到,知识库创建过程中进行了一系列小测试,检验问题拒答和响应效果。对于在知识库内的问题,进行了有依据的回答;不在知识库内的问题则选择了拒答,一定程度上提高了茴香豆的稳定性。

本地板也可以编辑正例和反例来调整茴香豆的拒答和响应,正反例位置如:

在这里插入图片描述

在应用中需要注意的是,每次更新只是文档和正反例,都必须重新运行 python3 -m huixiangdou.service.feature_store 命令,以进行向量知识库的重新创建和应答阈值的更新。更新也会直接反映在配置文件中:
在这里插入图片描述

2.5 茴香豆知识助手测试

2.5.1 在终端命令行部署茴香豆

运行以下指令,可以在终端测试目前的茴香豆知识助手。这种基于命令行的方式可以看到对话的结果及中间过程,便于确认知识库是否覆盖需求,正反例设计是否合理。

conda activate huixiangdou
cd /root/huixiangdou
python3 -m huixiangdou.main --standalone

在询问对话中,可以发现茴香豆在知识库中检索出了类相关的知识内容,并根据这些知识文档进行了回复,命令行中的输出也可以看出茴香豆向知识库的搜索:
在这里插入图片描述
在这里插入图片描述

2.5.2 Gradio 部署茴香豆

茴香豆也用 Gradio 搭建了一个 Web UI 的交互界面,可以支持本地茴香豆助手的测试效果。我们运行以下指令,然后进行端口映射,便可以与在 Web 界面的 Gradio 支持的茴香豆助手进行交互:

conda activate huixiangdou
cd /root/huixiangdou
python3 -m huixiangdou.gradio

这里有一个小插曲,即按照运行后指定的 7860 端口去访问,始终无法显示 Web UI:

在这里插入图片描述
在这里插入图片描述
我们根据社区大佬的解决方案

把开发机的7860端口映射到本地的7870端口试一试能否在笔记本的7870访问。还不行的话,就建议所有终端都kill了,然后重新启动huixiangdou的gradio界面

我们使用以下指令进行映射后,成功在本地的 7870 端口进行了访问:

ssh -CNg -L 7870:127.0.0.1:7860 root@ssh.intern-ai.org.cn -p <开发机端口号>

然后我们便可以在 Gradio 界面与大模型进行对话,发现在禁用网页搜索时,茴香豆也能在回复时很好的抽取知识库对应的内容,给出可靠的回答:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于【书生大模型实战营(暑假场)】进阶任务五 茴香豆:企业级知识库问答工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116243

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验