【AI】RAG 实践-Ollama+AnythingLLM 搭建本地知识库



写在前面 / 链接存档

基本cv+后面拿到服务器的个人操作截图,侵删orz

RAG 实践-Ollama+AnythingLLM 搭建本地知识库

什么是RAG

检索增强生成(Retrieval-Augmented Generation),是一种先进的自然语言处理技术架构

  • 它旨在克服传统大型语言模型(LLMs)在处理开放域问题时的信息容量限制时效性不足
  • RAG的核心机制融合了信息检索系统的精确性和语言模型的强大生成能力,为基于自然语言的任务提供了更为灵活和精准的解决方案

什么是RAG

RAG与LLM的关系

  • RAG不是对LLM的替代,而是对其能力的扩展与升级
    • 传统LLM受限于训练数据的边界,对于未见信息快速变化的知识难以有效处理
    • RAG通过动态接入外部资源,使LLM得以即时访问和利用广泛且不断更新的知识库,进而提升模型在问答、对话、文本生成等任务中的表现
  • 此外,RAG框架强调了模型的灵活性和适应性,允许开发者针对不同应用场景定制知识库,从而满足特定领域的需求

RAG的大致流程

RAG的大致流程

  • RAG就像是为大型语言模型(LLM)配备了一个即时查询的“超级知识库”
  • 这个“外挂”不仅扩大了模型的知识覆盖范围,还提高了其回答特定领域问题准确性和时效性

传统的LLM像是一个博学多才但记忆力有限的学者,它依赖于训练时吸收的信息来回答问题

而RAG,则是这位学者随时可以连线的庞大图书馆和实时资讯网络

当面临复杂或最新的查询时,RAG能让模型即时搜索并引用这些外部资源,就像学者翻阅最新的研究资料或在线数据库一样,从而提供更加精准、全面和最新的答案

这种设计尤其适用于需要高度专业化或快速更新信息的场景,比如医学咨询、法律意见、新闻摘要等

  • 基于此,RAG 技术特别适合用来做个人或企业的本地知识库应用,利用现有知识库资料结合 LLM 的能力,针对特定领域知识的问题能够提供自然语言对话交互,且答案比单纯用 LLM 准确性要高得多

实践部分(教程内容)

Ollama + Qwen2.5 +AnythingLLM 实现本地知识库

下载和安装Ollama和基座大模型

  • Ollama官方有 Windows、Mac、Linux版本

  • 也可以选择使用Docker安装Ollama镜像

  • 拉取模型:

    1
    ollama pull llama2
    1
    ollama run llama3

    run 命令,它会在运行之前自动检查模型是否下载,如果没有会自动下载

  • ∵搭建本地知识库以中文为主,所以需要对中文支持好的模型

    • Llama2-Chinese:基于Llama2微调。搜“Chinese”关键词就能找到。
    • Qwen 2:阿里的通义千问。一共有6个尺寸,默认是4b。所有尺寸的模型都支持32K的上下文长度。多语言支持。
  • 选择Qwen 2.5:

    1
    ollama run qwen2.5:7b
  • 模型下载的默认路径是:/Users/${home}/.ollama/models

  • run命令执行完就可以在命令行进行对话

Open WebUI

以下安装步骤来自Open Web UIgithub仓库的README.md

  1. 安装 Open WebUI: 打开终端并运行以下命令以安装 Open WebUI:
1
pip install open-webui
  1. 运行 Open WebUI: 安装后,您可以通过执行以下命令来启动 Open WebUI:
1
open-webui serve
  1. http://localhost:8080 访问本地启动的Open WebUI
  • 还有Docker版本安装,但是目前的环境是Windows本地安装,所以暂时按下不表

AnythingLLM

意外发现还有多模态支持hhhh

  • 下载页面:

  • 使用过程:

    • 启动AnythingLLM后,还需要服务器模式启动Ollama

      1
      ollama serve
    • 启动Ollama后,在Base URL中填:http://127.0.0.1:11434

    • 模型选择之前下载的Qwen2.5: 7b

    • Token context window 可以先用默认的 4096

