一、Dify简介
Dify是什么
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps的理念,使开发者可以快速搭建生产级的生成式 AI 应用。
LLMOps是一个涵盖了大型语言模型(如GPT系列)开发、部署、维护和优化的一整套实践和流程。LLMOps 的目标是确保高效、可扩展和安全地使用这些强大的 AI 模型来构建和运行实际应用程序。它涉及到模型训练、部署、监控、更新、安全性和合规性等方面。
Dify 能做什么?
创业,快速的将你的 AI 应用创意变成现实,无论成功和失败都需要加速。在真实世界,已经有几十个团队通过 Dify 构建 MVP(最小可用产品)获得投资,或通过 POC(概念验证)赢得了客户的订单。
将 LLM 集成至已有业务,通过引入 LLM 增强现有应用的能力,接入 Dify 的 RESTful API 从而实现 Prompt 与业务代码的解耦,在 Dify 的管理界面是跟踪数据、成本和用量,持续改进应用效果。
作为企业级 LLM 基础设施,一些银行和大型互联网公司正在将 Dify 部署为企业内的 LLM 网关,加速 GenAI 技术在企业内的推广,并实现中心化的监管。
探索 LLM 的能力边界,即使你是一个技术爱好者,通过 Dify 也可以轻松的实践 Prompt 工程和 Agent 技术,在 GPTs 推出以前就已经有超过 60,000 开发者在 Dify 上创建了自己的第一个应用。
Dify 架构图
快速试用
使用科锐本地搭建的服务,登录 科锐Dify服务
提供邮箱地址给管理员@Lyn Zhang,创建登陆账号,登陆后进入工作区,创建应用开始试用。
注意事项:
- 平台使用科锐Azure Openai Service为系统默认模型
- 模型类型支持gpt-35-turbo、gpt-35-turbo-16k、gpt-4
二、Dify应用构建能力
- 选择应用构建类型
构建时提供了几种应用类型:文本生成型与对话型,Agent,工作流,后续会推出更多应用范式,目标是能覆盖 80% 以上的常规 LLM 应用情景
|
文本生成型 |
对话型 |
WebApp 界面 |
表单+结果式 |
聊天式 |
WebAPI 端点 |
completion-messages |
chat-messages |
交互方式 |
一问一答 |
多轮对话 |
流式结果返回 |
支持 |
支持 |
上下文保存 |
当次 |
持续 |
用户输入表单 |
支持 |
支持 |
数据集与插件 |
支持 |
支持 |
AI 开场白 |
不支持 |
支持 |
情景举例 |
翻译、判断、索引 |
聊天或一切 |
- 提示词编排(Prompt Engineering)
一个好的 Prompt 可以有效提高模型输出的质量,降低错误率,并满足特定场景的需求
- 确定应用场景和功能需求
- 设计并测试 Prompts 与模型参数
- 编排 Prompts 与用户输入
- 发布应用
- 观测并持续迭代
不同的应用类型,提示词编排方法不同
1、对话型基础助手
对话型应用采用一问一答模式与用户持续对话。
适用场景
对话型应用可以用在客户服务、在线教育、医疗保健、金融服务等领域。这些应用可以帮助组织提高工作效率、减少人工成本和提供更好的用户体验。
对话型应用的编排支持:对话前提示词,变量,上下文,开场白和下一步问题建议。
第 1 步 创建应用
在首页点击 “创建应用” 按钮创建应用。填上应用名称,应用类型选择聊天助手。
第 2 步 编排应用
应用成功后会自动跳转到编排页面,开始编排。
2.1 填写提示词
提示词用于对 AI 的回复做出一系列指令和约束。可插入表单变量,例如 。提示词中的变量的值会替换成用户填写的值。
表单变量{{input}}会自动添加到变量中,变量将以表单形式让用户在对话前埴写,用户填写的表单内容将自动替换提示词中的变量。
2.2 添加上下文
如果应用想基于私有的上下文对话来生成内容。可以用我们数据集功能。在上下文中点 “添加” 按钮来添加数据集。
可以导入本地文本或同步notion内容,经过文本分段与清洗,处理为知识库,作为上下文的输入。
2.3 添加更多功能
2.4 调试
我们在右侧填写 用户输入,输入内容进行调试。
如果结果不理想,可以调整提示词和模型参数。点右上角点 模型名称 来设置模型的参数:
2.4 发布
调试好应用后,点击右上角的 “发布” 按钮来保存当前的设置。
发布后可分享公开访问url进行app试用:
或者调用后端服务API接入你的任务应用
示例应用:Java后端面试官
访问地址:http://ai.hewa.cn/chat/LgBaikqvQF5m3Q5m
2、文本生成型应用
文本生成类应用是一种能够根据用户提供的提示,自动生成高质量文本的应用。它可以生成各种类型的文本,例如文章摘要、翻译等。
适用场景
文本生成类应用适用于需要大量文本创作的场景,例如新闻媒体、广告、SEO、市场营销等。它可以为这些行业提供高效、快速的文本生成服务,降低人力成本并提高生产效率。
如何编排
文本生成应用的编排支持:前缀前提示词,变量,上下文和生成更多类似的内容。
创建应用流程和对话型基础助手相同
示例应用:翻译助手
访问地址:http://ai.hewa.cn/completion/d6QUWDdX3do7gqMy
3、Agent智能助手
智能助手(Agent Assistant),利用大语言模型的推理能力,能够自主对复杂的人类任务进行目标规划、任务拆解、工具调用、过程迭代,并在没有人类干预的情况下完成任务。
可以在“探索”中找到智能助手的应用模板,添加到自己的工作区,或在此基础上进行自定义,帮助你完成财务报表分析、撰写报告、Logo 设计、旅程规划等任务。
第 1 步 创建应用
在首页点击 “创建应用” 按钮创建应用。填上应用名称,应用类型选择Agent
第 2 步 编排应用
创建应用成功后会自动跳转到编排页面,即可开始编排
选择智能助手的推理模型,智能助手的任务完成能力取决于模型推理能力,我们建议在使用智能助手时选择推理能力更强的模型系列如 gpt-4 以获得更稳定的任务完成效果。
可以在“提示词”中编写智能助手的指令,为了能够达到更优的预期效果,你可以在指令中明确它的任务目标、工作流程、资源和限制等。
添加助手需要的工具
在“上下文”中,你可以添加智能助手可以用于查询的知识库工具,这将帮助它获取外部背景知识。
在“工具”中,你可以添加需要使用的工具。工具可以扩展 LLM 的能力,比如联网搜索、科学计算或绘制图片,赋予并增强了 LLM 连接外部世界的能力。Dify 提供了两种工具类型:第一方工具和自定义工具。
你可以直接使用 Dify 生态提供的第一方内置工具,或者导入自定义的 API 工具(目前支持 OpenAPI / Swagger 和 OpenAI Plugin 规范)。
通过这些工具可以在 Dify 上创建更强的 AI 应用,例如可以为智能助理型应用(Agent)编排合适的工具,它可以通过任务推理、步骤拆解、调用工具完成复杂任务。另外工具也可以方便将你的应用与其他系统或服务连接,与外部环境交互,如代码执行、对专属信息源的访问等。
配置 Agent
提供了 Function calling(函数调用)和 ReAct 两种推理模式。已支持 Function Call 的模型系列如 gpt-3.5/gpt-4 拥有效果更佳、更稳定的表现,尚未支持 Function calling 的模型系列,则提供支持了 ReAct 推理框架实现类似的效果。
在 Agent 配置中,可以修改助手的迭代次数限制。
示例应用:旅行规划助手
访问地址:http://ai.hewa.cn/chat/lySuyZmuUIN210R8
4、工作流(flow)
工作流通过将复杂的任务分解成较小的步骤(节点)降低系统复杂度,减少了对提示词技术和模型推理能力的依赖,提高了 LLM 应用面向复杂任务的性能,提升了系统的可解释性、稳定性和容错性。
按应用情景划分为两种类型:
- Chatflow:面向对话类情景,包括客户服务、语义搜索、以及其他需要在构建响应时进行多步逻辑的对话式应用程序。
- Workflow:面向自动化和批处理情景,适合高质量翻译、数据分析、内容生成、电子邮件自动化等应用程序。
Chatflow:
为解决自然语言输入中用户意图识别的复杂性,Chatflow 提供了问题理解类节点,如问题分类、问题重写、子问题拆分等节点。相对于 Workflow 增加了 Chatbot 特性的支持,如:对话历史(Memory)、标注回复、Answer 节点等。
Workflow:
为解决自动化和批处理情景中复杂业务逻辑,Workflow 提供了丰富的逻辑节点,如代码节点、IF/ELSE 节点、合并节点、模板转换节点等,除此之外也将提供定时触发和事件触发的能力,方便构建自动化流程。
节点是工作流中的关键构成,通过连接不同功能的节点,执行工作流的一系列操作。节点类型:
变量用于串联工作流中前后节点的输入与输出,实现流程中的复杂处理逻辑。
- 工作流需要定义启动执行或者对话的输入变量。
- 节点需要定义启动执行的输入变量,如问题分类器的输入变量一般为用户输入的问题。
chatflow和workflow区别
chatflow示例应用:问题分类 + 知识库 + AI聊天客服
访问地址:http://ai.hewa.cn/chat/UiHzOKsWrePmf5Z5
workflow示例应用:三步翻译
访问地址:http://ai.hewa.cn/workflow/CV9Gq9Y80MFcRgce
其他通用功能
配置对话开场白
您可以为智能助手配置一套会话开场白和开场问题,配置的对话开场白将在每次用户初次对话中展示助手可以完成什么样的任务,以及可以提出的问题示例。
标注回复
标注回复功能通过人工编辑标注为应用提供了可定制的高质量问答回复能力。
适用情景:
- 特定领域的定制化回答: 在企业、政府等客服或知识库问答情景时,对于某些特定问题,服务提供方希望确保系统以明确的结果来回答问题,因此需要对在特定问题上定制化输出结果。比如定制某些问题的“标准答案”或某些问题“不可回答”。
- POC 或 DEMO 产品快速调优: 在快速搭建原型产品,通过标注回复实现的定制化回答可以高效提升问答结果的生成预期,提升客户满意度。
标注回复功能相当于提供了另一套检索增强系统,可以跳过 LLM 的生成环节,规避 RAG 的生成幻觉问题。
使用流程
- 在开启标注回复功能之后,可以对 LLM 对话回复内容进行标注,你可以将 LLM 回复的高质量答案直接添加为一条标注,也可以根据自己的需求编辑一条高质量答案,这些编辑的标注内容会被持久化保存;
- 当用户再次提问相似的问题时,会将问题向量化并查询中与之相似的标注问题;
- 如果找到匹配项,则直接返回标注中与问题相对应的答案,不再传递至 LLM 过程进行回复;
- 如果没有找到匹配项,则问题继续常规流程(传递至 LLM);
开启时需要设置标注回复的参数,包括:Score 阈值 和 Embedding 模型
Score 阈值用于设置标注回复的匹配相似度阈值,只有高于阈值分数的标注会被召回。
Embedding 模型用于对标注文本进行向量化,切换模型时会重新生成嵌入。
添加方法:
- 可以在调试与预览页面直接在模型回复信息上添加或编辑标注。
- 通过“应用构建->日志与标注->标注”,手动添加标注,批量导入或者导出。
敏感内容审查
在与 AI 应用交互的过程中,在内容安全性,用户体验,法律法规等方面一般都有要求,此时我们需要“敏感词审查”功能,来为终端用户创造一个更好的交互环境。 在应用编排页面,点击“添加功能”,找到底部的工具箱“内容审核”:
提供了三种内容审查类别:
- 调用 OpenAI Moderation API
OpenAI 提供了内容审查功能api,确保不会输出包含有争议的内容,比如暴力,性和非法行为,具体可以参考 platform.openai.com,可以直接选择 OpenAI Moderation API进行调用,可以设置是否审核输入内容或输出内容,进行预设回复
- 自定义关键词
可以自定义需要审查的敏感词,比如把“杀人”作为关键词,在用户输入的时候作审核动作,要求预设回复内容为“输入内容违反了使用政策。”,可以预见的结果是当用户在终端输入包含“杀人”的语料片段时,就会触发敏感词审查工具,返回预设回复内容。
- 敏感词审查扩展
针对个性化敏感词审查机制,可以根据个人或企业的敏感词审查机制需求写一个 API 扩展,然后在 Dify 上调用,实现敏感词审查的高自定义和隐私保护。
应用发布
- 发布为公开web站点
在应用概览页中,找到关于AI 站点卡片。只需开启 WebApp 的访问,就可以得到一个可分享可分享给用户的链接了。
- 可以对生成的应用进行设置,如图标,名称,应用描述,界面语言,版权信息,隐私政策链接
- 应用的功能是否开启,取决于在编排时是否开启此功能,如对话开场白,变量,下一步建议,更多功能等
基于API进行二次开发
发布每个应用之后,应用都可以作为API被调用,整合入其他系统中。
使用这样的API可以:
- 可以让应用直接安全地调用 LLM 能力,省去后端服务的开发过程
- 对 LLM 供应商的基础能力进行了良好封装
- 随时切换 LLM 供应商,并对 LLM 的密钥进行集中管理
- 在可视化的界面中运营你的应用,例如分析日志、标注及观察用户活跃
- 持续为应用提供更多工具能力、插件能力和数据集
模型自定义配置
Dify 目前已支持主流的模型供应商,例如 OpenAI 的 GPT 系列、Anthropic 的 Claude 系列等。不同模型的能力表现、参数类型会不一样,可以根据不同情景的应用需求选择合适的模型供应商。应用模型能力前,需要前往不同模型厂商官网获得他们的 API key 。
支持以下模型接入:
OpenAI、Azure OpenAI Service、Anthropic、Hugging Face Hub、Replicate、Xinference、OpenLLM、讯飞星火、文心一言、通义千问、Minimax、ZHIPU(ChatGLM)
知识库
数据集功能可以以简单的方式管理数据集,并自动集成至 AI 应用中。只需准备文本内容,例如:
- 长文本内容(TXT、Markdown、DOCX、HTML、JSONL 甚至是 PDF 文件)
- 结构化数据(CSV、Excel 等)
可以通过上传文档或notion进行导入(API导入),然后进行文本自动分段&向量化处理,使得用户的提问(输入)能匹配到相关的文本段落,最后输出结果。
三、dify开源部署方案
1. Docker compose部署
Clone 源代至本地
git clone https://github.com/langgenius/dify.git
进入 dify 源代码的 docker 目录,执行一键启动命令:
cd dify/docker
docker compose up -d
部署结果:
[+] Running 7/7
✔ Container docker-web-1 Started 1.0s
✔ Container docker-redis-1 Started 1.1s
✔ Container docker-weaviate-1 Started 0.9s
✔ Container docker-db-1 Started 0.0s
✔ Container docker-worker-1 Started 0.7s
✔ Container docker-api-1 Started 0.8s
✔ Container docker-nginx-1 Started
最后检查是否所有容器都正常运行:
docker compose ps
包括 3 个业务服务 ,以及 4 个基础组件 。
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-api-1 langgenius/dify-api:0.3.2 "/entrypoint.sh" api 4 seconds ago Up 2 seconds 80/tcp, 5001/tcp
docker-db-1 postgres:15-alpine "docker-entrypoint.s…" db 4 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp
docker-nginx-1 nginx:latest "/docker-entrypoint.…" nginx 4 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp
docker-redis-1 redis:6-alpine "docker-entrypoint.s…" redis 4 seconds ago Up 3 seconds 6379/tcp
docker-weaviate-1 semitechnologies/weaviate:1.18.4 "/bin/weaviate --hos…" weaviate 4 seconds ago Up 3 seconds
docker-web-1 langgenius/dify-web:0.3.2 "/entrypoint.sh" web 4 seconds ago Up 3 seconds 80/tcp, 3000/tcp
docker-worker-1 langgenius/dify-api:0.3.2 "/entrypoint.sh" worker 4 seconds ago Up 2 seconds 80/tcp, 5001/tcp
更新拉取最新部署版本:
进入 dify 源代码的 docker 目录,按顺序执行以下命令:
cd dify/dockergit
pull origin main
docker compose down
docker compose pull
docker compose up -d
开始访问
访问 Dify,在浏览器中输入 访问 Dify。
2. 本地源码部署,支持项目商业化改动
平台目前存在的一些问题:
- 无法使用openai的免费账号api key,账户需要绑定国外银行卡
Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}
- 部分内置工具无法使用
应用可以添加的部分工具需要科学上学才能调用,如搜索服务(google,雅虎等),工具是否能调用成功需要测试验证,需要寻找国产替代
额外阅读:
Langchain
Prompt Engineering
ChatGPT Prompt Engineering for Developers
工作流智能体
大模型幻觉问题
当模型生成的文本不遵循原文(Faithfulness)或者不符合事实(Factualness),就认为模型出现了幻觉的问题。
逻辑谬误:模型在进行推理时出现了错误,提供错误的答案。
捏造事实:模型自信地断言不存在的事实,而不是回答“我不知道”
数据偏见:由于某些数据的普遍存在,模型的输出可能会偏向某些方向,导致错误的结果,如价值观偏见等。
检索增强生成(RAG)
向量检索为核心的 RAG 架构已成为解决大模型获取最新外部知识,同时解决生成幻觉问题的主流技术框架
revolutionizing-rag-with-enhanced-pdf-structure-recognition
Retrieval-Augmented Generation for Large Language Models: A Survey
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)