Dify
简体中文
简体中文
  • 入门
    • 欢迎使用 Dify
      • 特性与技术规格
      • 模型供应商列表
    • 云服务
    • 社区版
      • Docker Compose 部署
      • 本地源码启动
      • 宝塔面板部署
      • 单独启动前端 Docker 容器
      • 环境变量说明
      • 常见问题
    • Dify Premium
    • Dify 教育版
  • 手册
    • 接入大模型
      • 增加新供应商
      • 预定义模型接入
      • 自定义模型接入
      • 接口方法
      • 配置规则
      • 负载均衡
    • 构建应用
      • 创建应用
      • 聊天助手
        • 多模型调试
      • Agent
      • 应用工具箱
        • 敏感内容审查
    • 工作流
      • 关键概念
      • 变量
      • 节点说明
        • 开始
        • LLM
        • 知识检索
        • 问题分类
        • 条件分支
        • 代码执行
        • 模板转换
        • 文档提取器
        • 列表操作
        • 变量聚合
        • 变量赋值
        • 迭代
        • 参数提取
        • HTTP 请求
        • Agent
        • 工具
        • 结束
        • 直接回复
        • 循环
      • 快捷键
      • 编排节点
      • 文件上传
      • 异常处理
        • 预定义异常处理逻辑
        • 错误类型
      • 附加功能
      • 预览与调试
        • 预览与运行
        • 单步调试
        • 对话/运行日志
        • 检查清单
        • 运行历史
      • 应用发布
      • 结构化输出
      • 变更公告:图片上传被替换为文件上传
    • 知识库
      • 创建知识库
        • 1. 导入文本数据
          • 1.1 从 Notion 导入数据
          • 1.2 从网页导入数据
        • 2. 指定分段模式
        • 3. 设定索引方法与检索设置
      • 管理知识库
        • 维护知识库内文档
        • 通过 API 维护知识库
      • 元数据
      • 在应用内集成知识库
      • 召回测试/引用归属
      • 知识库请求频率限制
      • 连接外部知识库
      • 外部知识库 API
    • 工具
      • 快速接入工具
      • 高级接入工具
      • 工具配置
        • Google
        • Bing
        • SearchApi
        • StableDiffusion
        • Dall-e
        • Perplexity Search
        • AlphaVantage 股票分析
        • Youtube
        • SearXNG
        • Serper
        • SiliconFlow (支持 Flux 绘图)
        • ComfyUI
    • 发布
      • 发布为公开 Web 站点
        • Web 应用的设置
        • 文本生成型应用
        • 对话型应用
      • 嵌入网站
      • 基于 APIs 开发
      • 基于前端组件再开发
    • 标注
      • 日志与标注
      • 标注回复
    • 监测
      • 集成外部 Ops 工具
        • 集成 LangSmith
        • 集成 Langfuse
        • 集成 Opik
      • 数据分析
    • 扩展
      • API 扩展
        • 使用 Cloudflare Workers 部署 API Tools
        • 敏感内容审查
      • 代码扩展
        • 外部数据工具
        • 敏感内容审查
    • 协同
      • 发现
      • 邀请与管理成员
    • 管理
      • 应用管理
      • 团队成员管理
      • 个人账号管理
      • 订阅管理
      • 版本管理
  • 动手实验室
    • 初级
      • 如何搭建 AI 图片生成应用
      • AI Agent 实战:搭建个人在线旅游助手
    • 中级
      • 使用文件上传搭建文章理解助手
      • 使用知识库搭建智能客服机器人
      • ChatFlow 实战:搭建 Twitter 账号分析助手
  • 社区
    • 寻求支持
    • 成为贡献者
    • 为 Dify 文档做出贡献
  • 插件
    • 功能简介
    • 快速开始
      • 安装与使用插件
      • 插件开发
        • 初始化开发工具
        • Tool 插件
        • Model 插件
          • 创建模型供应商
          • 接入预定义模型
          • 接入自定义模型
        • Agent 策略插件
        • Extension 插件
        • Bundle 插件包
      • 插件调试
    • 插件管理
    • 接口定义
      • Manifest
      • Endpoint
      • Tool
      • Agent
      • Model
        • 模型设计规则
        • 模型接口
      • 通用规范定义
      • 持久化存储
      • 反向调用 Dify 服务
        • App
        • Model
        • Tool
        • Node
    • 最佳实践
      • 开发 Slack Bot 插件
      • Dify MCP 插件指南:一键连接 Zapier 并自动发送邮件
    • 发布插件
      • 自动发布插件
      • 发布至 Dify Marketplace
        • 插件开发者准则
        • 插件隐私政策准则
      • 发布至个人 GitHub 仓库
      • 本地发布与分享
      • 第三方签名验证
    • 常见问题
  • 研发
    • 后端
      • DifySandbox
        • 贡献指南
    • 模型接入
      • 接入 Hugging Face 上的开源模型
      • 接入 Replicate 上的开源模型
      • 接入 Xinference 部署的本地模型
      • 接入 OpenLLM 部署的本地模型
      • 接入 LocalAI 部署的本地模型
      • 接入 Ollama 部署的本地模型
      • 接入 LiteLLM 代理的模型
      • 接入 GPUStack 进行本地模型部署
      • 接入 AWS Bedrock 上的模型(DeepSeek)
    • 迁移
      • 将社区版迁移至 v1.0.0
  • 阅读更多
    • 应用案例
      • DeepSeek 与 Dify 集成指南:打造具备多轮思考的 AI 应用
      • 本地私有化部署 DeepSeek + Dify,构建你的专属私人 AI 助手
      • 如何训练出专属于“你”的问答机器人?
      • 教你十几分钟不用代码创建 Midjourney 提示词机器人
      • 构建一个 Notion AI 助手
      • 如何在几分钟内创建一个带有业务数据的官网 AI 智能客服
      • 使用全套开源工具构建 LLM 应用实战:在 Dify 调用 Baichuan 开源模型能力
      • 手把手教你把 Dify 接入微信生态
      • 使用 Dify 和 Twilio 构建 WhatsApp 机器人
      • 将 Dify 应用与钉钉机器人集成
      • 使用 Dify 和 Azure Bot Framework 构建 Microsoft Teams 机器人
      • 如何让 LLM 应用提供循序渐进的聊天体验?
      • 如何将 Dify Chatbot 集成至 Wix 网站?
      • 如何连接 AWS Bedrock 知识库?
      • 构建 Dify 应用定时任务助手
      • 如何在 Dify 内体验大模型“竞技场”?以 DeepSeek R1 VS o1 为例
      • 在 Dify 云端构建 AI Thesis Slack Bot
      • 将 Dify 快速接入 QQ、微信、飞书、钉钉、Telegram、Discord 等平台
    • 扩展阅读
      • 什么是 LLMOps?
      • 什么是数组变量?
      • 检索增强生成(RAG)
        • 混合检索
        • 重排序
        • 召回模式
      • 提示词编排
      • 如何使用 JSON Schema 让 LLM 输出遵循结构化格式的内容?
    • 常见问题
      • 本地部署
      • LLM 配置与使用
      • 插件
  • 政策
    • 开源许可证
    • 用户协议
      • 服务条款
      • 隐私政策
      • 获取合规报告
