無縫融入,即刻智慧[一]:Dify-LLM大模型平臺,零編碼整合嵌入第三方系統,42K+星標見證專屬智慧方案[含ollama部署]

汀、人工智能發表於2024-08-12

無縫融入,即刻智慧[一]:Dify-LLM大模型平臺,零編碼整合嵌入第三方系統,42K+星標見證專屬智慧方案

1.Dify 簡介

1.1 功能情況

Dify,一款引領未來的開源大語言模型(LLM)應用開發平臺,革新性地融合了後端即服務(Backend as a Service,BaaS)與LLMOps的精髓,為開發者鋪設了一條從創意原型到高效生產的快車道。其設計旨在打破技術壁壘,讓非技術背景的使用者也能輕鬆參與至AI應用的構思與資料運營之中,共同塑造智慧未來。

Dify內嵌了構建LLM應用的全方位技術基石,覆蓋了從模型庫的海量選擇(支援數百種模型)到高效直觀的Prompt編排介面,再到卓越品質的檢索增強生成(RAG)引擎與穩固可靠的Agent框架。這一整合的技術棧,不僅極大地簡化了開發流程,還賦予了開發者前所未有的靈活性與創意空間。透過其靈活的流程編排功能及使用者友好的介面與API介面,Dify幫助開發者有效規避了重複勞動,使他們能夠將寶貴的時間和精力集中於創新思考與業務需求的深度挖掘上。

Dify 一詞源自 Define + Modify,意指定義並且持續的改進你的 AI 應用,它是為你而做的(Do it for you)。

  • 核心功能列表:

    1. 工作流: 在畫布上構建和測試功能強大的 AI 工作流程,利用以下所有功能以及更多功能。

    1. 全面的模型支援: 與數百種專有/開源 LLMs 以及數十種推理提供商和自託管解決方案無縫整合,涵蓋 GPT、Mistral、Llama3 以及任何與 OpenAI API 相容的模型。

    1. Prompt IDE: 用於製作提示、比較模型效能以及向基於聊天的應用程式新增其他功能(如文字轉語音)的直觀介面。

    2. RAG Pipeline: 廣泛的 RAG 功能,涵蓋從文件攝入到檢索的所有內容,支援從 PDF、PPT 和其他常見文件格式中提取文字的開箱即用的支援。

    1. Agent 智慧體: 您可以基於 LLM 函式呼叫或 ReAct 定義 Agent,併為 Agent 新增預構建或自定義工具。Dify 為 AI Agent 提供了50多種內建工具,如谷歌搜尋、DALL·E、Stable Diffusion 和 WolframAlpha 等。

    2. LLMOps: 隨時間監視和分析應用程式日誌和效能。您可以根據生產資料和標註持續改進提示、資料集和模型。

    1. 後端即服務: 所有 Dify 的功能都帶有相應的 API,因此您可以輕鬆地將 Dify 整合到自己的業務邏輯中。
  • 功能對比

  • 框架原理圖

1.2 關鍵技術特性

  • 本地模型推理 Runtime 支援:Xinference(推薦),OpenLLM,LocalAI,ChatGLM,Ollama,NVIDIA TIS

  • Agentic Workflow 特性:支援節點

    • LLM
    • 知識庫檢索
    • 問題分類
    • 條件分支
    • 程式碼執行
    • 模板轉換
    • HTTP 請求
    • 工具
  • RAG特性:

    • 索引方式
      • 關鍵詞
      • 文字向量
      • 由 LLM 輔助的問題-分段模式
    • 檢索方式
      • 關鍵詞
      • 文字相似度匹配
      • 混合檢索
      • 多路召回
    • 召回最佳化技術
      • 使用 ReRank 模型
  • 向量資料庫支援:Qdrant,Weaviate,Zilliz/Milvus,Pgvector,Pgvector-rs,Chroma,OpenSearch,TiDB,Tencent Vector,Oracle

1.3 雲服務

Dify 為所有人提供了雲服務,你無需自己部署即可使用 Dify 的完整功能。要使用 Dify 雲服務,你需要有一個 GitHub 或 Google 賬號。

  • 登入 Dify 雲服務,建立一個或加入已有的 Workspace

  • 配置你的模型供應商,或使用我們提供的託管模型供應商

  • 可以建立應用了

