Skip to content

Latest commit

 

History

History
435 lines (326 loc) · 19.6 KB

README_zh.md

File metadata and controls

435 lines (326 loc) · 19.6 KB

English | 简体中文

茴香豆是一个基于 LLM 的专业知识助手,优势:

  1. 设计预处理、拒答、响应三阶段 pipeline:
  2. 无需训练适用各行业,提供 CPU-only、2G、10G、20G、80G 规格配置
  3. 提供一整套前后端 web、android、算法源码,工业级开源可商用

查看茴香豆已运行在哪些场景;加入微信群直接体验群聊助手效果。

如果对你有用,麻烦 star 一下⭐

🔆 新功能

茴香豆 Web 版已发布到 OpenXLab,可以创建自己的知识库、更新正反例、开关网络搜索,聊天测试效果后,集成到飞书/微信群。

Web 版视频教程见 BiliBiliYouTube

Web 版给 android 的接口,也支持非 android 调用,见python 样例代码

📖 支持情况

LLM 文件格式 检索方法 接入方法 预处理
  • pdf
  • word
  • excel
  • ppt
  • html
  • markdown
  • txt

📦 硬件要求

以下是不同特性所需显存,区别仅在配置选项是否开启

配置示例 显存需求 描述 Linux 系统已验证设备
config-cpu.ini - siliconcloud API
仅检索文本
config-2G.ini 2GB 用 openai API(如 kimideepseekstepfun
仅检索文本
config-multimodal.ini 10GB 用 openai API 做 LLM,图文检索
【标准版】config.ini 19GB 本地部署 LLM,单模态
config-advanced.ini 80GB 本地 LLM,指代消歧,单模态,微信群实用

🔥 运行标准版

我们以标准版(本地运行 LLM,纯文本检索)为例,介绍 HuixiangDou 功能。其他版本仅仅是配置选项不同。

一、下载模型,安装依赖

首先点击同意 BCE 模型协议,命令行登录 huggingface

huggingface-cli login

安装依赖

# 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 -r requirements.txt
# python3.8 安装 faiss-gpu 而不是 faiss

二、创建知识库,执行测试

我们将用 mmpose 的文档构建 mmpose 知识库,过滤问题。如有自己的文档,放入 repodir 下即可。

复制下面所有命令(包含 '#' 符号)建立知识库。

# 下载知识库,我们仅以 mmpose 的文档为例。repodir下可以放任何自己的文档
cd HuixiangDou
mkdir repodir
git clone https://github.com/open-mmlab/mmpose --depth=1 repodir/mmpose

# 把 repodir 的特征保存到 workdir,把正反例阈值更新进 `config.ini`
mkdir workdir
python3 -m huixiangdou.service.feature_store

结束后执行 python3 -m huixiangdou.main --standalone,此时回复 mmpose 相关问题(和知识库相关),同时不响应天气问题。

python3 -m huixiangdou.main --standalone

+-----------------------+---------+--------------------------------+-----------------+
|         Query         |  State  |         Reply                  |   References    |
+=======================+=========+================================+=================+
| 请问如何安装 mmpose ?   | success | 要安装 mmpose,请按照以下步骤操作..| installation.md |
--------------------------------------------------------------------------------------
| 今天天气如何?          | unrelated| ..                            |                 |
+-----------------------+---------+--------------------------------+-----------------+
🔆 Input your question here, type `bye` for exit:
..

Note

如果每次重启 LLM 太慢,先 python3 -m huixiangdou.service.llm_server_hybrid;然后开新窗口,每次只执行 python3 -m huixiangdou.main 不重启 LLM。

💡 也可以启动 gradio 搭建一个简易的 Web UI,默认绑定 7860 端口:

python3 -m huixiangdou.gradio_ui
# 若已单独运行 `llm_server_hybrid.py`,可以 
# python3 -m huixiangdou.gradio_ui --no-standalone

output.mp4

或者启动服务端,监听 23333 端口。默认使用 chat_with_repo pipeline:

python3 -m huixiangdou.server

# cURL 测试状态回调接口
curl -X POST http://127.0.0.1:23333/huixiangdou_stream  -H "Content-Type: application/json" -d '{"text": "how to install mmpose","image": ""}'
# cURL 测试同步接口
curl -X POST http://127.0.0.1:23333/huixiangdou_inference  -H "Content-Type: application/json" -d '{"text": "how to install mmpose","image": ""}'

请调整 repodir 文档、good_questionsbad_questions,尝试自己的领域知识(医疗,金融,电力等)。

三、集成到飞书、微信群

四、WEB 前后端部署,零编程集成飞书微信

我们提供了完整的 typescript 前端和 python 后端服务源码:

  • 支持多租户管理
  • 零编程接入飞书、微信群
  • 架构松散,适合 k8s

效果同 OpenXlab APP ,请阅读 web 部署文档

🍴 其他配置

纯 CPU 版

若没有 GPU,可以使用 siliconcloud API 完成模型推理。

以 docker miniconda+Python3.11 为例,安装 cpu 依赖,运行:

# 启动容器
docker run  -v /path/to/huixiangdou:/huixiangdou  -p 7860:7860 -p 23333:23333  -it continuumio/miniconda3 /bin/bash
# 装依赖
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
python3 -m pip install -r requirements-cpu.txt
# 建立知识库
python3 -m huixiangdou.service.feature_store  --config_path config-cpu.ini
# 问答测试
python3 -m huixiangdou.main --standalone --config_path config-cpu.ini
# gradio UI
python3 -m huixiangdou.gradio_ui --config_path config-cpu.ini

如果装依赖太慢,dockerhub 里提供了安装好依赖的镜像,docker 启动时替换即可。

2G 实惠版

如果你的显存超过 1.8G,或追求性价比。此配置扔掉了本地 LLM,使用 remote LLM 代替,其他和标准版相同。

以 siliconcloud 为例,把官网申请 的 API TOKEN 填入 config-2G.ini

[llm]
enable_local = 0   # 关掉本地 LLM
enable_remote = 1  # 只用远程
..
remote_type = "siliconcloud"   # 选择 siliconcloud
remote_api_key = "YOUR-API-KEY-HERE" # 填 API key
remote_llm_model = "alibaba/Qwen1.5-110B-Chat"

Note

每次问答最坏情况要调用 7 次 LLM,受免费用户 RPM 限制,可修改 config.ini 中 rpm 参数

执行命令获取问答结果

python3 -m huixiangdou.main --standalone --config-path config-2G.ini # 一次启动所有服务

10G 多模态版

如果你有 10G 显存,那么可以进一步支持图文检索。仅需修改 config.ini 使用的模型。

# config-multimodal.ini
# !!! Download `https://huggingface.co/BAAI/bge-visualized/blob/main/Visualized_m3.pth` to `bge-m3` folder !!!
embedding_model_path = "BAAI/bge-m3"
reranker_model_path = "BAAI/bge-reranker-v2-minicpm-layerwise"

需要注意:

运行 gradio 测试,图文检索效果见这里.

python3 tests/test_query_gradio.py

80G 完整版

微信体验群里的 “茴香豆” 开启了全部功能:

  • Serper 搜索及 SourceGraph 搜索增强
  • 群聊图片、微信公众号解析
  • 文本指代消歧
  • 混合 LLM
  • 知识库为 openmmlab 相关的 12 个 repo(1700 个文档),拒绝闲聊

请阅读以下话题:

移动端

贡献者提供了android工具 完成微信接入。方案基于系统层 API,原理上可以控制任何 UI(不限于通讯软件)。

🛠️ FAQ

  1. 对于通用问题(如 “番茄是什么” ),我希望 LLM 优先用领域知识(如 “普罗旺斯番茄”)怎么办?

    参照 PR,准备实体列表,构建特征库时传入列表,ParallelPipeline检索会基于倒排索引增大召回

  2. 机器人太高冷/太嘴碎怎么办?

    • 把真实场景中,应该回答的问题填入resource/good_questions.json,应该拒绝的填入resource/bad_questions.json
    • 调整 repodir 中的文档,确保不包含场景无关内容

    重新执行 feature_store 来更新阈值和特征库。

    ⚠️ 如果你足够自信,也可以直接修改 config.ini 的 reject_throttle 数值,一般来说 0.5 是很高的值;0.2 过低。

  3. 启动正常,但运行期间显存 OOM 怎么办?

    基于 transformers 结构的 LLM 长文本需要更多显存,此时需要对模型做 kv cache 量化,如 lmdeploy 量化说明。然后使用 docker 独立部署 Hybrid LLM Service。

  4. 如何接入其他 local LLM / 接入后效果不理想怎么办?

  5. 响应太慢/网络请求总是失败怎么办?

    • 参考 hybrid llm service 增加指数退避重传
    • local LLM 替换为 lmdeploy 等推理框架,而非原生的 huggingface/transformers
  6. 机器配置低,GPU 显存不足怎么办?

    此时无法运行 local LLM,只能用 remote LLM 配合 text2vec 执行 pipeline。请确保 config.ini 只使用 remote LLM,关闭 local LLM

  7. 报错 (500, 'Internal Server Error'),意为 standalone 模式启动的 LLM 服务没访问到。按如下方式定位

    • 执行 python3 -m huixiangdou.service.llm_server_hybrid 确定 LLM 服务无报错,监听的端口和配置一致。检查结束后按 ctrl-c 关掉。
    • 检查 config.ini 中各种 TOKEN 书写正确。

🍀 致谢

📝 引用

@misc{kong2024huixiangdou,
      title={HuiXiangDou: Overcoming Group Chat Scenarios with LLM-based Technical Assistance},
      author={Huanjun Kong and Songyang Zhang and Jiaying Li and Min Xiao and Jun Xu and Kai Chen},
      year={2024},
      eprint={2401.08772},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}

@misc{kong2024labelingsupervisedfinetuningdata,
      title={Labeling supervised fine-tuning data with the scaling law}, 
      author={Huanjun Kong},
      year={2024},
      eprint={2405.02817},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2405.02817}, 
}
```