Powered by GitBook
On this page
  • 本实验中你将掌握的知识点
  • 前提条件
  • 创建应用
  • 添加模型供应商
  • 创建知识库
  • 分段设置
  • 索引方式
  • Embedding 模型
  • 检索设置
  • 同步自 Web 站点
  • 调整知识库内容
  • 召回测试
  • 添加节点
  • 问题分类节点
  • 直接回复节点
  • 知识检索节点
  • LLM 节点
  • 思考题 1: 如何连接外部知识库
  • 思考题 2: 如何通过 API 管理知识库
  • 思考题 3: 如何将客服机器人嵌入网页
  1. 动手实验室
  2. 中级

使用知识库搭建智能客服机器人

作者:Steven Lynn。Dify Technical Writer。

上一个实验中,我们学习了文件上传的基本用法。然而,当我们需要读取的文本超出 LLM 的上下文窗口时,就需要用到知识库了。

什么是上下文?

上下文窗口是指 LLM 在处理文本时能够“看到”和“记住”的文字范围。它决定了模型在生成回答或继续文本时,能够参考多少之前的文字信息。窗口越大,模型能利用的上下文信息越多,生成的内容通常更准确和连贯。

在之前,我们了解到 LLM 的幻觉的概念,很多情况下 LLM 知识库可以让 Agent 从中定位到准确的信息,从而准确地回答问题。在一些特定领域,比如客服、检索工具等有应用。

传统的客服机器人往往是基于关键词检索的,当用户输入了关键词以外的问题,机器人就无法解决。知识库正是为了解决这样一个问题,能够做到语义级别上的检索,降低人工的负担。

在实验开始之前,请记住知识库的核心是检索而非 LLM,是 LLM 增强了输出的过程,但真正的需求仍然是生成答案。

本实验中你将掌握的知识点

  • Chatflow 的基础使用

  • 知识库、外部知识库的使用

  • embedding 的概念

前提条件

创建应用

在 Dify 中选择创建空白应用 - 工作流编排。

添加模型供应商

本次实验中需要涉及使用 embedding 模型,目前支持 embedding 的模型提供商中有 OpenAI、Cohere 等,在 Dify 的模型供应商中有标注 TEXT EMBEDDING ,请确保至少添加了一个并且有充足余额。

什么是 embedding?

" Embedding "是一种将离散型变量(如单词、句子或者整个文档)转化为连续的向量表示的技术。

直白地说,在我们将自然语言处理为数据时会将文本转为向量,这个过程被称作 embedding。语义相似的文本的向量会位置相近,语义相反的文本的向量位置相反。LLM 使用这样的数据做训练,预测出后续的向量,从而生成文本。