1.4 更多LLM平臺參考:

  • RAG+AI工作流+Agent:LLM框架該如何選擇,全面對比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推薦

  • 智勝未來:國內大模型+Agent應用案例精選,以及主流Agent框架開源專案推薦

2. 社群版部署

2.1 Docker Compose 部署(推薦)

  • docker安裝可參考下述文章:

    • 一文帶你入門向量資料庫milvus:含docker安裝、milvus安裝使用、attu 視覺化,完整指南啟動 Milvus 進行了向量相似度搜尋 2.2節docker hub加速
    • t推薦檢視:告別DockerHub 映象下載難題:掌握高效下載策略,暢享無縫開發體驗
    • 安裝 Docker
    • 安裝 Docker Compose
  • 克隆 Dify 程式碼倉庫

git clone https://github.com/langgenius/dify.git
  • 啟動 Dify
#進入 Dify 原始碼的 docker 目錄,執行一鍵啟動命令:
cd dify/docker
cp .env.example .env
docker compose up -d

如果您的系統安裝了 Docker Compose V2 而不是 V1,請使用 docker compose 而不是 docker-compose。透過$ docker compose version檢查這是否為情況。在這裡閱讀更多資訊。

遇到pulling失敗問題,請新增映象源,參考上述推薦文章有解決方案

  • 部署結果展示:

最後檢查是否所有容器都正常執行:

docker compose ps

包括 3 個業務服務 api / worker / web,以及 6 個基礎元件 weaviate / db / redis / nginx / ssrf_proxy / sandbox 。

NAME                  IMAGE                              COMMAND                  SERVICE      CREATED          STATUS                    PORTS
docker-api-1          langgenius/dify-api:0.6.16         "/bin/bash /entrypoi…"   api          15 minutes ago   Up 15 minutes             5001/tcp
docker-db-1           postgres:15-alpine                 "docker-entrypoint.s…"   db           15 minutes ago   Up 15 minutes (healthy)   5432/tcp
docker-nginx-1        nginx:latest                       "sh -c 'cp /docker-e…"   nginx        15 minutes ago   Up 15 minutes             0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp
docker-redis-1        redis:6-alpine                     "docker-entrypoint.s…"   redis        15 minutes ago   Up 15 minutes (healthy)   6379/tcp
docker-sandbox-1      langgenius/dify-sandbox:0.2.1      "/main"                  sandbox      15 minutes ago   Up 15 minutes             
docker-ssrf_proxy-1   ubuntu/squid:latest                "sh -c 'cp /docker-e…"   ssrf_proxy   15 minutes ago   Up 15 minutes             3128/tcp
docker-weaviate-1     semitechnologies/weaviate:1.19.0   "/bin/weaviate --hos…"   weaviate     15 minutes ago   Up 15 minutes             
docker-web-1          langgenius/dify-web:0.6.16         "/bin/sh ./entrypoin…"   web          15 minutes ago   Up 15 minutes             3000/tcp
docker-worker-1       langgenius/dify-api:0.6.16         "/bin/bash /entrypoi…"   worker       15 minutes ago   Up 15 minutes             5001/tcp
  • 更新 Dify

進入 dify 原始碼的 docker 目錄,按順序執行以下命令:

cd dify/docker
docker compose down
git pull origin main
docker compose pull
docker compose up -d

同步環境變數配置 (重要!)

  • 如果 .env.example 檔案有更新,請務必同步修改您本地的 .env 檔案。

  • 檢查 .env 檔案中的所有配置項,確保它們與您的實際執行環境相匹配。您可能需要將 .env.example 中的新變數新增到 .env 檔案中,並更新已更改的任何值。

  • 訪問 Dify

docker 部署執行完成後,輸入指令sudo docker ps即可看到執行的容器,其中在執行的容器列表可以看到有個 nginx 的容器,且對外訪問的是 80 埠,這個就是外部訪問的埠,下面我們進行本地訪問測試

在瀏覽器中輸入 http://localhost 訪問 Dify。訪問 http://127.0.0.1:80 即可使用本地部署的 Dify。

10.80.2.195:80

隨便填寫,進入介面

  • 自定義配置

編輯 .env 檔案中的環境變數值。然後,重新啟動 Dify:

docker compose down
docker compose up -d

