私有化部署 Dify+Ollama并使用qwen2快速搭建 AI 应用

运维小王 2024-09-13 15:31:01 阅读 57

私有化部署 Dify+Ollama并使用qwen2快速搭建 AI 应用

Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。

由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。

docker-compose.png

为什么使用 Dify?

你或许可以把 LangChain 这类的开发库(Library)想象为有着锤子、钉子的工具箱。与之相比,Dify 提供了更接近生产需要的完整方案,Dify 好比是一套脚手架,并且经过了精良的工程设计和软件测试。

重要的是,Dify 是开源的,它由一个专业的全职团队和社区共同打造。你可以基于任何模型自部署类似 Assistants API 和 GPTs 的能力,在灵活和安全的基础上,同时保持对数据的完全控制。

功能比较

功能 Dify.AI LangChain Flowise OpenAI Assistant API
编程方法 API + 应用程序导向 Python 代码 应用程序导向 API 导向
支持的 LLMs 丰富多样 丰富多样 丰富多样 仅限 OpenAI
RAG引擎
Agent
工作流
可观测性
企业功能(SSO/访问控制)
本地部署

系统要求

<code>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,设置管理员账号

image.png

使用刚才设置的邮箱和密码进行登录

image.png

image.png

部署Ollama

Ollama 是一个本地推理框架客户端,可一键部署如 Llama 2, Mistral, Llava 等大型语言模型。 Dify 支持接入 Ollama 部署的大型语言模型推理和 embedding 能力。

下载并启动 Ollama

下载 Ollama

访问 https://ollama.ai/download 下载对应系统 Ollama 客户端。

启动 Ollama

<code>systemctl start ollama

运行 Ollama 并与 Llava 聊天

ollama run llava

启动成功后,ollama 在本地 11434 端口启动了一个 API 服务,可通过http://localhost:11434访问。

其他模型可访问 Ollama Models 了解详情。

在 Dify 中接入 Ollama

在 设置 > 模型供应商 > Ollama 中填入:

image.png

为Dify是docker起的服务,所以如果ollama是宿主机上的,需要输入地址为:<code>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效果:

image.png

简单应用

快速创建应用

使用模板快速使用创建一个 <code>Code Interpreter ChatBot 应用

使用本地模型 llava 提问:

image.png

使用本地模型 qwen2 提问:

image.png

使用本地模型 llama3 提问:

image.png

添加知识库

点击 <code>知识库

image.png

创建知识库

image.png

选择文件

image.png

文档分段与清洗

image.png

存储到向量数据库

image.png

基于知识库新建应用

创建空白应用

image.png

选择知识库和模型

image.png

提问测试

image.png

FAQ

如果您使用Docker部署Dify和Ollama,您可能会遇到以下错误:

<code>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"code>

保存并退出。

重载systemd并重启Ollama:

systemctl daemon-reload

systemctl restart ollama

在Windows上设置环境变量

在Windows上,Ollama继承了您的用户和系统环境变量。

1.首先通过任务栏点击Ollama退出程序

2.从控制面板编辑系统环境变量

3.为您的用户账户编辑或新建变量,比如OLLAMA_HOSTOLLAMA_MODELS等。

4.点击OK/应用保存

5.在一个新的终端窗口运行ollama

如何在我的网络上暴露Ollama?

Ollama默认绑定127.0.0.1端口11434。通过OLLAMA_HOST环境变量更改绑定地址。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。