创建知识库

登录 Dify -> 知识库 -> 选择数据源

Dify 支持三种数据源:上传文本文件、Notion、网页。

其中,本地文本文件需要注意文件类型的限制以及文件大小的限制;同步 Notion 内容需要绑定 Notion 账号;同步 Web 站点需要使用 Jina 或者 Firecrawl 的 API。

下面将先以本地文件为例。

分段设置

上传文档后,会进入以下页面:

可以看到右侧有分段预览。当前默认选择的是自动分段与清洗,Dify 会根据文本内容的不同自动将文章切分为许多个段落。你也可以在自定义中设置其他的切分规则。

索引方式

通常情况下选择高质量,但是需要额外消耗 token。选择经济无需消耗 token。

在社区版 Dify 里有采用 Q&A 分段模式,选择对应的语言可以将文本内容整理为问答格式,需要额外消耗 token。

Embedding 模型

请在使用前查阅模型供应商的使用文档、模型定价等信息。

不同的 embedding 模型适用场景不同。例如 Cohere 的 embed-english 适用于英语文档,embed-multilingual 适用于多语言文档。

检索设置

Dify 提供了向量检索、全文检索、混合检索三种检索功能,其中常用的检索是混合检索。

混合检索中可以设置权重或者使用重新排序(Rerank)模型。使用权重设置时,可以设置检索更侧重语义还是关键词,例如下图中语义占 70% 的权重,关键词占30%的权重。

点击保存并处理将会处理文档,完成处理后文档就可以在应用中使用了。

同步自 Web 站点

目前 Dify 支持最多 50 个页面的处理,请注意限制数量的设置。如果超出,可以再创建新的知识库。

调整知识库内容

在知识库处理完所有文档后,最好前往知识库确认分段的连贯性。如果不连贯将会影响检索的效果,需要手动调整。

点击文档内容,对分段内容进行浏览,如果有无关的内容可以禁用或删除。

如果有内容被分段到了另外一个段落,也需要调整回来。

召回测试

在知识库的文档页,左侧边栏中点击召回测试,可以输入关键词来测试检索结果的准确性。

添加节点

进入创建好的 APP ,下面开始构建智能客服机器人。

问题分类节点

你需要使用问题分类节点将用户的不同需求分离开。有的情况下用户甚至会聊无关的话题,对此也需要设置一个分类。

为了让分类更准确,你需要选择更优秀的 LLM,分类需要写的足够具体、区分度足够大。

以下是一个参考分类:

  • 用户询问无关问题

  • 用户询问和Dify相关问题

  • 用户请求对技术名词的解释

  • 用户询问社群加入方式

直接回复节点

问题分类中,“用户询问无关问题”和“用户询问社群加入方式”这两个问题是不需要经过 LLM 的处理就能回复的。因此你可以直接在这两个问题后面连接直接回复节点。

“用户询问无关问题”:

可以将用户引导到帮助文档,让用户先尝试自己解决,例如:

很抱歉,我不能回答你的问题。如果你需要更多帮助,请查看[帮助文档](https://docs.dify.ai)。

Dify 支持 Markdown 格式的文本的输出。你可以在输出中用 Makrdown 来丰富文本的格式。甚至可以用 Markdown 格式在文中插入图片,效果如下:

知识检索节点

在“用户询问和Dify相关问题”后增加知识检索节点,勾选需要使用的知识库。

LLM 节点

在知识检索节点的下一个节点,你需要选择 LLM 节点来整理知识库召回的内容。

LLM 需要根据用户的提问,调整回复,使得回复内容更加得体。

上下文:需要将知识检索节点的输出作为 LLM 节点的上下文。

系统提示词:根据{{上下文}},回答{{用户提问}}

此外,你可以打开 LLM 记忆让用户的对话体验更加连贯。

思考题 1: 如何连接外部知识库

在知识库功能中,你可以通过外部知识库 API 来连接外部知识库,例如 AWS Bedrock 知识库。

思考题 2: 如何通过 API 管理知识库

无论是社区版还是 SaaS 版 Dify,你都可以通过知识库 API 增加、删除、查询状态等。

在搭载知识库的实例中,进入 知识库 -> API,并且创建 API 密钥。请妥善保管 API 密钥。

思考题 3: 如何将客服机器人嵌入网页

应用发布后,选择嵌入网页,选择一种合适的嵌入形式,将代码粘贴到网页的合适位置即可。

Previous使用文件上传搭建文章理解助手NextChatFlow 实战:搭建 Twitter 账号分析助手

Last updated 3 months ago

很多情况下,我们需要根据帮助文档构建智能客服,以 Dify 为例,我们可以将 转为知识库。

你可以在提示词书写区域输入/或者{来引用变量。在变量中,sys.开头的变量是系统变量,请查询相关说明。

有关 AWS Bedrock 知识库的最佳实践,请阅读:

Dify 的帮助文档
帮助文档
如何连接 AWS Bedrock 知识库?