完整的環境變數集合可以在 docker/.env.example 中找到。

2.2 本地碼源部署

  • 前置條件

Clone Dify 程式碼:

git clone https://github.com/langgenius/dify.git

在啟用業務服務之前,需要先部署 PostgresSQL / Redis / Weaviate(如果本地沒有的話),可以透過以下命令啟動:

cd docker
cp middleware.env.example middleware.env
docker compose -f docker-compose.middleware.yaml up -d
  • 服務端部署

    • API 介面服務
    • Worker 非同步佇列消費服務
  • 安裝基礎環境
    伺服器啟動需要 Python 3.10.x。推薦使用anaconda安裝,參考文章:

    • Linux和Windows系統下:安裝Anaconda
    • Anaconda安裝超簡潔教程
    • 也可以使用pyenvpyenv install 3.10,切換到 "3.10" Python 環境pyenv global 3.10
  1. 進入 api 目錄
cd api
  1. 複製環境變數配置檔案.
cp .env.example .env
  1. 生成隨機金鑰,並替換 .env 中 SECRET_KEY 的值
openssl rand -base64 42
sed -i 's/SECRET_KEY=.*/SECRET_KEY=<your_value>/' .env
  1. 安裝依賴包

Dify API 服務使用 Poetry 來管理依賴。您可以執行 poetry shell 來啟用環境。

poetry env use 3.10
poetry install
  1. 執行資料庫遷移,將資料庫結構遷移至最新版本。
poetry shell
flask db upgrade
  1. 啟動 API 服務
flask run --host 0.0.0.0 --port=5001 --debug

正確輸出:

* Debug mode: on
INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5001
INFO:werkzeug:Press CTRL+C to quit
INFO:werkzeug: * Restarting with stat
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger PIN: 695-801-919

  1. 啟動 Worker 服務

用於消費非同步佇列任務,如資料集檔案匯入、更新資料集文件等非同步操作。 Linux / MacOS 啟動:

celery -A app.celery worker -P gevent -c 1 -Q dataset,generation,mail,ops_trace --loglevel INFO

如果使用 Windows 系統啟動,請替換為該命令:

celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail,ops_trace --loglevel INFO
 -------------- celery@TAKATOST.lan v5.2.7 (dawn-chorus)
--- ***** ----- 
-- ******* ---- macOS-10.16-x86_64-i386-64bit 2023-07-31 12:58:08
- *** --- * --- 
- ** ---------- [config]
- ** ---------- .> app:         app:0x7fb568572a10
- ** ---------- .> transport:   redis://:**@localhost:6379/1
- ** ---------- .> results:     postgresql://postgres:**@localhost:5432/dify
- *** --- * --- .> concurrency: 1 (gevent)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> dataset          exchange=dataset(direct) key=dataset
                .> generation       exchange=generation(direct) key=generation
                .> mail             exchange=mail(direct) key=mail

[tasks]
  . tasks.add_document_to_index_task.add_document_to_index_task
  . tasks.clean_dataset_task.clean_dataset_task
  . tasks.clean_document_task.clean_document_task
  . tasks.clean_notion_document_task.clean_notion_document_task
  . tasks.create_segment_to_index_task.create_segment_to_index_task
  . tasks.deal_dataset_vector_index_task.deal_dataset_vector_index_task
  . tasks.document_indexing_sync_task.document_indexing_sync_task
  . tasks.document_indexing_task.document_indexing_task
  . tasks.document_indexing_update_task.document_indexing_update_task
  . tasks.enable_segment_to_index_task.enable_segment_to_index_task
  . tasks.generate_conversation_summary_task.generate_conversation_summary_task
  . tasks.mail_invite_member_task.send_invite_member_mail_task
  . tasks.remove_document_from_index_task.remove_document_from_index_task
  . tasks.remove_segment_from_index_task.remove_segment_from_index_task
  . tasks.update_segment_index_task.update_segment_index_task
  . tasks.update_segment_keyword_index_task.update_segment_keyword_index_task