自分の具体操作

  • 因为服务器需要远程连接所以增加了一点难度

  • ssh连接远程服务器

    • 这次只有2080还是2090了555,但是回答速度依然很快hhh,所以暂时没感觉有什么影响
    • 使用的工具是MobaXterm
  • ollama安装

    1
    curl -fsSL https://ollama.com/install.sh | sh
  • Open webUI

    1
    pip install open-webui
    • 在pip之前先conda create了一个独立环境,因为这个过程要安装的包老多了
    1
    conda create -n env_name python=3.11

    安装时候显示Open webUI指定的python版本是3.11.x,所以conda应该算是必需操作

    • 安装完成后启动Open webUI
    1
    open-webui serve
    • 启动成功后显示

启动成功截图

显示服务挂载到0.0.0.0:8080

但是远程连上的服务器没法开web端,只能考虑挂载到localhost主机

  • 刚好之前部署的时候学会了ssh连接,这次也很丝滑的连上了

ssh把服务代理到localhost的8080端口

  • 在web界面对话过程中,询问“who r u?”,然后看到命令行页面回显

命令行界面回显

安装文档界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/sh
# This script installs AnythingLLMDesktop on Linux.
# Due to READ_ONLY issues on regular mounting of an AppImage
# we need to download the file then unpack it so it can be run.
set -eu

status() { echo ">>> $*" >&2; }
error() { echo "ERROR $*"; exit 1; }
warning() { echo "WARNING: $*"; }

[ "$(uname -s)" = "Linux" ] || error 'This script is intended to run on Linux only.'
if [ "$(id -u)" -eq 0 ]; then
status "This script should not be run as root. Please run it as a regular user."
exit 1
fi

APPIMAGE_URL="https://s3.us-west-1.amazonaws.com/public.useanything.com/latest/AnythingLLMDesktop.AppImage"
APPIMAGE_FILE="AnythingLLMDesktop.AppImage"
EXTRACTED_DIR="anythingllm-desktop"
OUTDIR="$HOME/AnythingLLMDesktop"

rm -rf $OUTDIR
mkdir -p $OUTDIR

status "Downloading latest AnythingLLM Desktop..."
curl --fail --show-error --location --progress-bar -o $OUTDIR/$APPIMAGE_FILE $APPIMAGE_URL

cd $OUTDIR
chmod +x $APPIMAGE_FILE;
status "Extracting..."
./$APPIMAGE_FILE --appimage-extract >/dev/null;
rm -rf $APPIMAGE_FILE
mv squashfs-root $EXTRACTED_DIR
ln -sf $EXTRACTED_DIR/AppRun start

status "AnythingLLMDesktop is ready to run with .$OUTDIR/start."
status "\e[36mHeads up!\e[0mYou can rerun this installer anytime to get the latest version of AnythingLLM without effecting your existing data."
status "Documentation: https://docs.useanything.com"
status "Issues: https://github.com/Mintplex-Labs/anything-llm"
status "\e[36mThanks for using AnythingLLM!\e[0m "
  • 修改地方:OUTDIR="$HOME/AnythingLLMDesktop",该到了自己的目录下

  • 安装完成后的提示信息:"AnythingLLMDesktop is ready to run with .$OUTDIR/start."

    • 显示启动脚本名为start
    • 启动AnythingLLM:./start
    • 有丶神奇:启动后MobaXterm会自己弹出来窗口
    • 一系列注册初始化操作后成功启动服务

    AnythingLLM主界面

  • 后面还需要上传自己的知识库文件,经过Embedding之后形成向量库,但是由于我的文件太大了,需要的时间比较多,所以就还没有进行到那一步

  • 后面再说。

  • Copyrights © 2024-2025 brocademaple
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信