LARS - 大型语言模型与高级参考解决方案
LARS 是一个应用程序,允许您在本地设备上运行大型语言模型(LLM),上传自己的文档并进行对话,其中 LLM 会基于您上传的内容生成响应。这种基于文档的生成方式有助于提高准确性并减少 AI 生成的错误或“幻觉”现象。这种技术通常被称为“检索增强生成”(Retrieval Augmented Generation, RAG)。
有许多桌面应用程序可以在本地运行 LLM,而 LARS 旨在成为终极的开源 RAG 相关 LLM 应用程序。为此,LARS 在 RAG 的概念上更进一步,为每个响应添加详细的引用,包括文档名称、页码、文本高亮和与您的问题相关的图像,甚至在响应窗口内呈现文档阅读器。虽然并非所有响应都会提供引用,但通常至少会有一些引用出现在每个 RAG 响应中。
以下是 LARS 目前的功能列表:
- 高级引用:LARS 的主要展示功能——LLM 生成的响应附有详细的引用,包括文档名称、页码、文本高亮和图像提取功能,RAG 相关响应中会呈现文档阅读器,用户可以在响应窗口内滚动浏览文档并下载带有高亮的 PDF 文件。
- 支持的大量文件格式:
- Word 文件:doc、docx、odt、rtf、txt
- Excel 文件:xls、xlsx、ods、csv
- PowerPoint 演示文稿:ppt、pptx、odp
- 图像文件:bmp、gif、jpg、png、svg、tiff
- 富文本格式(RTF)
- HTML 文件
- 转换记忆:用户可以提出跟进问题,包括先前对话的相关问题。
- 完整的聊天记录:用户可以返回并继续之前的对话。
- 用户可以随时通过设置强制启用或禁用 RAG。
- 用户可以随时通过设置更改系统提示。
- 拖放新 LLM:通过设置随时更改 LLM。
- 内置提示模板:支持最流行的 LLM,如 Llama3、Llama2、ChatML、Phi3、Command-R、Deepseek Coder、Vicuna 和 OpenChat-3.5。
- 纯 llama.cpp 后端:没有框架,没有 Python 绑定,没有抽象——只使用纯粹的 llama.cpp!独立于 LARS 升级到更新版本的 llama.cpp。
- GPU 加速推理:支持 Nvidia CUDA 加速推理。
- 调整高级 LLM 设置:可以随时通过设置更改 LLM 的温度、top-k、top-p、min-p、n-keep,设置要卸载到 GPU 的模型层数,并启用或禁用 GPU 的使用。
- 四种嵌入模型:sentence-transformers/all-mpnet-base-v2、BGE-Base、BGE-Large、OpenAI Text-Ada。
- 源界面:显示所选嵌入模型的表格,详细说明上传到 LARS 的文档,包括向量化详细信息,如 chunk_size 和 chunk_overlap。
- 提供重置按钮,用于清空和重置 vectorDB。
- 三种文本提取方法:一个纯本地文本提取选项和两个 OCR 选项,通过 Azure 提供更好的准确性和支持扫描文档——Azure ComputerVision OCR 有一个永久免费的使用层。
- Azure AI 文档智能 OCR 服务的自定义解析器,用于增强表格数据提取,同时通过考虑提取文本的空间坐标来防止重复文本。
可以通过以下链接观看展示这些功能的演示视频:
目录
- LARS - 大型语言模型与高级参考解决方案
- 依赖项
- 安装 LARS
- 安装问题排查
- 首次运行 - 初次设置的重要步骤
- 通用用户指南 - 首次运行后的步骤
- 故障排除
- Docker - 部署容器化 LARS
- 当前开发路线图
- 支持与捐赠
依赖项
1. 构建工具:
-
在 Windows 上:
-
从 微软官方网站 - "Visual Studio 工具" 下载 Microsoft Visual Studio Build Tools 2022。
-
注意:安装上述工具时,请
path_to_cloned_repo\llama.cpp\build\bin\Release
-
-
通过终端验证安装:
llama-server
4. Python:
-
已使用 Python v3.11.x 构建和测试
-
Windows:
-
从官方网站下载 v3.11.9
-
在安装过程中,确保勾选 "Add Python 3.11 to PATH",或稍后手动添加,方法如下:
-
高级系统设置 -> 环境变量 -> 系统变量 -> 编辑 PATH 变量 -> 添加如下内容(根据你的安装位置进行更改):
C:\Users\user_name\AppData\Local\Programs\Python\Python311\
-
或通过 PowerShell:
Set PATH=%PATH%;C:\Users\user_name\AppData\Local\Programs\Python\Python311
-
-
-
Linux(基于 Ubuntu 和 Debian):
- 通过 deadsnakes PPA:
sudo add-apt-repository ppa:deadsnakes/ppa -y sudo apt-get update sudo apt-get install -y python3.11 python3.11-venv python3.11-dev sudo python3.11 -m ensurepip
-
通过终端验证安装:
python3 --version
5. LibreOffice:
-
这是一个可选但强烈推荐的依赖项——如果不完成此设置,则仅支持 PDF 文件
-
Windows:
-
从官方网站下载
-
添加到 PATH,方法如下:
-
高级系统设置 -> 环境变量 -> 系统变量 -> 编辑 PATH 变量 -> 添加如下内容(根据你的安装位置进行更改):
C:\Program Files\LibreOffice\program
-
或通过 PowerShell:
Set PATH=%PATH%;C:\Program Files\LibreOffice\program
-
-
-
Ubuntu 和基于 Debian 的 Linux - 从官方网站下载或通过终端安装:
sudo apt-get update sudo apt-get install -y libreoffice
-
基于 Fedora 和其他 RPM 的发行版 - 从官方网站下载或通过终端安装:
sudo dnf update sudo dnf install libreoffice
-
MacOS - 从官方网站下载或通过 Homebrew 安装:
brew install --cask libreoffice
-
验证安装:
-
在 Windows 和 MacOS 上:运行 LibreOffice 应用程序
-
在 Linux 上通过终端验证:
libreoffice --version
-
6. Poppler:
-
LARS 使用 pdf2image Python 库将文档的每一页转换为图像,以便进行 OCR。该库本质上是围绕 Poppler 工具的一个包装器,负责转换过程。
-
Windows:
-
从官方仓库下载
-
添加到 PATH,方法如下:
-
高级系统设置 -> 环境变量 -> 系统变量 -> 编辑 PATH 变量 -> 添加如下内容(根据你的安装位置进行更改):
path_to_installation\poppler_version\Library\bin
-
或通过 PowerShell:
Set PATH=%PATH%;path_to_installation\poppler_version\Library\bin
-
-
-
Linux:
sudo apt-get update sudo apt-get install -y poppler-utils wget
7. PyTesseract(可选):
-
这是一个可选依赖项——Tesseract-OCR 在 LARS 中并未主动使用,但在源码中有使用方法
-
Windows:
-
通过UB-Mannheim下载适用于 Windows 的 Tesseract-OCR
-
添加到 PATH,方法如下:
-
高级系统设置 -> 环境变量 -> 系统变量 -> 编辑 PATH 变量 -> 添加如下内容(根据你的安装位置进行更改):
C:\Program Files\Tesseract-OCR
-
或通过 PowerShell:
Set PATH=%PATH%;C:\Program Files\Tesseract-OCR
-
-
安装 LARS
-
克隆仓库:
git clone https://github.com/abgulati/LARS cd LARS
- 如果要求 GitHub 身份验证,请使用个人访问令牌,因为密码已被弃用。也可以通过以下方式访问:
GitHub 设置 -> 开发者设置(位于左下角) -> 个人访问令牌
- 如果要求 GitHub 身份验证,请使用个人访问令牌,因为密码已被弃用。也可以通过以下方式访问:
-
安装 Python 依赖项:
-
Windows 通过 PIP:
pip install -r .\requirements.txt
-
Linux 通过 PIP:
pip3 install -r ./requirements.txt
-
关于 Azure:某些必需的 Azure 库在 MacOS 平台上不可用!因此为 MacOS 提供了一个单独的要求文件,排除了这些库:
-
MacOS:
pip3 install -r ./requirements_mac.txt
-
安装问题排查
- 如果在尝试构建 llama.cpp 时遇到
CMake nmake failed
错误,如下所示:
这通常表明您的 Microsoft Visual Studio 构建工具存在问题,因为 CMake 无法找到 nmake 工具,nmake 是 Microsoft Visual Studio 构建工具的一部分。尝试以下步骤来解决此问题:
-
确保已安装 Visual Studio 构建工具:
-
确保已安装 Visual Studio 构建工具,包括 nmake。您可以通过 Visual Studio 安装程序安装这些工具,选择
Desktop development with C++
工作负载,以及MSVC and C++ CMake
可选项 -
检查依赖项部分的步骤 0,特别是其中的截图
-
-
检查环境变量:
- 确保 Visual Studio 工具的路径已包含在系统的 PATH 环境变量中。通常包括以下路径:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools
-
使用开发者命令提示符:
-
打开 "Developer Command Prompt for Visual Studio",该提示符会为您设置必要的环境变量
-
您可以在开始菜单中找到该提示符,位于 Visual Studio 下
-
-
设置 CMake 生成器:
- 在运行 CMake 时,明确指定生成器以使用 NMake Makefiles。您可以通过添加 -G 选项来执行此操作:
cmake -G "NMake Makefiles" -B build -DLLAMA_CUDA=ON
-
如果问题仍然存在,请考虑在 LARS GitHub 仓库上提交问题以获取支持。
- 如果在
pip install
时遇到错误,请尝试以下方法:
-
移除版本号:
- 如果特定的包版本导致错误,请编辑相应的 requirements.txt 文件以移除版本约束,即
==version.number
段,例如:urllib3==2.0.4
改为:urllib3
- 如果特定的包版本导致错误,请编辑相应的 requirements.txt 文件以移除版本约束,即
-
创建并使用 Python 虚拟环境:
-
建议使用虚拟环境以避免与其他 Python 项目发生冲突
-
Windows:
-
创建 Python 虚拟环境(venv):
python -m venv larsenv
-
激活并使用 venv:
.\larsenv\Scripts\activate
-
完成后停用 venv:
deactivate
-
-
Linux 和 MacOS:
- 创建 Python 虚拟环境(venv):
python3 -m venv larsenv
- 创建 Python 虚拟环境(venv):
-
-
支持的文件格式:
-
如果安装并按照依赖项部分第4步添加了PATH的LibreOffice,支持以下格式:
- Word文件:doc, docx, odt, rtf, txt
- Excel文件:xls, xlsx, ods, csv
- PowerPoint演示文稿:ppt, pptx, odp
- 图片文件:bmp, gif, jpg, png, svg, tiff
- 富文本格式(RTF)
- HTML文件
-
如果LibreOffice未设置,仅支持PDF
- 文本提取的OCR选项:
-
LARS提供三种方法从文档中提取文本,以适应各种文档类型和质量:
-
本地文本提取:使用PyPDF2高效提取非扫描PDF中的文本。适用于快速处理,当高精确性不是关键或完全本地处理是必要时。
-
Azure计算机视觉OCR - 提高文本提取的准确性,并支持扫描的文档。适用于处理标准文档布局。提供适用于初步试用和低流量使用的免费层,每月限制5000个事务,每分钟20个事务。
-
Azure AI文档智能OCR - 最适合具有复杂结构(如表格)的文档。LARS中的自定义解析器优化了提取过程。
-
注意:
-
Azure OCR选项在大多数情况下会产生API成本,且不包含在LARS中。
-
如上所述,计算机视觉OCR有一个有限的免费层。该服务总体上更便宜,但速度较慢,可能不适用于非标准文档布局(除A4等)。
-
选择OCR选项时,请考虑文档类型和准确性需求。
-
-
- LLMs:
-
目前仅支持本地LLMs
-
“设置”菜单为高级用户提供了通过“LLM选择”选项卡配置和更改LLM的多种选项
-
非常重要:选择适合正在运行的LLM的提示模板格式
-
目前支持以下提示模板格式训练的LLMs:
- Meta Llama-3
- Meta Llama-2
- Mistral & Mixtral MoE LLMs
- Microsoft Phi-3
- OpenHermes-2.5-Mistral
- Nous-Capybara
- OpenChat-3.5
- Cohere Command-R和Command-R+
- DeepSeek Coder
-
通过“高级设置”调整核心配置设置(触发LLM重新加载和页面刷新):
- 卸载到GPU的层数
- LLM的上下文大小
- 每次响应生成的最大代币数量
-
随时调整设置以更改响应行为:
- 温度 – 响应的随机性
- Top-p – 限制到累计概率超过
的子集代币 - Min-p – 考虑代币的最低概率,相对于最可能的<min_p>
- Top-k – 限制为K个最可能的代币
- N-keep – 上下文大小超出时保留的提示代币<n_keep>(-1保留所有)
- 嵌入模型和向量数据库:
-
LARS提供四种嵌入模型:
- sentence-transformers/all-mpnet-base-v2(默认)
- bge-base-en-v1.5
- bge-large-en-v1.5(LARS中可用的MTEB排名最高的模型)
- Azure-OpenAI Text-Ada(产生API成本,不包含在LARS中)
-
除Azure-OpenAI嵌入外,所有其他模型完全本地运行且免费。首次运行时,这些模型将从HuggingFace Hub下载。这是一次性下载,随后将保存在本地。
-
用户可以随时通过“设置”菜单中的“向量数据库和嵌入模型”选项卡在这些嵌入模型之间切换
-
文档加载表:在“设置”菜单中,显示所选嵌入模型的表格,显示嵌入到相关向量数据库的文档列表。如果文档被多次加载,它将在该表中有多个条目,这对于调试任何问题可能有用。
-
清除向量数据库:使用“重置”按钮并提供确认以清除所选的向量数据库。这将在磁盘上为所选的嵌入模型创建一个新的向量数据库。旧的向量数据库仍被保留,可以通过手动修改config.json文件恢复。
- 编辑系统提示:
-
系统提示作为整个对话的指令
-
LARS允许用户通过“设置”菜单中的“系统提示”选项卡从下拉菜单中选择“自定义”选项来编辑系统提示
-
对系统提示的更改将启动一个新对话
- 强制启用/禁用RAG:
-
通过“设置”菜单,用户可以在需要时强制启用或禁用RAG(检索增强生成 - 使用文档内容改进LLM生成的响应)
-
这对于评估LLM响应在两种情景下的效果非常有用
-
强制禁用也会关闭属性功能
-
默认设置是使用NLP确定何时应进行RAG,这是推荐的选项
-
该设置可随时更改
- 聊天记录:
-
使用左上角的聊天记录菜单浏览并恢复先前的对话
-
非常重要:在恢复先前的对话时,请注意提示模板的不匹配!使用右上角的“信息”图标确保先前对话中使用的LLM以及当前使用的LLM都基于相同的提示模板格式!
- 用户评级:
-
用户可以随时对每个响应进行5分制评级
-
评级数据存储在app目录中的
chat-history.db
SQLite3数据库中:- Windows:
C:/web_app_storage
- Linux:
/app/storage
- MacOS:
/app
- Windows:
-
评级数据对于评估和优化工具的工作流程非常有价值
- 注意事项:
- 在已生成查询响应时,切勿调整任何设置或提交额外查询!等待任何正在进行的响应生成完成。
故障排除
-
如果聊天出现错误或生成奇怪的响应,只需通过左上角的菜单启动一个“新聊天”
-
或者,通过刷新页面启动一个新聊天
-
如果在引用或RAG性能方面遇到问题,尝试按上述一般用户指南第4步重置向量数据库
-
如果遇到任何应用程序问题,而通过启动新聊天或重启LARS无法解决,请按以下步骤删除config.json文件:
- 通过终止Python程序
CTRL+C
关闭LARS应用服务器 - 备份并删除
LARS/web_app
目录下的config.json
文件(与app.py
在同一目录)
- 通过终止Python程序
-
对于任何即使按上述一般用户指南第4步重置向量数据库也无法解决的严重数据和引用问题,请执行以下步骤:
-
通过终止Python程序
CTRL+C
关闭LARS应用服务器 -
备份并删除整个应用目录:
- Windows:
C:/web_app_storage
- Linux:
/app/storage
- MacOS:
/app
- Windows:
-
-
如果问题仍然存在,请考虑在LARS GitHub仓库上提交问题请求支持。
Docker - 部署容器化的LARS
背景和设置
-
LARS已适应于Docker容器部署环境,提供以下两个镜像:
-
两者有不同的要求,前者部署更简单,但由于CPU和DDR内存成为瓶颈,推理性能大大降低
-
虽然不是明确要求,但熟悉Docker容器的使用和容器化、虚拟化的概念将对本节非常有帮助!
-
从两者的共同设置步骤开始:
-
安装Docker
-
您的CPU应支持虚拟化,并且在系统BIOS/UEFI中应启用
-
下载并安装Docker Desktop
-
如果在Windows上,如果Windows子系统尚未安装,可能需要安装。为此,请以管理员身份打开PowerShell并运行以下命令:
wsl --install
-
确保Docker Desktop已启动并运行,然后打开命令提示符/终端并执行以下命令以确保Docker正确安装并运行:
docker ps
-
-
创建一个Docker存储卷,该卷将在运行时附加到LARS容器:
-
创建用于LARS容器的存储卷具有很大优势,因为它允许您将LARS容器升级到更新版本,或在CPU和GPU容器版本之间无缝切换,同时保存所有设置、聊天记录和向量数据库。
-
在命令提示符/终端中执行以下命令:
docker volume create lars_storage_volume
-
该卷将在稍后运行时附加到LARS容器,现在继续以下步骤构建LARS镜像。
-
-
构建并运行CPU推理容器
-
在命令提示符/终端中执行以下命令:
git clone https://github.com/abgulati/LARS # 如已完成则跳过 cd LARS # 如已完成则跳过 cd dockerized docker build -t lars-no-gpu . # 构建完成后,运行容器: docker run -p 5000:5000 -p 8080:8080 -v lars_storage:/app/storage lars-no-gpu
-
故障排除部分也适用于容器化的LARS
构建并运行Nvidia-CUDA GPU启用的容器
-
要求(除Docker外):
兼容的Nvidia GPU Nvidia GPU驱动程序 Nvidia CUDA工具包v12.2
-
对于 Linux,您已经完成了以上设置,因此跳过下一步,直接进入下面的构建和运行步骤
-
如果是在 Windows 上,并且这是您第一次在 Docker 上运行 Nvidia GPU 容器,请系好安全带,这将是一次相当刺激的体验(强烈推荐准备您最喜欢的饮料!)
-
为了避免极度冗余,在继续之前请确保以下依赖项已经安装:
兼容的 Nvidia GPU Nvidia GPU 驱动程序 Nvidia CUDA Toolkit v12.2 Docker Desktop Windows Subsystem for Linux (WSL)
-
如果不确定,请参考Nvidia CUDA 依赖部分和Docker 设置部分
-
如果上述依赖项已经安装并设置好,您可以继续进行
-
打开 PC 上的 Microsoft Store 应用程序,下载并安装 Ubuntu 22.04.3 LTS(必须与dockerfile 中第 2 行的版本匹配)
-
是的,您没看错:从 Microsoft Store 应用程序中下载并安装 Ubuntu,参考下面的截图:
-
现在是时候在 Ubuntu 中安装Nvidia Container Toolkit,按照以下步骤进行安装:
-
在安装完成后,通过在开始菜单中搜索
Ubuntu
在 Windows 中启动 Ubuntu shell -
在打开的 Ubuntu 命令行中,执行以下步骤:
-
配置生产库:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
-
更新库中的软件包列表并安装 Nvidia Container Toolkit 软件包:
sudo apt-get update && apt-get install -y nvidia-container-toolkit
-
使用 nvidia-ctk 命令配置容器运行时,该命令会修改 /etc/docker/daemon.json 文件,以便 Docker 可以使用 Nvidia Container Runtime:
sudo nvidia-ctk runtime configure --runtime=docker
-
重启 Docker 守护进程:
sudo systemctl restart docker
-
-
现在您的 Ubuntu 设置已完成,是时候完成 WSL 和 Docker 的集成了:
-
打开一个新的 PowerShell 窗口,并将此 Ubuntu 安装设置为 WSL 默认值:
wsl --list wsl --set-default Ubuntu-22.04 # 如果尚未标记为默认值
-
导航到
Docker Desktop -> 设置 -> 资源 -> WSL 集成
-> 检查默认和 Ubuntu 22.04 集成。参考下面的截图:
-
-
现在,如果一切都正确完成,您就可以构建并运行容器了!
-
-
在命令提示符/终端中,执行以下命令:
git clone https://github.com/abgulati/LARS # 如果已经完成,则跳过 cd LARS # 如果已经完成,则跳过 cd dockerized_nvidia_cuda_gpu docker build -t lars-nvcuda . # 构建完成后,运行容器: docker run --gpus all -p 5000:5000 -p 8080:8080 -v lars_storage:/app/storage lars-nvcuda
-
故障排除部分也适用于 Container-LARS
容器的特别注意事项 - 解决网络问题和首次运行错误
-
如果遇到与网络相关的错误,尤其是在构建容器时无法访问软件包库的问题,这通常是由您的网络问题引起的,通常与防火墙问题有关
-
在 Windows 上,导航到
控制面板\系统和安全\Windows Defender 防火墙\允许的应用
,或在开始菜单中搜索防火墙
并前往通过防火墙允许应用
,确保Docker Desktop Backend
被允许通过 -
第一次运行 LARS 时,将下载句子嵌入模型 sentence-transformers
-
在容器化环境中,这次下载有时会出现问题,并导致在您提出查询时出现错误
-
如果发生这种情况,只需进入 LARS 设置菜单:
设置->VectorDB & 嵌入模型
并将嵌入模型更改为 BGE-Base 或 BGE-Large,这将强制重新加载和重新下载 -
完成后,请再次提出问题,响应应恢复正常生成
-
您可以切换回句子嵌入模型,问题应该得到解决
容器的特别注意事项 - 首次运行后更新容器镜像
-
如上所述,在首次运行 LARS 时会下载嵌入模型
-
最好在关闭容器之前保存容器的状态,以便不必在每次启动容器时重复此下载步骤
-
为此,在关闭运行中的 LARS 容器之前,打开另一个命令提示符/终端并提交更改:
docker ps # 在此处记下 container_id docker commit <container_ID> <new_image_name> # 对于 new_image_name,我简单地在当前镜像名称后添加'pfr',表示'首次运行后',例如:lars-nvcuda-pfr
-
这将创建一个更新的镜像,您可以在后续运行中使用它:
docker run --gpus all -p 5000:5000 -p 8080:8080 -v lars_storage:/app/storage lars-nvcuda-pfr
-
注意:完成上述操作后,如果使用
docker images
检查镜像占用的空间,您会注意到占用了大量空间。但是,不要将此处显示的大小视为字面含义!显示的每个镜像的大小包括其所有层的总大小,但其中许多层在镜像之间是共享的,尤其是当这些镜像基于相同的基础镜像或当一个镜像是另一个镜像的提交版本时。要查看 Docker 镜像实际使用的磁盘空间,请使用:docker system df
当前开发路线图
类别 | 任务 | 状态 |
---|---|---|
Bug 修复: | 零字节文本文件创建问题 - 有时如果 OCR/文本提取失败,可能会留下一个 0B 的 .txt 文件,导致进一步的重试尝试认为文件已经加载 | :calendar: 未来任务 |
实用功能: | 以易用性为中心: | |
Azure CV-OCR 免费层 UI 切换 | :white_check_mark: 2024 年 6 月 8 日完成 | |
删除聊天 | :calendar: 未来任务 | |
重命名聊天 | :calendar: 未来任务 | |
PowerShell 安装脚本 | :calendar: 未来任务 | |
Linux 安装脚本 | :calendar: 未来任务 | |
Ollama LLM |