[2024-07-31 13:58:08,831: INFO/MainProcess] Connected to redis://:**@localhost:6379/1
[2024-07-31 13:58:08,840: INFO/MainProcess] mingle: searching for neighbors
[2024-07-31 13:58:09,873: INFO/MainProcess] mingle: all alone
[2024-07-31 13:58:09,886: INFO/MainProcess] pidbox: Connected to redis://:**@localhost:6379/1.
[2024-07-31 13:58:09,890: INFO/MainProcess] celery@TAKATOST.lan ready.
  • 前端頁面部署

  • 安裝基礎環境
    Web 前端服務啟動需要用到 Node.js v18.x (LTS)NPM 版本 8.x.xYarn

  • 安裝 NodeJS + NPM
    進入 https://nodejs.org/en/download,選擇對應作業系統的 v18.x 以上的安裝包下載並安裝,建議 stable 版本,已自帶 NPM。

    1. 進入 web 目錄,安裝依賴包
    cd web
    npm install
    
    1. 配置環境變數。在當前目錄下建立檔案 .env.local,並複製.env.example中的內容。根據需求修改這些環境變數的值:
    #For production release, change this to PRODUCTION
    NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
    #The deployment edition, SELF_HOSTED
    NEXT_PUBLIC_EDITION=SELF_HOSTED
    #The base URL of console application, refers to the Console base URL of WEB service if console domain is
    #different from api or web app domain.
    #example: http://cloud.dify.ai/console/api
    NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
    #The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from
    #console or api domain.
    #example: http://udify.app/api
    NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api
    
    #SENTRY
    NEXT_PUBLIC_SENTRY_DSN=
    NEXT_PUBLIC_SENTRY_ORG=
    NEXT_PUBLIC_SENTRY_PROJECT=
    
    1. 構建程式碼,啟動 web 服務
    npm run build
    
    npm run start
    #or
    yarn start
    #or
    pnpm start
    
    
    • 終端會輸出如下資訊:
    ready - started server on 0.0.0.0:3000, url: http://localhost:3000
    warn  - You have enabled experimental feature (appDir) in next.config.js.
    warn  - Experimental features are not covered by semver, and may cause unexpected or broken application behavior. Use at your own risk.
    info  - Thank you for testing `appDir` please leave your feedback at https://nextjs.link/app-feedback
    
  • 訪問 Dify

在瀏覽器中輸入 http://localhost 訪問 Dify。訪問 http://127.0.0.1:3000 即可使用本地部署的 Dify。

2.3 單獨啟動前端 Docker 容器

當單獨開發後端時,可能只需要原始碼啟動後端服務,而不需要本地構建前端程式碼並啟動,因此可以直接透過拉取 docker 映象並啟動容器的方式來啟動前端服務,以下為具體步驟:

  • 直接使用 DockerHub 映象
docker run -it -p 3000:3000 -e CONSOLE_API_URL=http://127.0.0.1:5001 -e APP_API_URL=http://127.0.0.1:5001 langgenius/dify-web:latest
  • 原始碼構建 Docker 映象

    1. 構建前端映象
    cd web && docker build . -t dify-web
    
    1. 啟動前端映象
    docker run -it -p 3000:3000 -e CONSOLE_API_URL=http://127.0.0.1:5001 -e APP_API_URL=http://127.0.0.1:5001 dify-web
    
    1. 當控制檯域名和 Web APP 域名不一致時,可單獨設定 CONSOLE_URL 和 APP_URL
      本地訪問 http://127.0.0.1:3000

3. Ollama 部署的本地模型

Ollama 是一個開源框架,專為在本地機器上便捷部署和執行大型語言模型(LLM)而設計。,這是 Ollama 的官網地址:https://ollama.com/

  • 以下是其主要特點和功能概述:

    1. 簡化部署:Ollama 目標在於簡化在 Docker 容器中部署大型語言模型的過程,使得非專業使用者也能方便地管理和執行這些複雜的模型。
    2. 輕量級與可擴充套件:作為輕量級框架,Ollama 保持了較小的資源佔用,同時具備良好的可擴充套件性,允許使用者根據需要調整配置以適應不同規模的專案和硬體條件。
    3. API支援:提供了一個簡潔的 API,使得開發者能夠輕鬆建立、執行和管理大型語言模型例項,降低了與模型互動的技術門檻。
    4. 預構建模型庫:包含一系列預先訓練好的大型語言模型,使用者可以直接選用這些模型應用於自己的應用程式,無需從頭訓練或自行尋找模型源

3.1 一鍵安裝

