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

news2024/12/26 13:07:20

私有化部署 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.AILangChainFlowiseOpenAI 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 laterDocker Desktop为 Docker 虚拟机(VM)至少分配 2 个虚拟 CPU(vCPU) 和 8GB 初始内存,否则安装可能会失败。有关更多信息,请参考 《在 Mac 内安装 Docker 桌面端》。
Linux platformsDocker 19.03 or later

Docker Compose 1.25.1 or later
请参阅安装 Docker 和安装 Docker Compose 以获取更多信息。
Windows with WSL 2 enabledDocker 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

systemctl start ollama

运行 Ollama 并与 Llava 聊天

ollama run llava

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

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

在 Dify 中接入 Ollama

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

image.png

为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效果:

image.png

简单应用

快速创建应用

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

使用本地模型 llava 提问:

image.png
使用本地模型 qwen2 提问:

image.png

使用本地模型 llama3 提问:

image.png

添加知识库

点击 知识库

image.png

创建知识库

image.png

选择文件

image.png

文档分段与清洗

image.png

存储到向量数据库

image.png

基于知识库新建应用

创建空白应用

image.png

选择知识库和模型

image.png

提问测试

image.png

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_HOSTOLLAMA_MODELS等。

4.点击OK/应用保存

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1983101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.8软件工程基础知识-项目管理

项目管理 范围管理产品范围和项目范围管理过程WBS练习题 进度管理基本原则过程活动资源估算 软件规模估算方法进度安排关键路径法练习题 成本管理过程成本的类型练习题 软件配置管理配置项配置基线配置数据库练习题 质量管理过程质量模型软件评审软件容错技术练习题 风险管理宏…

java基础概念10-数组

一、什么是数组 二、数组的定义和初始化 2-1、数组的定义 2-2、数组的初始化 初始化&#xff1a;就是在内存中&#xff0c;为数组容器开辟空间&#xff0c;并将数据存入容器中的过程。 1、静态初始化 【注意】&#xff1a; 数字一旦初始化后&#xff0c;数组的长度不可改变&a…

Python 如何进行Web抓取(BeautifulSoup, Scrapy)

Web抓取&#xff08;Web Scraping&#xff09;是一种从网站提取数据的技术。Python有许多用于Web抓取的库&#xff0c;其中最常用的是BeautifulSoup和Scrapy。 BeautifulSoup BeautifulSoup是一个用于解析HTML和XML文档的Python库&#xff0c;适合处理简单的Web抓取任务。它将…

Occlusion in Augmented Reality

1.Occlusion in Augmented Reality 笔记来源&#xff1a; 1.Occlusion handling in Augmented Reality context 2.Occlusion in Augmented Reality 3.Real-Time Occlusion Handling in Augmented Reality Based on an Object Tracking Approach 4.Occlusion Matting: Realisti…

SQLTools插件下载与使用说明

SQLTools是一个专注于SQL优化与管理的plsql developer插件&#xff0c;目的是把一些常用的SQL收集在一起&#xff0c;方便快速解决问题&#xff0c;提高工作效率。 当在SQL或PACKAGE窗口,或者选中表时&#xff0c;会有两个右键菜单&#xff1a; SQLTools聚焦在SQL方面&#xf…

unity 程序做一个折叠菜单

第一次遇到这种需求&#xff0c;本来以为很难&#xff0c;没想到试了一下以后没啥难度&#xff0c;所以记录一下 首先新建一个scroll view&#xff0c;然后在content里面添加vertical layout group和content size fitter这两个组件。&#xff08;vertical layout group 的 spac…

前端常用的性能优化方案

目录 性能分析工具lighthouseWebpack Bundle分析 开发阶段按需引入路由懒加载 打包阶段打包配置减少包体积配置压缩分包 资源预加载/预请求 部署阶段开启http2静态资源缓存gzip压缩 性能优化主要在三个阶段进行&#xff1a;开发阶段、开发结束后的打包阶段、项目部署上线阶段 首…

动态规划例题

目录 A.小红组比赛 B.小红升装备 A.小红组比赛 思路 &#xff1a;经典的多重背包问题&#xff0c;这里将dp[ i ][ j ]定义为前 i 场比赛的难度 j 是否可能&#xff0c;所以dp只需用0 1 表示&#xff0c;然后遍历dp[ n ][ j ]即可。 代码&#xff1a; void solve() { cin&g…

TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE(Transformer 在图像中的应用)翻译

