前言
还在为内部数据该不该上传 AI 而发愁?还不满足于 Ollama 的简单对话?还在绞尽脑汁编写 AI 工作流代码?笔者将带大家实现一个低代码的本地化 AI 应用解决方案,Dify + Ollama 从安装部署到应用案例,一文速通,让我们开始吧!

本文关键词:Dify 部署、Ollama 插件、本地大模型、LLM 部署、AI 框架、Python 开发 AI应用。

一、什么是 Dify

1.Dify 简介

Dify 是一个低代码平台(有云服务版和开源版),用于快速构建 AI 驱动的应用程序,具有大模型集成、AI 知识库、自动化工作流等功能,适用于企业内部自动化、数据分析、智能客服等场景。其核心组件包括:

  • 数据处理:支持从多种来源获取数据,并进行清洗、转换至知识库 。
  • 模型调用:支持与OpenAI官方接口对齐的API,支持多种本地模型框架。
  • 知识库管理:支持多知识库联动。
  • 可视化编排:支持复杂问答逻辑链的构建,可通过拖拽的方式设计工作流程。
  • 部署与运维:支持容器化部署,UI交互友好,降低了技术门槛。

2.同类产品对比

维度 Dify FastGPT 扣子
开源性 开源 开源 闭源
应用数 上限5个 上限30个 未提及
知识库 上限50个 上限10个 免费1GB
部署难度 容器化部署 需配置Nginx等,技术门槛较高 在线使用
API支持 对齐OpenAI 对齐OpenAI 对齐OpenAI
可视化编排
收费模式 免费 免费 部分功能需付费

:Dify 和 FastGPT 均有付费的专业版、企业版,表中为社区版,定价策略和服务差异详见其官网。

二、安装部署二三事

本文为 Windows 系统下的解决方案,其他系统还需注意区别哦。

1.安装 Git

Git 是开源的项目版本管理工具,用于从 Github 拉取 Dify 源码(非必要,Dify 也提供了 zip 下载)。官方下载速度较慢,笔者下载好后传到了网盘,需要的同学可自取,安装就是一路 next 就搞定啦~
官方地址:https://git-scm.com/downloads/win
网盘下载:https://pan.baidu.com/s/1yw2Ql-VHwI9q96wJyVhA6Q?pwd=m3i5
在这里插入图片描述

2.安装 Docker

Docker 是开源的应用容器引擎,用于解决一次开发处处部署的跨平台问题,Dify 将基于 Docker 进行部署。也基本是一路 next 完成安装(可能会提示安装和启用 WSL)。
官方地址:https://www.docker.com/
在这里插入图片描述
启动 Docker Desktop 后无需登录也可使用,点击右上角的齿轮图标进入 Docker Engine 进行镜像配置,以加速从 Docker hub 拉取需要的应用服务。笔者使用毫秒镜像、轩辕镜像配置如下:

“registry-mirrors”: [
“https://docker.1ms.run”,
“https://docker.xuanyuan.me”
]

在这里插入图片描述

3.安装 Dify

按照操作指引一步步执行即可。
官方文档:https://docs.dify.ai/zh-hans/getting-started/install-self-hosted/docker-compose

  • 拉取源码,在 Git Bash 中进入拟安装的路径后执行以下命令:

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

  • 或者下载 zip 后在拟安装的文件夹中解压,访问不了 github 也可以在国内的 gitcode 搜索他人同步的仓库。
    在这里插入图片描述
  • 在 cmd 命令行中按顺序一步步执行以下命令(假设将 Dify 解压至 D 盘,进入其内部的 docker 文件夹):

cd /d D:/dify/docker
cp .env.example .env
docker compose up -d

  • 安装完成后将显示以下信息(全打勾即为成功):

[+] Running 11/11
✔ Network docker_ssrf_proxy_network Created 0.1s
✔ Network docker_default Created 0.0s
✔ Container docker-redis-1 Started 2.4s
✔ Container docker-ssrf_proxy-1 Started 2.8s
✔ Container docker-sandbox-1 Started 2.7s
✔ Container docker-web-1 Started 2.7s
✔ Container docker-weaviate-1 Started 2.4s
✔ Container docker-db-1 Started 2.7s
✔ Container docker-api-1 Started 6.5s
✔ Container docker-worker-1 Started 6.4s
✔ Container docker-nginx-1 Started 7.1s

  • 之后在浏览器中输入 http://localhost/install 即可访问 Dify 界面,每次打开 Dify 前都需启动 Docker Desktop,初次使用需注册一个账号。

在这里插入图片描述

4.安装 Ollama

一键安装,嗖嗖的——安装完后在 cmd 命令行执行 ollama serve 即可启动服务,执行 ollama pull/run 模型名称 即可自动下载和运行大模型,可用模型在官网的 library 中检索。启动服务后默认开机运行,使用 Dify 时若不下载新模型则无需再执行相关命令。
官方地址:https://ollama.com/
在这里插入图片描述

三、开发你的第一个 AI 应用

1.选择模型服务提供商