curl: (77) error setting certificate verify locations:CAfile: /data/usr/local/anaconda/ssl/cacert.pemCApath: none
報錯原因: cacert.pem 的定址路徑 CAfile 不對,也就是在該路徑下找不到檔案。

  • 解決方法:
  1. 找到你的 cacert.pem 檔案所在位置 /path/to/cacert.pem。如果你沒有該證書,可以先在 https://curl.se/ca/cacert.pem 下載,儲存在某個目錄中。
  2. 設定環境變數
export CURL_CA_BUNDLE=/path/to/cacert.pem
#將"/path/to/cacert.pem"替換為你的證書檔案的實際路徑。
export CURL_CA_BUNDLE=/www/anaconda3/anaconda3/ssl/cacert.pem
  • 執行下載
curl -fsSL https://ollama.com/install.sh | sh

3.2 手動安裝

ollama中文網:https://ollama.fan/getting-started/linux/

  1. 下載 ollama 二進位制檔案:Ollama 以自包含的二進位制檔案形式分發。將其下載到您的 PATH 中的目錄:
sudo curl -L https://ollama.com/download/ollama-linux-amd64 -o /usr/bin/ollama

sudo chmod +x /usr/bin/ollama
  1. 將 Ollama 新增為啟動服務(推薦):為 Ollama 建立一個使用者:
sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama

3.在 /etc/systemd/system/ollama.service 中建立一個服務檔案:

#vim ollama.service 

[Unit]

Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3

[Install]
WantedBy=default.target
  1. 然後啟動服務:
sudo systemctl enable ollama
  1. 啟動 Ollama¶
    使用 systemd 啟動 Ollama:
sudo systemctl start ollama
  1. 更新,檢視日誌
#再次執行
sudo curl -L https://ollama.com/download/ollama-linux-amd64 -o /usr/bin/ollama
sudo chmod +x /usr/bin/ollama

#要檢視作為啟動服務執行的 Ollama 的日誌,請執行:
journalctl -u ollama
  1. 步驟7:關閉 Ollama 服務
#關閉ollama服務
service ollama stop

3.3 Linux內網離線安裝Ollama

  1. 檢視伺服器CPU的型號
##檢視Linux系統CPU型號命令,我的伺服器cpu型號是x86_64
lscpu
  1. 步驟2:根據CPU型號下載Ollama安裝包,並儲存到目錄

下載地址: https://github.com/ollama/ollama/releases/

#x86_64 CPU選擇下載ollama-linux-amd64
#aarch64|arm64 CPU選擇下載ollama-linux-arm64

#有網機器下載過來也一樣
wget https://ollama.com/download/ollama-linux-amd64 

下載到離線伺服器上:/usr/bin/ollama ollama就是你下載的ollama-linux-amd64 改名了(mv),其他步驟一致

3.4 修改儲存路徑

Ollama模型預設儲存在:

  • macOS: ~/.ollama/models
  • Linux: /usr/share/ollama/.ollama/models
  • Windows: C:\Users<username>.ollama\models

如果 Ollama 作為 systemd 服務執行,則應使用以下命令設定環境變數systemctl:

  1. 透過呼叫 來編輯 systemd 服務systemctl edit ollama.service。這將開啟一個編輯器。

  2. Environment對於每個環境變數,在部分下新增一行[Service]:

直接在“/etc/systemd/system/ollama.service”增了2行:

[Service]
Environment="OLLAMA_HOST=0.0.0.0:7861"
Environment="OLLAMA_MODELS=/www/algorithm/LLM_model/models"
  1. 儲存並退出。

  2. 重新載入systemd並重新啟動 Ollama:

systemctl restart ollama

參考連結:https://github.com/ollama/ollama/blob/main/docs/faq.md

  1. 使用 systemd 啟動 Ollama:
sudo systemctl start ollama
  1. 終止

