跳至主要內容

Dify-1-简介与部署

程序员李某某大约 12 分钟

Dify-1-简介与部署

前置知识

  • RAG(Retrieval Augmented Generation):检索增强生成
  • LLM(Large Language Model):大语言模型
  • LLMOps (Large Language Model Operations):大语言模型运维

介绍

  • 官网open in new window
  • Dify是一个基于LLMOps的AI应用平台,可以快速构建AI应用。专为用户提供便捷的人工智能应用程序开发体验。
  • 该平台支持GPT系列模型和其他模型,适用于各种团队,无论是用于内部还是外部的AI应用程序开发。
  • 它结合了后端即服务和LLMOps的概念,使开发人员能够快速构建生产级生成AI应用程序。即使是非技术人员也可以参与人工智能应用的定义和数据操作。
  • 通过集成构建LLM应用程序所需的关键技术栈,包括对数百个模型的支持、直观的Prompt编排接口、高质量的RAG引擎和灵活的Agent框架,同时提供一组易于使用的接口和api, Dify为开发人员节省了大量重新发明轮子的时间,使他们能够专注于创新和业务需求。
  • Dify支持的AI模型包括:

特点

  • Dify Orchestration Studio:构建AI应用程序的界面 -- 可视化编排生成式 AI 应用的专业工作站 All in One Place
  • RAG Pipeline:检索增强生成式AI应用构建工具 -- 安全构建私有数据与大型语言模型之间的数据通道,包括各种基于全文索引或向量数据库嵌入的 RAG 能力,允许直接上传 PDF、TXT 等各种文本格式
  • Prompt IDE:为提示词工程师精心设计,友好易用的提示词开发工具,支持无缝切换多种大型语言模型。和团队一起在 Dify 协作,通过可视化的 Prompt 和应用编排工具开发 AI 应用。 支持无缝切换多种大型语言模型。
  • Enterprise LLMOps:开发者可以观测推理过程、记录日志、标注数据、训练并微调模型。监控和优化模型推理,记录日志,标注数据和微调模型
  • BaaS Solution:基于后端及服务理念的 API 设计,大幅简化生成式 AI 应用研发流程。通过全面的后端API将人工智能集成到任何产品中。
  • LLM Agent DSL:大型语言模型作为智能内核,低代码构建面向特定业务领域的半自主 Agent。
  • Plugins Toolbo:既可自行封装 API 为插件,也可集成第三方插件,将API打包成工具,为LLM提供扩展功能。

为什么选择Dify?

官方解释

Dify 具有模型中立性,相较 LangChain 等硬编码开发库 Dify 是一个完整的、工程化的技术栈,而相较于 OpenAI 的 Assistants API 你可以完全将服务部署在本地。 你可以把像LangChain这样的库想象成带有锤子、钉子等工具的工具箱。相比之下,Dify提供了一个更适合生产的、完整的解决方案——可以把Dify看作是一个具有精细工程设计和软件测试的脚手架系统。 重要的是,Dify是开源的,由专业的全职团队和社区共同创建。您可以基于任何模型自部署类似于assistant API和gpt的功能,以灵活的安全性保持对数据的完全控制,所有这些都在易于使用的界面上。

创业公司——快速将你的人工智能想法变成现实,加速成功和失败。在现实世界中,几十个团队已经通过Dify建立了mvp,以获得资金或赢得客户订单。 将llm整合到现有业务中-通过引入llm来增强当前应用程序的功能。访问Dify的RESTful api,将提示从业务逻辑中解耦。使用Dify的管理界面来跟踪数据、成本和使用情况,同时不断提高性能。 企业LLM基础设施——一些银行和互联网公司正在部署Dify作为内部LLM网关,加速GenAI技术的采用,同时实现集中治理。 探索LLM功能-即使作为技术爱好者,您也可以通过Dify轻松练习提示工程和代理技术。甚至在GPTs出现之前,就有超过6万名开发者在Dify上开发了他们的第一款应用。

功能DifyLangChainAssistants API
编程方式面向API面向Python代码面向API
生态策略开源开源封闭商用
RAG引擎支持不支持支持
Prompt IDE
支持的LLMs丰富丰富仅GPT
本地部署支持不适用不支持

特定领域的聊天机器人和 AI 助理

通过可视化的提示词编排和数据集嵌入,零代码即可快速构建对话机器人或 AI 助理,并可持续优化对话策略,革新人机交互体验。

私有化部署

项目基础信息

项目设立2023 年 3 月
开源协议基于 Apache License 2.0 有限商业许可open in new window
官方研发团队超过 20 名全职员工
社区贡献者超过 290 人open in new window (截止 2024 Q2)
后端技术Python/Flask/PostgreSQL
前端技术Next.js
代码行数超过 13 万行
发版周期平均每周一次

技术特性