Dify 中配置 Ollama 插件,点击右上角用户图标,点击设置,在模型供应商中找到 Ollama 并安装对应插件。随后添加模型,输入模型名称(在 cmd 命令行中执行 ollama list 查看已安装的模型),输入 URL (Docker 容器的内部 IP 地址:http://host.docker.internal:11434)。
在这里插入图片描述
根据模型情况选择是否支持 Vision(视觉模型)和函数调用。
在这里插入图片描述

2.构建 AI 对话应用

Dify 中提供了五种应用类型:

  • 聊天助手:基于 LLM 构建对话式交互的助手
  • 文本生成应用:面向文本生成类任务的助手,例如撰写故事、文本分类、翻译等(与前者区别是只能一问一答,只保存当次上下文)
  • Agent:能够分解任务、推理思考、调用工具的对话式智能助手
  • 对话流:适用于定义等复杂流程的多轮对话场景,具有记忆功能的应用编排方式
  • 工作流:适用于自动化、批处理等单轮生成类任务的场景的应用编排方式

在工作室栏目点击创建空白应用,可先选择最简单的聊天助手。
在这里插入图片描述
以图像识别助手为例,右上角选择 qwen2.5vl 视觉模型,左侧编排开启视觉,即可上传图片进行测试。
在这里插入图片描述

应用发布后可轻松嵌入到网站中,就像各种常见的客服机器人一样。
在这里插入图片描述

3.在 Python 中调用 Dify API

也可通过 API 调用进行二次开发,以 Python 为例:

import requests


headers = {
    'Authorization': f'Bearer {API_KEY}',  # 在 Dify 应用中点击【访问API】获取
    'Content-Type': 'application/json'
    }

data = {
    "inputs": {},  # 允许传入 App 定义的各变量值
    "query": "你好",
    "response_mode": "blocking",  # 流式输出填 streaming 
    "conversation_id": "",  # 会话 ID,若需要基于之前的聊天记录继续则必填
    "user": USER  # 用于定义终端用户的身份,方便检索、统计
    }

res = requests.post('http://localhost/v1/chat-messages', headers=headers, json=data)

res.json()

{‘event’: ‘message’,
‘task_id’: …,
‘id’: …,
‘message_id’: …,
‘conversation_id’: …,
‘mode’: ‘chat’,
‘answer’: ‘你好!请上传图片以便我更好地帮助你。’,
‘metadata’: …}

若要上传图片需先行 post 获取文件ID。

with open(r'C:\Users\Seon\Desktop\back.png', 'rb') as f:   
    headers = {
    'Authorization': f'Bearer {API_KEY}',
    }

    data = {
        "user": USER  # 需和对话用户一致
    }
    
    files = {
        'file': ('back.png', f, 'image/png')  # 文件名、文件流、文件类型的元组
    }
    res_file = requests.post('http://localhost/v1/files/upload', headers=headers, json=data, files=files)
    
res_file.json()

{‘id’: ‘0325d083-2651-4ede-a0f4-af8409d5085c’,
‘name’: ‘back.png’,
‘size’: 84890,
‘extension’: ‘png’,
‘mime_type’: ‘image/png’,
…}

获取文件ID后在对话参数中补充 files ,即可实现 LLM 解释图片的需求。

data = {
    ...
    "files": [
      {
        "type": "image",
        "transfer_method": "local_file",  # 在线图片填 remote_url
        # "url": "https://cloud.dify.ai/logo/logo-site.png"
        "upload_file_id": FILE_ID
      }
    ]
}

{…
‘answer’: ‘这张图片包含以下元素:\n\n1. 左上角有一个蓝色渐变的“D”形标志。\n2. 中间部分有中文文字“一文速通通”,旁边有一个卡通羊驼的图案。\n3. 左下角有英文单词“Dify_”。\n4. 中间部分还有一个握手的图标,象征合作。\n5. 右下角有英文单词“Ollama”。\n6. 底部有中文文字“本地化 AI 应用解决方案”,重复了多次。\n\n综合解释:这张图片可能是一个与AI应用解决方案相关的品牌或服务的宣传图。图片中包含了品牌名称“Dify_”和“Ollama”,以及相关的标志和文字,强调了本地化AI应用解决方案。中间的卡通羊驼图案可能代表品牌或服务的吉祥物。’,
…}

后记

至此,我们初步掌握了如何安装 Dify 并构建一个 AI 应用,结合官方文档可进行更多的探索。笔者试验电脑的配置为 I7 / RTX4060 / 32G,故只使用了 7~14B 规格的大模型,有高性能硬件可使用更高规格的大模型,或可接受云服务则可使用各大厂商的 API 以取得更好的效果。

碎碎念时间:啊好久好久之前就想试试,原本打算先学 FastGPT 的,但感觉操作成本太高,还是选择先在各种在线平台体验了。结果是在工作中刚好遇到 AI 项目,才开始本地化试验,刚需拯救拖延症呀 ~ 有空再写一篇工作流的搭建 😄

这里是梦想 Title 为大数据和人工智能应用架构师、AI-Agent 行业解决方案首席顾问的 Seon塞翁,下一篇见!总之先把数据分析和产品经理干好吧(¯﹃¯)

参考文章:基于Docker本地搭建Dify保姆级详细教程

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