終止(ollama載入的大模型將會停止佔用視訊記憶體,此時ollama屬於失聯狀態,部署和執行操作失效,會報錯:

Error: could not connect to ollama app, is it running?需要啟動後,才可以進行部署和執行操作

systemctl stop ollama.service
  • 終止後啟動(啟動後,可以接著使用ollama 部署和執行大模型)
systemctl start ollama.service

3.5 啟動LLM

  • 下載模型
ollama pull llama3.1
ollama pull qwen2

  • 執行大模型
ollama run llama3.1
ollama run qwen2

  • 檢視是否識別到大模型: ollama list, 如果成功, 則會看到大模型
ollama list
NAME            ID              SIZE    MODIFIED    
qwen2:latest    e0d4e1163c58    4.4 GB  3 hours ago
  • 使用該ollama ps命令檢視當前已載入到記憶體中的模型。
NAME            ID              SIZE    PROCESSOR       UNTIL              
qwen2:latest    e0d4e1163c58    5.7 GB  100% GPU        3 minutes from now
  • nvidia-smi檢視
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.10              Driver Version: 535.86.10    CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  Tesla V100-SXM2-32GB           On  | 00000000:00:08.0 Off |                    0 |
| N/A   35C    P0              56W / 300W |   5404MiB / 32768MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A   3062036      C   ...unners/cuda_v11/ollama_llama_server     5402MiB |
+---------------------------------------------------------------------------------------+
  • 啟動後,我們可驗證是否可用:
curl http://10.80.2.195:7861/api/chat -d '{
  "model": "llama3.1",
  "messages": [
    { "role": "user", "content": "why is the sky blue?" }
  ]
}'

3.6 更多其他配置

Ollama 可以設定的環境變數

  • OLLAMA_HOST:這個變數定義了Ollama監聽的網路介面。透過設定OLLAMA_HOST=0.0.0.0,我們可以讓Ollama監聽所有可用的網路介面,從而允許外部網路訪問。

  • OLLAMA_MODELS:這個變數指定了模型映象的儲存路徑。透過設定OLLAMA_MODELS=F:\OllamaCache,我們可以將模型映象儲存在E盤,避免C盤空間不足的問題。

  • OLLAMA_KEEP_ALIVE:這個變數控制模型在記憶體中的存活時間。設定OLLAMA_KEEP_ALIVE=24h可以讓模型在記憶體中保持24小時,提高訪問速度。

  • OLLAMA_PORT:這個變數允許我們更改Ollama的預設埠。例如,設定OLLAMA_PORT=8080可以將服務埠從預設的11434更改為8080。

  • OLLAMA_NUM_PARALLEL:這個變數決定了Ollama可以同時處理的使用者請求數量。設定OLLAMA_NUM_PARALLEL=4可以讓Ollama同時處理兩個併發請求。

  • OLLAMA_MAX_LOADED_MODELS:這個變數限制了Ollama可以同時載入的模型數量。設定OLLAMA_MAX_LOADED_MODELS=4可以確保系統資源得到合理分配。

Environment="OLLAMA_PORT=9380" 沒有用

  • 這樣指定:Environment="OLLAMA_HOST=0.0.0.0:7861"

  • 指定 GPU
    本地有多張 GPU,如何用指定的 GPU 來執行 Ollama? 在Linux上建立如下配置檔案,並配置環境變數 CUDA_VISIBLE_DEVICES 來指定執行 Ollama 的 GPU,再重啟 Ollama 服務即可【測試序號從0還是1開始,應是從0開始】。

vim /etc/systemd/system/ollama.service
[Service]
Environment="CUDA_VISIBLE_DEVICES=0,1"

3.7 Ollama常見命令

  1. 重啟 ollama
systemctl daemon-reload
systemctl restart ollama
  1. 重啟 ollama 服務

ubuntu/debian

sudo apt update
sudo apt install lsof
stop ollama
lsof -i :11434
kill <PID>
ollama serve


  • Ubuntu
sudo apt update
sudo apt install lsof
stop ollama
lsof -i :11434
kill <PID>
ollama serve

  1. 確認服務埠狀態:
netstat -tulpn | grep 11434

  1. 配置服務

為使外網環境能夠訪問到服務,需要對 HOST 進行配置。

開啟配置檔案:

vim /etc/systemd/system/ollama.service

根據情況修改變數 Environment:

伺服器環境下:

Environment="OLLAMA_HOST=0.0.0.0:11434"

虛擬機器環境下:

Environment="OLLAMA_HOST=伺服器內網IP地址:11434"

3.8 解除安裝Ollama

如果決定不再使用Ollama,可以透過以下步驟將其完全從系統中移除:

(1)停止並禁用服務:

