Mac 上编译 Ragflow

发布于:2025-03-16 ⋅ 阅读:(18) ⋅ 点赞:(0)

说明

一开始尝试按源码启动的方式(https://ragflow.io/docs/dev/launch_ragflow_from_source),直接运行 Ragflow,但是在安装 Python 依赖的时候就报错了。于是尝试使用 Docker 的方式运行(https://ragflow.io/docs/dev/build_docker_image)。为什么呢?因为目前官方提供的所有 Docker 镜像均基于 x86 架构构建,并不提供基于 ARM64 的 Docker 镜像。

我这里使用 OrbStack 工具来管理容器。

编译

步骤

  1. 安装uv
# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh

# 根据提示,执行 source 命令,或者重开 termial
  1. 获取源码编译镜像
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv run download_deps.py
docker build -f Dockerfile.deps -t infiniflow/ragflow_deps .
docker build --build-arg LIGHTEN=1 -f Dockerfile -t infiniflow/ragflow:nightly-slim .

其中 download_deps.py会下载一些基础依赖和模型,可以根据自己的实际情况调整模型的下载,比如是否下载模型,模型的下载地址等(未经完全验证是否可以屏蔽模型)。

以下模型下载的关键代码:

# 镜像列表
repos = [
    "InfiniFlow/text_concat_xgb_v1.0",
    "InfiniFlow/deepdoc",
    "InfiniFlow/huqie",
    "BAAI/bge-large-zh-v1.5",
    "BAAI/bge-reranker-v2-m3",
    "maidalun1020/bce-embedding-base_v1",
    "maidalun1020/bce-reranker-base_v1",
]

# 下载镜像
for repo_id in repos:
    print(f"Downloading huggingface repo {repo_id}...")
    download_model(repo_id)

注意事项

特别重要的是,编译镜像的过程,注意开启全局的科学上网。主要可能碰到的问题,比如组件下载不成功,组件下载不完整等等。

如果组件下载不成功的话,重新执行一遍就好了。

我就在最后一步 docker build 的时候出现问题,看提示就是需要安装的包出错了,在 ragflow 目录下找到对应下载的文件删掉,然后重新执行 uv run download_deps.py

编译的过程时间可能比较长,需要耐心等待。

运行

需要远行 Ragflow 还需要做些配置。打开 docker/.env,找到 RAGFLOW_IMAGE的配置,把镜像地址修改成 infiniflow/ragflow:nightly-slim

接下来通过docker compose 启动服务。

cd docker
$ docker compose -f docker-compose-macos.yml up -d

耐心等待相关的服务启动,然后使用http://127.0.0.1 访问。

默认没有用户,直接注册一个就可以,第一个用户会成为管理员。

在这里插入图片描述

问题

自己碰的的问题,是添加模型的时候出错。看了ragflow 群里的问题,这个问题也蛮多人问的。

ragflow 提供的 docker compose 使用的是 ragflow 的对应的网桥就是 docker_ragflow,也可以通过如下命令查看。

docker network ls

# 结果
881b4fc04bf4   bridge           bridge    local
67e9e0de36bc   docker_ragflow   bridge    local
4e76407faa32   host             host      local
d611379d4316   none             null      local

找到了网桥,我们可以通过 docker inspect 查看具体的ip,找到 Gateway 的部分就是宿主机的 ip

docker inspect docker_ragflow

# Gateway
[
    {
        "Name": "docker_ragflow",
        "Id": "67e9e0de36bc646402f69919aaafa30d663f27eb66a6e63bfaf8f75fc59c8a01",
        "Created": "2025-03-14T14:19:59.789673667+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "192.168.97.0/24",
                    "Gateway": "192.168.97.1"
                }
            ]

找到了正确的地址,但还是不能通过宿主机地址访问,那么检查 ollama 的配置,是否导出对应的变量。

export OLLAMA_ORIGINS="*"
export OLLAMA_HOST=0.0.0.0:11434

# 如果没有添加,需要补上
# source .zshrc

如果没有添加,重新添加后重启 ollama。然后通过本地 IP,而不是 127.0.0.1 或者 localhost 访问,是否正常。
在这里插入图片描述

如果此时提示网页无法访问,这时应该运行 ollama serve,开启 ollama 的服务。

ollama serve

# 可以看到类似的提示信息。
2025/03/14 14:48:19 routes.go:1225: INFO server config env="map[HTTPS_PROXY: HTTP_PROXY: NO_PROXY: OLLAMA_CONTEXT_LENGTH:2048 OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_GPU_OVERHEAD:0 OLLAMA_HOST:http://0.0.0.0:11434 OLLAMA_KEEP_ALIVE:5m0s OLLAMA_KV_CACHE_TYPE: OLLAMA_LLM_LIBRARY: OLLAMA_LOAD_TIMEOUT:5m0s OLLAMA_MAX_LOADED_MODELS:0 OLLAMA_MAX_QUEUE:512 OLLAMA_MODELS:/Users/airhead/.ollama/models OLLAMA_MULTIUSER_CACHE:false OLLAMA_NEW_ENGINE:false OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NUM_PARALLEL:0 OLLAMA_ORIGINS:[* http://localhost https://localhost http://localhost:* https://localhost:* http://127.0.0.1 https://127.0.0.1 http://127.0.0.1:* https://127.0.0.1:* http://0.0.0.0 https://0.0.0.0 http://0.0.0.0:* https://0.0.0.0:* app://* file://* tauri://* vscode-webview://* vscode-file://*] OLLAMA_SCHED_SPREAD:false http_proxy: https_proxy: no_proxy:]"

填写网桥的 ip 之后还是无法访问,那需要确定实际的网桥 ip 是否真的存在。

ipconfig grep | 192.168.7.1

如果没有结果就说明 ip 没有真正起来,导致 ip 无法访问。接着通过 ifconfig,找到可访问的 ip,比如我这里实际可访问的网桥是 bridge102(这里暂时不确定为什么。)

ipconfig

bridge102: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=63<RXCSUM,TXCSUM,TSO4,TSO6>
        ether fa:4d:89:d7:be:66
        inet 198.19.249.3 netmask 0xfffffe00 broadcast 198.19.249.255
        inet6 fe80::f84d:89ff:fed7:be66%bridge102 prefixlen 64 scopeid 0x1e 
        inet6 fd07:b51a:cc66:0:a617:db5e:ab7:e9f1 prefixlen 64 
        Configuration:
                id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
                maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
                root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
                ipfilter disabled flags 0x0
        member: vmenet3 flags=10003<LEARNING,DISCOVER,CSUM>
                ifmaxaddr 0 port 29 priority 0 path cost 0
        nd6 options=201<PERFORMNUD,DAD>
        media: autoselect
        status: active
        
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=63<RXCSUM,TXCSUM,TSO4,TSO6>
        ether fa:4d:89:d7:be:64
        inet 192.168.97.0 netmask 0xffffff00 broadcast 192.168.97.255
        inet6 fe80::f84d:89ff:fed7:be64%bridge100 prefixlen 64 scopeid 0x18 
        Configuration:
                id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
                maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
                root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
                ipfilter disabled flags 0x0
        member: vmenet0 flags=10003<LEARNING,DISCOVER,CSUM>
                ifmaxaddr 0 port 23 priority 0 path cost 0
        nd6 options=201<PERFORMNUD,DAD>
        media: autoselect
        status: active
        
ifconfig |grep 198.19.249.3         
        inet 198.19.249.3 netmask 0xfffffe00 broadcast 198.19.249.255

之后使用了 198.19.249.3 这个ip 可以正常访问,配置 llm 也正常。

在这里插入图片描述

为什么不用本机 ip 而用 docker 网桥的 ip 呢?因为是笔记本,通过 Wi-Fi 获取的 ip 可能变化,而网桥 ip 是稳定的。

开发

VS Code 安装 Remote Development 插件。它包含多个插件,其中 Dev Containters 可以连接到 Docker 容器作为开发环境,这样的好处是开发环境与部署环境一致。

在这里插入图片描述

当安装好 Remote Development,就可以通过 Remote Explorer 查看已经安装的容器,并通过点击对应容器的箭头(注意下图红色框的部分)。

在这里插入图片描述

进入到容器内部,选对应的目录,就可以打开 /ragflow,这样就能看到实际的代码了。

在这里插入图片描述

其他

  1. 还需要调整 Dockerfile 方便挂载本地的源码位置,这样方便通过外部的 Git 管理开发代码。
  2. 在配置 LLM 模型的使用有个支持的最大 Token 数,这个值应该怎么填呢?通过 ollama show查看对应模型的信息,其中 context length 就是模型的最大 Token 数了。

在这里插入图片描述

ollama show deepseek-r1:7b

# 
  Model
    architecture        qwen2     
    parameters          7.6B      
    context length      131072    
    embedding length    3584      
    quantization        Q4_K_M   
  1. 因为 ollama 暂时不支持重排,需要安装 xinterface。目前通过容器安装 xinterface,可能镜像或者配置选错了,导致 xinterface 的镜像无法启动。
  2. 因为 OrbStack 也可以运行虚拟机,理论上来说,可以通过安装 Ubuntu 虚拟机的方式,照着 Dockerfile 文件安装相关的依赖。

网站公告

今日签到

点亮在社区的每一天
去签到