LLM 推理引擎Dify Runtime ( 自 v0.4 起移除了 LangChain)
商业模型支持10+ 家,包括 OpenAI 与 Anthropic新的主流模型通常在 48 小时内完成接入
MaaS 供应商支持7 家,Hugging Face,Replicate,AWS Bedrock,NVIDIA,GroqCloud,together.ai,OpenRouter
本地模型推理 Runtime 支持6 ,Xoribits(推荐),OpenLLM,LocalAI,ChatGLM,Ollama,NVIDIA TIS
OpenAI 接口标准模型接入支持∞ 家
多模态技术ASR 模型GPT-4o 规格的富文本模型
预置应用类型对话型应用文本生成应用 Agent 工作流
Prompt 即服务编排广受好评的可视化的 Prompt 编排界面,在同一个界面中修改 Prompt 并预览效果 编排模式简易模式编排Assistant 模式编排Flow 模式编排Prompt 变量类型字符串单选枚举外部 API文件(Q3 即将推出)
Agentic Workflow 特性行业领先的可视化流程编排界面,所见即所得的节点调试,可插拔的 DSL,原生的代码运行时,构建更复杂、可靠、稳定的 LLM 应用。支持节点LLM知识库检索问题分类条件分支代码执行模板转换HTTP 请求工具
RAG 特性首创的可视化的知识库管理界面,支持分段预览和召回效果测试。 索引方式关键词文本向量由 LLM 辅助的问题-分段模式检索方式关键词文本相似度匹配混合检索N 选 1 模式(即将下线)多路召回召回优化技术使用 ReRank 模型
ETL 技术支持对 TXT、Markdown、PDF、HTML、DOC、CSV 等格式文件进行自动清洗,内置的 Unstructured 服务开启后可获得最大化支持。支持同步来自 Notion 的文档为知识库。 支持同步网页为知识库。
向量数据库支持Qdrant(推荐),Weaviate,Zilliz/Milvus,Pgvector,Pgvector-rs,Chroma,OpenSearch,TiDB,Tencent Vector,Oracle,Relyt
Agent 技术ReAct,Function Call 工具支持可调用 OpenAI Plugin 标准的工具可直接加载 OpenAPI Specification 的 API 作为工具内置工具40+ 款(截止 2024 Q2)
日志支持,可基于日志进行标注
标注回复基于经人类标注的 Q&A 对,可用于相似度对比回复 可导出为供模型微调环节使用的数据格式
内容审查机制OpenAI Moderation 或外部 API
团队协同工作空间与多成员管理支持
API 规格RESTful,已覆盖大部分功能
部署方式Docker,Helm

模型供应商列表

Dify 为以下模型提供商提供原生支持:

ProviderLLMText EmbeddingRerankSpeech to textTTS
OpenAI✔️(🛠️)(👓)✔️✔️✔️
Anthropic✔️(🛠️)
Azure OpenAI✔️(🛠️)(👓)✔️✔️
Google Cloud✔️(👓)
Nvidia API Catalog✔️✔️✔️
Nvidia NIM✔️
Nvidia Triton Inference Server✔️
AWS Bedrock✔️✔️
OpenRouter✔️
Cohere✔️✔️✔️
together.ai✔️
Ollama✔️✔️
Mistral AI✔️
groqcloud✔️
Replicate✔️✔️
Hugging Face✔️✔️
Xorbits inference✔️✔️✔️✔️
智谱✔️(🛠️)(👓)✔️
百川✔️✔️
讯飞星火✔️
Minimax✔️(🛠️)✔️
通义千问✔️✔️✔️
文心一言✔️
月之暗面✔️(🛠️)
Tencent Cloud✔️✔️
阶跃星辰✔️
火山引擎✔️✔️
零一万物✔️
deepseek✔️(🛠️)
腾讯混元✔️
SILICONFLOW✔️
Jina✔️✔️
ChatGLM✔️
Xinference✔️(🛠️)(👓)✔️✔️
OpenLLM✔️✔️
LocalAI✔️✔️✔️✔️
OpenAI API-Compatible✔️✔️
PerfXCloud✔️✔️
Lepton AI✔️
novita.ai✔️
Amazon Sagemaker✔️✔️✔️

其中 (🛠️) 代表支持 Function Calling,(👓) 代表视觉能力。

这张表格我们会一直保持更新。同时,我们也留意着社区成员们所提出的关于模型供应商的各种请求open in new window。如果你有需要的模型供应商却没在上面找到,不妨动手参与进来,通过提交一个PR(Pull Request)来做出你的贡献。欢迎查阅我们的 成为贡献者open in new window指南了解更多。

云服务

Dify 为所有人提供了云服务open in new window,你无需自己部署即可使用 Dify 的完整功能。要使用 Dify 云服务,你需要有一个 GitHub 或 Google 账号。

  1. 登录 Dify 云服务open in new window,创建一个或加入已有的 Workspace
  2. 配置你的模型供应商,或使用我们提供的托管模型供应商
  3. 可以创建应用open in new window了!