摘要 虽然Transformer架构已成为自然语言处理任务的实际标准&#xff0c;但其在计算机视觉领域的应用仍然有限。在计算机视觉中&#xff0c;注意力机制要么与卷积网络结合使用&#xff0c;要么用于替换卷积网络的某些组件&#xff0c;同时保持其整体结构不变。我们证明了这种对…

抖音网红老阳:temu选品师好做吗?

抖音网红老阳近期分享了关于成为TEMU选品师的话题&#xff0c;引发了不少人的关注和讨论。那么&#xff0c;成为TEMU选品师究竟是一种怎样的体验?这项工作适合大多数人吗? 首先&#xff0c;TEMU选品师的工作内容主要集中在拼多多跨境电商平台上&#xff0c;这是一种新兴的电商…

VS Code 扩展之——私有扩展管理(Private Extension Manager)

为什么需要私有扩展的管理器&#xff1f; 和 Eclipse IDE的插件开发类似&#xff0c;VS Code&#xff08;Visual Studio Code&#xff09;也可以很容易的对VS Code编辑器进行创建和扩展新功能&#xff0c;这些扩展可以涵盖代码片段、主题、语言支持、调试器等多个方面。 VS Co…

昂科烧录器支持TI德州仪器的32位微控制器TMS320F28032

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中TI德州仪器的32位微控制器TMS320F28032已经被昂科的通用烧录平台AP8000所支持。 C2000™ 32位微控制器针对处理、感应和驱动进行了优化&#xff0c;可提高实时控制应用&#x…

IDEA全局搜索Jar包中内容

IDEA全局搜索Jar包中内容 【一】下载源码【二】搜索内容【1】按文件名搜索【2】全局关键字搜索【3】方法引用 【一】下载源码 想要搜索Jar中关键字&#xff0c;必须先把jar包源码下载下来&#xff0c;否则搜不到。 Preferences --> Maven --> Importing&#xff0c;根据…

类与对象的介绍

目录 一、类与实例的关系 二、快速入门-面向对象的方式解决养猫问题 三、类和对象的区别和联系 四、对象在内存中的存在形式 五、属性/成员变量 1、基本介绍 2、注意事项和细节说明 六、类的定义和使用 1、如何定义类 2、如何创建对象 3、如何访问属性 七、对象的传…

深⼊理解指针(4)

1. 回调函数是什么&#xff1f; 2. qsort使⽤举例 3. qsort函数的模拟实现 1. 回调函数是什么&#xff1f; 1. 回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff…

【Python】Numpy概述安装及使用

文章目录 Numpy概述Numpy开发环境搭建Numpy使用创建数组创建一维数组创建二维数组创建三维数组&#xff0c;array()函数ndmin参数的使用array()函数dtype参数的使用随机数创建 Numpy概述 Numpy是科学计算基础库&#xff0c;提供大量科学计算相关功能&#xff0c;比如数据统计&…

SpringMabatis学习笔记1

今日内容:搭建mybatis ORM 配置数据源 $#的区别 增删改 ORM &#xff08;Object Relational Mapping&#xff0c;对象关系映射&#xff09;是一种数据持久化技术&#xff0c;它在对象模型和关系型数据库之间建立起对应关系&#xff0c;并且提供了一种机制&#xff0…

2024软考注意!!《系统规划与管理师》大概率要改版,新教材已出

系统规划与管理师考试是全国计算机技术与软件专业技术资格考试的高级水平考试之一&#xff0c;一年仅考一次&#xff0c;也是2024年下半年的4门高级考试中&#xff0c;最适合零基础考生的高级科目。近日在国家版本数据中心&#xff0c;查到系统规划与管理师已经有2024最新版的教…

Windows常用的运行命令

cmd - 命令提示符 cmdcalc - 打开计算器 calcservices.msc - 本地服务设置 services.msccontrol - 打开控制面板 controlwinver - 查看windows版本 winvermstsc - 连接远程电脑 mstsc ms t(terminial终端) s(service服务)c(client客户端) mstscmspaint - 打开画图 m…

特斯拉智驾方案演变过程

目录 一、概述二、特斯拉算法的发展历程2.1 特斯拉第一代算法:HydraNets2.2 特斯拉第二代算法:BEV + Transformer2.3. 特斯拉第三代算法:占据网络2.4. 特斯拉第四代算法:端到端方案三、智驾技术特点3.1 算法3.2 算力3.3 数据四、端到端挑战一、概述 在当今科技飞速发展的时…