私有化部署 Dify+Ollama并使用qwen2快速搭建 AI 应用
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。
由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。
为什么使用 Dify?
你或许可以把 LangChain 这类的开发库(Library)想象为有着锤子、钉子的工具箱。与之相比,Dify 提供了更接近生产需要的完整方案,Dify 好比是一套脚手架,并且经过了精良的工程设计和软件测试。
重要的是,Dify 是开源的,它由一个专业的全职团队和社区共同打造。你可以基于任何模型自部署类似 Assistants API 和 GPTs 的能力,在灵活和安全的基础上,同时保持对数据的完全控制。
功能比较
功能 | Dify.AI | LangChain | Flowise | OpenAI Assistant API |
---|---|---|---|---|
编程方法 | API + 应用程序导向 | Python 代码 | 应用程序导向 | API 导向 |
支持的 LLMs | 丰富多样 | 丰富多样 | 丰富多样 | 仅限 OpenAI |
RAG引擎 | ✅ | ✅ | ✅ | ✅ |
Agent | ✅ | ✅ | ❌ | ✅ |
工作流 | ✅ | ❌ | ✅ | ❌ |
可观测性 | ✅ | ✅ | ❌ | ❌ |
企业功能(SSO/访问控制) | ✅ | ❌ | ❌ | ❌ |
本地部署 | ✅ | ✅ | ✅ | ❌ |
系统要求
CPU >= 2 Core RAM >= 4GB
注:Ollama可以基于CPU进行处理
部署Dify
为了方便本地快速验证,这里使用Docker Compose 运行。在企业或者生产环境建议采用 K8S环境部署,Dify 依赖较多的中间件,如:weaviate、redis、postgres 等,这些中间件可以采用外部已部署的应用或者容器部署,但是需要注意数据的存储。
前提条件
操作系统 | 软件 | 描述 |
---|---|---|
macOS 10.14 or later | Docker Desktop | 为 Docker 虚拟机(VM)至少分配 2 个虚拟 CPU(vCPU) 和 8GB 初始内存,否则安装可能会失败。有关更多信息,请参考 《在 Mac 内安装 Docker 桌面端》。 |
Linux platforms | Docker 19.03 or later Docker Compose 1.25.1 or later | 请参阅安装 Docker 和安装 Docker Compose 以获取更多信息。 |
Windows with WSL 2 enabled | Docker Desktop | 我们建议将源代码和其他数据绑定到 Linux 容器中时,将其存储在 Linux 文件系统中,而不是 Windows 文件系统中。有关更多信息,请参阅使用 WSL 2 后端在 Windows 上安装 Docker Desktop。 |
克隆 Dify 代码仓库
克隆 Dify 源代码至本地。
git clone https://github.com/langgenius/dify.git
启动 Dify
进入 Dify 源代码的 docker 目录,执行一键启动命令:
cd dify/docker
cp middleware.env.example middleware.env
docker compose up -d
部署结果示例:
[+] Running 9/11
⠋ Network docker_ssrf_proxy_network Created 11.0s
⠦ Network docker_default Created 10.6s
✔ Container docker-web-1 Started 6.2s
✔ Container docker-ssrf_proxy-1 Started 6.0s
✔ Container docker-sandbox-1 Started 5.8s
✔ Container docker-weaviate-1 Started 5.9s
✔ Container docker-redis-1 Started 5.8s
✔ Container docker-db-1 Started 6.1s
✔ Container docker-worker-1 Started 6.8s
✔ Container docker-api-1 Started 6.6s
✔ Container docker-nginx-1 Started
最后检查是否所有容器都正常运行:
docker compose ps
包括 3 个业务服务 api、worker、web,以及 6 个基础组件 weaviate、db、redis、nginx、ssrf_proxysandbox
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6941261667d2 nginx:latest "sh -c 'cp /docker-e…" 12 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp docker-nginx-1
815e6921b443 langgenius/dify-api:0.6.15 "/bin/bash /entrypoi…" 12 seconds ago Up 5 seconds 5001/tcp docker-api-1
48d7df8322c1 langgenius/dify-api:0.6.15 "/bin/bash /entrypoi…" 12 seconds ago Up 5 seconds 5001/tcp docker-worker-1
e55042c47848 langgenius/dify-sandbox:0.2.1 "/main" 13 seconds ago Up 8 seconds docker-sandbox-1
9c04677fe9fb semitechnologies/weaviate:1.19.0 "/bin/weaviate --hos…" 13 seconds ago Up 8 seconds docker-weaviate-1
d867fe436ec1 ubuntu/squid:latest "sh -c 'cp /docker-e…" 13 seconds ago Up 7 seconds 3128/tcp docker-ssrf_proxy-1
3c4e6e1f83ea langgenius/dify-web:0.6.15 "/bin/sh ./entrypoin…" 13 seconds ago Up 7 seconds 3000/tcp docker-web-1
dbca771313b3 postgres:15-alpine "docker-entrypoint.s…" 13 seconds ago Up 7 seconds (healthy) 5432/tcp docker-db-1
c7e5dfbe7654 redis:6-alpine "docker-entrypoint.s…" 13 seconds ago Up 8 seconds (health: starting) 6379/tcp docker-redis-1
更新 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
在浏览器中输入 http://localhost 访问 Dify。
自定义配置
编辑 .env 文件中的环境变量值。然后,重新启动 Dify:
docker compose down
docker compose up -d
完整的环境变量集合可以在 docker/.env.example 中找到
注册管理员账号
访问http://192.168.30.10/install
,设置管理员账号
使用刚才设置的邮箱和密码进行登录
部署Ollama
Ollama 是一个本地推理框架客户端,可一键部署如 Llama 2, Mistral, Llava 等大型语言模型。 Dify 支持接入 Ollama 部署的大型语言模型推理和 embedding 能力。
下载并启动 Ollama
下载 Ollama
访问 https://ollama.ai/download 下载对应系统 Ollama 客户端。
启动 Ollama
systemctl start ollama
运行 Ollama 并与 Llava 聊天
ollama run llava
启动成功后,ollama 在本地 11434 端口启动了一个 API 服务,可通过http://localhost:11434
访问。
其他模型可访问 Ollama Models 了解详情。
在 Dify 中接入 Ollama
在 设置 > 模型供应商 > Ollama 中填入:
为Dify是docker起的服务,所以如果ollama是宿主机上的,需要输入地址为:
http://host.docker.internal:11434
-
模型名称:llava
-
基础 URL:http://:11434
此处需填写可访问到的 Ollama 服务地址。
若 Dify 为 docker 部署,建议填写局域网 IP 地址,如:http://192.168.1.100:11434 或 docker 宿主机 IP 地址,如:http://172.17.0.1:11434。
若为本地源码部署,可填写 http://localhost:11434。 -
模型类型:对话
-
模型上下文长度:4096
模型的最大上下文长度,若不清楚可填写默认值 4096。 -
最大 token 上限:4096
模型返回内容的最大 token 数量,若模型无特别说明,则可与模型上下文长度保持一致。 -
是否支持 Vision:是
当模型支持图片理解(多模态)勾选此项,如 llava。
点击 “保存” 校验无误后即可在应用中使用该模型。
Embedding 模型接入方式与 LLM 类似,只需将模型类型改为 Text Embedding 即可。
配置后ollama效果:
简单应用
快速创建应用
使用模板快速使用创建一个 Code Interpreter ChatBot
应用
使用本地模型 llava 提问:
使用本地模型 qwen2 提问:
使用本地模型 llama3 提问:
添加知识库
点击 知识库
创建知识库
选择文件
文档分段与清洗
存储到向量数据库
基于知识库新建应用
创建空白应用
选择知识库和模型
提问测试
FAQ
如果您使用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 服务暴露给网络。
在Mac上设置环境变量
如果 Ollama 作为 macOS 应用程序运行,则应使用以下命令设置环境变量launchctl:
通过调用launchctl setenv设置环境变量:
launchctl setenv OLLAMA_HOST "0.0.0.0"
重启Ollama应用程序。
如果以上步骤无效,可以使用以下方法:
问题是在docker内部,你应该连接到host.docker.internal,才能访问docker的主机,所以将localhost替换为host.docker.internal服务就可以生效了:
http://host.docker.internal:11434
在Linux上设置环境变量
如果Ollama作为systemd服务运行,应该使用systemctl设置环境变量:
通过调用systemctl edit ollama.service
编辑systemd服务。这将打开一个编辑器。
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
保存并退出。
重载systemd并重启Ollama:
systemctl daemon-reload
systemctl restart ollama
在Windows上设置环境变量
在Windows上,Ollama继承了您的用户和系统环境变量。
1.首先通过任务栏点击Ollama退出程序
2.从控制面板编辑系统环境变量
3.为您的用户账户编辑或新建变量,比如OLLAMA_HOST
、OLLAMA_MODELS
等。
4.点击OK/应用保存
5.在一个新的终端窗口运行ollama
如何在我的网络上暴露Ollama?
Ollama默认绑定127.0.0.1端口11434。通过OLLAMA_HOST环境变量更改绑定地址。