sudo systemctl stop ollama
sudo systemctl disable ollama

(2)刪除服務檔案和Ollama二進位制檔案:

sudo rm /etc/systemd/system/ollama.service 
sudo rm $(which ollama)

(3)清理Ollama使用者和組:

sudo rm -r /usr/share/ollama
sudo userdel ollama
sudo groupdel ollama

透過以上步驟,不僅能夠在Linux平臺上成功安裝和配置Ollama,還能夠靈活地進行更新和解除安裝。

4.配置LLM+Dify

  • 確認服務埠狀態:
netstat -tulnp | grep ollama
#netstat -tulpn | grep 11434

  • 報錯: "Error: could not connect to ollama app, is it running?"

參考連結:https://stackoverflow.com/questions/78437376/run-ollama-run-llama3-in-colab-raise-err-error-could-not-connect-to-ollama

/etc/systemd/system/ollama.service檔案是:

[Service]
ExecStart=/usr/local/bin/ollama serve
Environment="OLLAMA_HOST=0.0.0.0:7861"
Environment="OLLAMA_KEEP_ALIVE=-1"
  • 執行指令
export OLLAMA_HOST=0.0.0.0:7861
ollama list
ollama run llama3.1

#直接新增到環境變數也可以
vim ~/.bashrc 
source ~/.bashrc

在 設定 > 模型供應商 > Ollama 中填入:

  • 模型名稱:llama3.1

  • 基礎 URL:http://<your-ollama-endpoint-domain>:11434

    • 此處需填寫可訪問到的 Ollama 服務地址。
    • 若 Dify 為 docker 部署,建議填寫區域網 IP 地址,如:http://10.80.2.195:11434 或 docker 宿主機 IP 地址,如:http://172.17.0.1:11434
    • 若為本地原始碼部署,可填寫 http://localhost:11434
  • 模型型別:對話

  • 模型上下文長度:4096

    • 模型的最大上下文長度,若不清楚可填寫預設值 4096。
  • 最大 token 上限:4096

    • 模型返回內容的最大 token 數量,若模型無特別說明,則可與模型上下文長度保持一致。
  • 是否支援 Vision:是

    • 當模型支援圖片理解(多模態)勾選此項,如 llava。
  • 點選 "儲存" 校驗無誤後即可在應用中使用該模型。

  • Embedding 模型接入方式與 LLM 類似,只需將模型型別改為 Text Embedding 即可。

  • 如果您使用Docker部署Dify和Ollama,您可能會遇到以下錯誤:
httpconnectionpool(host=127.0.0.1, port=11434): max retries exceeded with url:/cpi/chat (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8562812c20>: fail to establish a new connection:[Errno 111] Connection refused'))

httpconnectionpool(host=localhost, port=11434): max retries exceeded with url:/cpi/chat (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8562812c20>: fail to establish a new connection:[Errno 111] Connection refused'))

這個錯誤是因為 Docker 容器無法訪問 Ollama 服務。localhost 通常指的是容器本身,而不是主機或其他容器。要解決此問題,您需要將 Ollama 服務暴露給網路。

4.1.多模型對比

參考單個模型部署一樣,進行再一次配置新增即可

  • 需要注意的是新增完新的模型配置後,需要重新整理dify網頁,直接網頁端重新整理就好,新新增的模型就會載入進來

  • 可以看到呼叫後模型資源消耗情況

更多推薦

  • (Cpolar內網穿透)Linux系統Docker搭建Dify平臺並實現遠端構建生成式AI應用

  • 更多LLM平臺參考:

    • RAG+AI工作流+Agent:LLM框架該如何選擇,全面對比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推薦

    • 智勝未來:國內大模型+Agent應用案例精選,以及主流Agent框架開源專案推薦

  • 官方網址:https://dify.ai/zh

  • github地址:https://github.com/langgenius/dify/tree/main

  • ollama中文網址:https://ollama.fan/

  • ollama安裝教程:https://ollama.fan/getting-started/linux/

  • Ollama Linux部署與應用LLama 3

更多優質內容請關注公號:汀丶人工智慧;會提供一些相關的資源和優質文章,免費獲取閱讀。

更多優質內容請關注CSDN:汀丶人工智慧;會提供一些相關的資源和優質文章,免費獲取閱讀。

相關文章