订阅计划

我们为云服务设计了多个订阅计划,您可以根据团队情况按需订阅:

  • Sandbox(免费版)
  • 专业版
  • 团队版
  • 企业版

各版本定价请参考:https://dify.ai/pricingopen in new window

Hello Dify

官方文档

官方文档欢迎使用 Difyopen in new window

部署社区版,官方文档提供了两种部署方式:

部署

这里重点探讨 Docker Compose 部署

如果您的系统安装了 Docker Compose V2 而不是 V1,请使用 docker compose 而不是 docker-compose。通过$ docker compose version检查这是否为情况。在这里open in new window阅读更多信息。

这里windows启动没有问题

## 克隆 Dify 源代码至本地
git clone https://github.com/langgenius/dify.git
## 进入 Dify 源代码的 docker 目录,执行一键启动命令
cd dify/docker
cp .env.example .env
docker compose up -d
## 检查是否所有容器都正常运行
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.13         "/bin/bash /entrypoi…"   api          About a minute ago   Up About a minute             5001/tcp
docker-db-1           postgres:15-alpine                 "docker-entrypoint.s…"   db           About a minute ago   Up About a minute (healthy)   5432/tcp
docker-nginx-1        nginx:latest                       "sh -c 'cp /docker-e…"   nginx        About a minute ago   Up About a minute             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        About a minute ago   Up About a minute (healthy)   6379/tcp
docker-sandbox-1      langgenius/dify-sandbox:0.2.1      "/main"                   sandbox      About a minute ago   Up About a minute             
docker-ssrf_proxy-1   ubuntu/squid:latest                "sh -c 'cp /docker-e…"   ssrf_proxy   About a minute ago   Up About a minute             3128/tcp
docker-weaviate-1     semitechnologies/weaviate:1.19.0   "/bin/weaviate --hos…"   weaviate     About a minute ago   Up About a minute             
docker-web-1          langgenius/dify-web:0.6.13         "/bin/sh ./entrypoin…"   web          About a minute ago   Up About a minute             3000/tcp
docker-worker-1       langgenius/dify-api:0.6.13         "/bin/bash /entrypoi…"   worker       About a minute ago   Up About a minute             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 文件中,并更新已更改的任何值。

访问

在浏览器中输入 http://localhost 访问 Dify。

localhost 可能会出现一些问题,docker 容器网络可能与宿主机网络ip不一致,直接用宿主机ip访问更稳妥

自定义配置

编辑 .env 文件中的环境变量值。然后,重新启动 Dify:

复制

docker compose down
docker compose up -d

完整的环境变量集合可以在 docker/.env.example 中找到。

其他配置参考官方文档

常见问题

api、worker、sandbox无法启动

## 查看日志
docker logs -f docker-api-1

报错信息

api_1 | Running migrations
api_1 | OpenBLAS blas_thread_init: pthread_create failed for thread 1 of 6: Operation not permitted
api_1 | OpenBLAS blas_thread_init: RLIMIT_NPROC -1 current, -1 max

没有操作权限

解决办法: 在docker-compose.yaml的api、worker中增加 privileged: true

  api:
    image: langgenius/dify-api:latest
    restart: always
    privileged: true
    ...

  worker:
    image: langgenius/dify-api:latest
    restart: always
    privileged: true
    ...
  sandbox:
    image: langgenius/dify-sandbox:latest
    restart: always
    privileged: true
    ...

502 Bad Gateway

官方说明open in new window 这是因为Nginx将服务转发到了错误的位置导致的,首先确保容器正在运行,然后以Root权限运行以下命令:

docker-compose ps -q | xargs -n 1 docker inspect --format '{{ .Name }}: {{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}'

在输出内容中找到这两行:

/docker-web-1: 172.19.0.5
/docker-api-1: 172.19.0.7

记住后面的IP地址。然后打开你存放dify源代码的地方,打开dify/docker/nginx/conf.d中的default.conf.template,因为每次重启容器都会从这个文件拷到default.conf

http://api:5001替换为http://172.19.0.7:5001, 将http://web:3000替换为http://172.19.0.5:3000,

可能有的容器有多个IP,都试试吧,我用的第一个可以,第二个不行 随后重启Nginx容器或者重载配置。 这些IP地址是_示例性_ 的,你必须执行命令获取你自己的IP地址,不要直接填入。 你可能在重新启动相关容器时需要再次根据IP进行配置。

嵌入网站时的token的获取

修改docker-compose.yml,在postgres:15-alpine中添加

ports:
  - "5432:5432"

连接dify这个库,找到sites这张表,code 字段就是这个token

上次编辑于:
贡献者: 李元昊