Dify-1-简介与部署
Dify-1-简介与部署
前置知识
- RAG(Retrieval Augmented Generation):检索增强生成
- LLM(Large Language Model):大语言模型
- LLMOps (Large Language Model Operations):大语言模型运维
介绍
- 官网
- 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上开发了他们的第一款应用。
| 功能 | Dify | LangChain | Assistants API |
|---|---|---|---|
| 编程方式 | 面向API | 面向Python代码 | 面向API |
| 生态策略 | 开源 | 开源 | 封闭商用 |
| RAG引擎 | 支持 | 不支持 | 支持 |
| Prompt IDE | 有 | 无 | 有 |
| 支持的LLMs | 丰富 | 丰富 | 仅GPT |
| 本地部署 | 支持 | 不适用 | 不支持 |
特定领域的聊天机器人和 AI 助理
通过可视化的提示词编排和数据集嵌入,零代码即可快速构建对话机器人或 AI 助理,并可持续优化对话策略,革新人机交互体验。
私有化部署
项目基础信息
| 项目设立 | 2023 年 3 月 |
|---|---|
| 开源协议 | 基于 Apache License 2.0 有限商业许可 |
| 官方研发团队 | 超过 20 名全职员工 |
| 社区贡献者 | 超过 290 人 (截止 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 为以下模型提供商提供原生支持:
| Provider | LLM | Text Embedding | Rerank | Speech to text | TTS | |
|---|---|---|---|---|---|---|
| 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,(👓) 代表视觉能力。
这张表格我们会一直保持更新。同时,我们也留意着社区成员们所提出的关于模型供应商的各种请求。如果你有需要的模型供应商却没在上面找到,不妨动手参与进来,通过提交一个PR(Pull Request)来做出你的贡献。欢迎查阅我们的 成为贡献者指南了解更多。
云服务
Dify 为所有人提供了云服务,你无需自己部署即可使用 Dify 的完整功能。要使用 Dify 云服务,你需要有一个 GitHub 或 Google 账号。
订阅计划
我们为云服务设计了多个订阅计划,您可以根据团队情况按需订阅:
- Sandbox(免费版)
- 专业版
- 团队版
- 企业版
各版本定价请参考:https://dify.ai/pricing
Hello Dify
官方文档
官方文档欢迎使用 Dify
部署社区版,官方文档提供了两种部署方式:
部署
这里重点探讨 Docker Compose 部署
如果您的系统安装了 Docker Compose V2 而不是 V1,请使用
docker compose而不是docker-compose。通过$ docker compose version检查这是否为情况。在这里阅读更多信息。这里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 / sandboxNAME 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
官方说明 这是因为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
