【书生3.5】茴香豆:企业级知识库问答工具

茴香豆:企业级知识库问答工具

    • 1 简介
    • 2 web版使用
    • 3 本地版搭建
      • 3.1 环境安装
      • 3.2 模型准备
        • 下载源码
        • 安装依赖
      • 3.3 修改配置
      • 3.4 知识库创建
      • 3.5 测试知识助手
        • 3.5.1 命令行运行
        • 3.5.2 可视化界面
      • 3.6 集成飞书&微信群聊
    • 4 高阶应用
      • 4.1 开启网络搜索
      • 4.2 远程模型
        • 远程向量&重排序模型
        • 远程大模型
      • 4.3 多模态功能
        • 4.3.1 茴香豆环境
        • 4.3.2 安装多模态模型和依赖
        • 4.3.3修改配置文件
        • 4.4.4建立多模态知识库
        • 4.4.5测试
    • 5 自行测试
      • 5.1 不使用知识库和网络搜索
      • 5.2 仅开启网络搜索
      • 5.3 仅使用知识库

1 简介

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

茴香豆特点

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

[img](https://raw.githubusercontent.com/fzd9752/pic_img/main/imgs/Screenshot 2024-08-23 at 20.23.25.png)

2 web版使用

在这里插入图片描述

3 本地版搭建

3.1 环境安装

【30%开发机】

PS:注意要在conda的base环境执行

studio-conda -o internlm-base -t huixiangdou

PS: 1个小时左右

#创建成功,用下面的命令激活环境:
conda activate huixiangdou

3.2 模型准备

PS:茴香豆默认会根据配置文件自动下载对应的模型文件,为了节省时间,我们科使用已有的模型,只需要在配置文件中设置相应路径即可。

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

3.3 安装茴香豆

下载源码
cd /root
# 克隆代码仓库
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 79fa810
安装依赖

PS: BCEmbedding0.1.5是正解,官方教程版本BCEmbedding0.15有误

conda activate huixiangdou
# 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

3.3 修改配置

  • 方法一:编辑器修改/root/huixiangdou/config.ini

在这里插入图片描述

  • 方法二:sed命令
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

3.4 知识库创建

conda activate huixiangdoucd /root/huixiangdou && mkdir repodirgit clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou
git clone https://github.com/open-mmlab/mmpose    --depth=1 repodir/mmpose# 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

ps:需要注意的是,每次更新原始知识文档和正反例,都需要重新运行 python3 -m huixiangdou.service.feature_store 命令进行向量知识库的重新创建和应答阈值的更新。

在这里插入图片描述

3.5 测试知识助手

3.5.1 命令行运行
conda activate huixiangdou
cd /root/huixiangdou
python3 -m huixiangdou.main --standalone

在这里插入图片描述

3.5.2 可视化界面
conda activate huixiangdou
cd /root/huixiangdou
python3 -m huixiangdou.gradio# 本地
ssh -CNg -L 7860:127.0.0.1:7860 root@ssh.intern-ai.org.cn -p <你的ssh端口号>

可视化界面问答展示

  • 问题一:答非所问

在这里插入图片描述

  • 问题二:

在这里插入图片描述

3.6 集成飞书&微信群聊

环境要求有点“苛刻”。

  • 飞书需要企业管理员审核

  • 微信则对安卓、微信要求苛刻

    安卓机测试,茴香豆崩溃

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

4 高阶应用

4.1 开启网络搜索

对于本地知识库没有提到的问题或是实时性强的问题,可以开启茴香豆的网络搜索功能,结合网络的搜索结果,生成更可靠的回答。

开启网络搜索功能需要用到 Serper 提供的 API:

  1. 登录 Serper ,注册:

  2. 进入 Serper API 界面,复制自己的 API-key:

  3. 替换 /huixiangdou/config.ini 中的 ${YOUR-API-KEY} 为自己的API-key:

[web_search]
check https://serper.dev/api-key to get a free API key
x_api_key = "${YOUR-API-KEY}"
domain_partial_order = ["openai.com", "pytorch.org", "readthedocs.io", "nvidia.com", "stackoverflow.com", "juejin.cn", "zhuanlan.zhihu.com", "www.cnblogs.com"]
save_dir = "logs/web_search_result"

PS:需要科学上网

在这里插入图片描述

4.2 远程模型

茴香豆中有 3 处调用了模型,分别是 嵌入模型(Embedding)、重排模型(Rerank)和 大语音模型(LLM)

远程向量&重排序模型

目前茴香豆只支持 siliconflow 中向量&重排 bce 模型的调用

调用硅基流动 的 API。

远程大模型

PS: 如果同时开启 local 和 remote 模型,茴香豆将采用混合模型的方案,详见 技术报告,效果更好。

  • 开启

想要启用远端大语言模型,首先修改 /huixiangdou/config.ini 本地和远程LLM 开关:

enable_local = 0 # 关闭本地模型
enable_remote = 1 # 启用云端模型
  • 修改配置

修改 remote_ 相关配置,填写 API key、模型类型等参数,茴香豆支持 OpenAI 的 API格式调用。

4.3 多模态功能

最新的茴香豆支持了多模态的图文检索,启用该功能后,茴香豆可以解析上传的图片内容,并根据图片内容和文字提示词进行检索回答。

图文检索功能需要至少 10G 显存支持本地向量和重排模型运行,下面的示例使用的全部是本地模型,因此需要 40G 的显存。【开发机至少需要是50%】

4.3.1 茴香豆环境
  • 旧版本要更新
  • 或者空环境直接下载最新
4.3.2 安装多模态模型和依赖
  • 下载模型
# 设置环境变量
export HF_ENDPOINT='https://hf-mirror.com' # 使用 huggingface 中国镜像加速下载,如果在国外,忽略此步骤# 下载模型
## 模型文件较大,如果遇到下载报错,重新运行命令就好
huggingface-cli download BAAI/bge-m3 --local-dir /root/models/bge-m3
huggingface-cli download BAAI/bge-visualized --local-dir /root/models/bge-visualized
huggingface-cli download BAAI/bge-reranker-v2-minicpm-layerwise --local-dir /root/models/bge-reranker-v2-minicpm-layerwise# 需要手动将视觉模型移动到 BGE-m3 文件夹下
mv /root/models/bge-visualized/Visualized_m3.pth /root/models/bge-m3/
  • 安装依赖
conda activate huixiangdou
cd /root/# 从官方 github 安装最新版
git clone https://github.com/FlagOpen/FlagEmbedding.git
cd FlagEmbedding
pip install  .# 复制 FlagEmbedding 缺失的文件,注意 huixiangdou/lib/python3.10/site-packages 是教程开始设置的环境,如果个人有更改,需要根据自己的环境重新填入对应的地址
cp ~/FlagEmbedding/FlagEmbedding/visual/eva_clip/model_configs /root/.conda/envs/huixiangdou/lib/python3.10/site-packages/FlagEmbedding/visual/eva_clip/
cp ~/FlagEmbedding/FlagEmbedding/visual/eva_clip/bpe_simple_vocab_16e6.txt.gz /root/.conda/envs/huixiangdou/lib/python3.10/site-packages/FlagEmbedding/visual/eva_clip/# 其他依赖包
pip install timm ftfy peft 
4.3.3修改配置文件

PS: 7B模型应对多模态效果一般

sed -i '6s#.*#embedding_model_path = "/root/models/bge-m3"#' /root/huixiangdou/config-multimodal.ini
sed -i '7s#.*#reranker_model_path = "/root/models/bge-reranker-v2-minicpm-layerwise"#' /root/huixiangdou/config-multimodal.inised -i '31s#.*#local_llm_path = "/root/models/internlm2-chat-7b"#' /root/huixiangdou/config-multimodal.ini
sed -i '20s#.*#enable_local = 1#' /root/huixiangdou/config-multimodal.ini
sed -i '21s#.*#enable_remote = 0#' /root/huixiangdou/config-multimodal.ini# 多模态向量知识库另开一个位置存储,和非多模态区分开
sed -i '8s#.*#work_dir = "workdir-multi"#' /root/huixiangdou/config-multimodal.ini
sed -i '61s#.*#enable_cr = 0#' /root/huixiangdou/config-multimodal.ini # 关闭指代消岐功能
4.4.4建立多模态知识库
# 新的向量知识库文件夹
mkdir workdir-multi# 提取多模态向量知识库
python3 -m huixiangdou.service.feature_store --config_path config-multimodal.ini
4.4.5测试
conda activate huixiangdou
cd /root/huixiangdoupython3 -m huixiangdou.gradio --config_path config-multimodal.ini

5 自行测试

5.1 不使用知识库和网络搜索

在这里插入图片描述

5.2 仅开启网络搜索

  • 按4.1开启网络搜索
  • 不需要重启3.5.2
  • 页面上直接开启即可

PS:茴香豆逻辑或模型存在重大问题

是进行了搜索,但是后台进行了训练?

在这里插入图片描述

5.3 仅使用知识库

根据3.4 创建xtuner知识库

# 或者直接上传文件
#这里使用网络知识文件
cd /root/huixiangdou
git clone https://github.com/InternLM/xtuner.git --depth=1 repodir/xtunerconda activate huixiangdou
# 30%的开发机gpu不够,要停止其它运行的服务(如3.5.2),再运行
python3 -m huixiangdou.service.feature_store

可以看到,还是有效果的,只是中文问题,也有中文知识库,为啥用英文回复呢

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1523915.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

10.8 信息安全基础知识

信息安全 存储安全 计算机信息系统安全保护等级 真题

Get full article in Google Sheet using Openai

题意&#xff1a;将整篇文章导入Google表格中&#xff0c;使用OpenAI。 问题背景&#xff1a; Im trying to get full article in Google Sheet using Openai API. In column A I just mention the topic and want to get full article in column B. 我正在尝试使用 OpenAI A…

chapter13-常用类——(包装类)——day15

目录 460-八大Wrapper类 461-装箱和拆箱 462-包装类测试 463-包装类方法 464-Integer创建机制 465-Integer面试题 460-八大Wrapper类 &#xff08;面向对象里面最重要的就是继承关系&#xff0c;所以要进行梳理&#xff09; 实现了了两个接口&#xff0c;继承了Object父…

2025年最新:如何用Java SpringBoot构建受灾救援物资管理系统,提升救援效率,掌握实时数据!

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

错误: 找不到或无法加载主类 App.class,Java文件是怎么编译的

App.java文件: 文件路径:D:\com\fdw\App.java 文件内容: package com.fdw; public class App {public static void main(String[] args) {System.out.println("apple");} } 注意: App.java 必须放在com\fdw目录下(包名要和目录一致),否则无法启动! 编译

CNN-LSTM用于时间序列预测,发二区5分+没问题!

为了进一步提高时序预测的性能&#xff0c;研究者们组合了CNN和LSTM的特点&#xff0c;提出了CNN-LSTM混合架构。 这种架构因为独特的结构设计&#xff0c;能同时处理时空数据、提取丰富的特征、并有效解决过拟合问题&#xff0c;实现对时间序列数据的高效、准确预测&#xff…

我的私有云-IOT定位/追踪系统

目录 1. 说明 2. 完成后的效果 2.1 实时定位 2.2 轨迹重现 2.3 设备美照 3. 项目设计 3.1 系统拓扑图​编辑 3.2 技术选型 3.3 消息订阅处理架构图 3.4 frp服务在线监控​编辑 4. 实施 4.1 数据模型 - DeviceLocation 4.2 数据报规格定义 订阅主题 数据报格式 …

【Qt】Qt 网络 | UDP Socket

文章目录 核心API代码示例服务器客户端 要使用 Qt 网络编程&#xff0c;需要在项目中的 .pro 文件中添加 network 模块 核心API Qt 的 UDP Socket 主要的类有两个 QUdpSocket 和 QNetworkDatagram 因为是 UDP 是面向数据报的&#xff0c;QNetworkDatagram 就是对 数据报的封…

ChatGPT写文章时,如何去除生硬的Ai味?

仅做分享&#xff0c;侵删 在使用AI进行写作时&#xff0c;常常会发现生成的文章带有明显的“机器味”&#xff0c;一眼就能看出是由AI生成的。这是许多希望借助AI进行自媒体创作的小伙伴们面临的一个主要问题。AI生成的文章往往过于书面化&#xff0c;缺乏人情味&#xff0c;导…

Xmind2024去除VIP会员解锁版

XMind 2024&#xff1a;让思维导图变得有趣又高效 &#x1f31f;新功能大揭秘&#x1f31f; 亲爱的小仙女们&#xff0c;今天我要给你们安利一款神奇的软件——XMind 2024&#xff01;这不仅仅是一款普通的思维导图软件&#xff0c;它可是集美貌与智慧于一身的超级助手哦&…

【学习笔记】 陈强-机器学习-Python-Ch13 提升法

系列文章目录 监督学习&#xff1a;参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归&#xff08;SAheart.csv&#xff09; 【学习笔记】 陈强-机器学习-Python-…

3674B/C/D/E/F/G矢量网络分析仪

3674B/C/D/E/F/G矢量网络分析仪 <<<3674系列矢量网络分析仪>>> Ceyear 3674系列矢量网络分析仪是技术创新的巅峰之作&#xff0c;可以轻松应对半导体芯片测试、材料测试、天线测试、高速线缆测试、微波部组件测试等带来的严峻挑战。出色的射频特性、灵活的硬…

提升多跳问答中的语言模型知识编辑能力

人工智能咨询培训老师叶梓 转载标明出处 大模型在静态知识库的更新上存在局限&#xff0c;特别是在面对需要多步骤推理的多跳问题时&#xff0c;难以提供准确和最新的回答。为了解决这一问题&#xff0c;来自美国佐治亚大学、纽约大学、莱斯大学、北卡罗来纳州立大学等机构的研…

案例-KVM+GFS分布式存储系统构建KVM高可用(虚拟化实战)

NFS GlusterFS 基于共享存储 采用GFS做共享存储&#xff1b; 实验环境&#xff1a;101 102 103 104 做gfs集群&#xff1b;201 202做虚拟机&#xff1b; 同步一下会话&#xff1b; 为了方便使用主机名进行通信&#xff0c;修改hosts文件&#xff1b; 为了使用GlusterFS的仓库…

机器学习引领未来:赋能精准高效的图像识别技术革新

图像识别技术近年来取得了显著进展,深刻地改变了各行各业。机器学习,特别是深度学习的突破,推动了这一领域的技术革新。本文将深入探讨机器学习如何赋能图像识别技术,从基础理论到前沿进展,再到实际应用与挑战展望,为您全面呈现这一领域的最新动态和未来趋势。 1. 引言 …

Python进阶07-高级语法

零、文章目录 Python进阶07-高级语法 1、with语句 &#xff08;1&#xff09;文件操作 文件使用完后必须关闭&#xff0c;因为文件对象会占用操作系统的资源&#xff0c;并且操作系统同一时间能打开的文件数量也是有限的 # 第一步&#xff1a;打开文件 f open(python.txt…

CAS理解和说明

目录 1.CAS是什么? 2.CAS的应用场景 2.1 实现原子类 2.2 实现自旋锁 3.CAS的典型问题:ABA问题 1.CAS是什么? CAS:全称compare and swap(比较并交换) 我们假设内存中的原始数据V&#xff0c;旧的预期值A&#xff0c;需要修改的新值B 1.比较A与V是否相等&#xff08;比较…

Spring6梳理6——依赖注入之Setter注入

以上笔记来源&#xff1a; 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09;https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 一、引言 二、Java方法初始化过程 2.1 set方法及构造器方法实现Book对象初始化 三…

QT实战项目之音乐播放器

项目效果演示 myMusicShow 项目概述 在本QT音乐播放器实战项目中&#xff0c;开发环境使用的是QT Creator5.14版本。该项目实现了音乐播放器的基本功能&#xff0c;例如开始播放、停止播放、下一首播放、上一首播放、调节音量、调节倍速、设置音乐播放模式等。同时还具备搜索功…

C语言:常用技巧及误用

一、字符串存储在数组中 int main() {char* arr[7] {"xiaoming","zhangsan","李四"};printf("%s\n", arr[0]);printf("%s\n", arr[2]);return 0; } 二、scanf()函数用法 2.1 scanf()输入字符串 int main() {char arr[10…