一、引言

1.1 项目背景与目标

随着业务的发展和技术的进步,客户和内部员工对于获取信息的需求日益增长。传统的信息查询方式往往耗时且效率低下,尤其是在面对大量文档和资料的情况下。因此,我们需要一个能够快速响应查询请求、准确提供所需信息的解决方案。
为此,我们决定构建一个知识库机器人。通过这个机器人,我们可以实现以下目标:

  • 提高效率:减少人工查询的时间成本,使员工能够更专注于核心业务。

  • 提升客户满意度:为客户提供即时且准确的信息,增强用户体验。

  • 降低运营成本:自动化处理常见问题,减轻客服人员的工作负担。

1.2 技术选型介绍

  • Dify平台:Dify是一个开源的人工智能平台,专门用于构建和部署对话式AI应用。它提供了丰富的工具和服务,可以帮助我们快速构建高质量的知识库机器人。

  • 百炼平台:阿里云的百炼是一站式的大模型开发及应用构建平台,是一个大模型的服务平台。无论是开发者还是业务人员,都能深入参与大模型应用的设计和构建。

  • 通义千问:通义千问是阿里云推出的一个大型语言模型,具备强大的自然语言理解和生成能力。通过与Dify平台和百炼平台的结合,通义千问可以为我们提供高效、准确的问答服务。

二、环境准备

需要准备的资源:

  • 一台ECS(阿里云服务器)

  • 百炼平台的API Key




三、操作流程

3.1 部署Docker环境

  • 点击ECS实例的实例ID,进入实例的详情界面

  • 依次选择“定时与自动化任务”、“安装/卸载扩展程序”,点击“安装扩展程序”

  • 新建任务,填写任务名称,选择安装的扩展程序版本为“Docker社区版”,然后点击下一步

  • 点击“确定”

  • 等待安装完成

  • SSH连接到ECS服务器,检查是否安装成功,如下结果表示安装成功

docker -v

docker compose version

3.2 安装Dify

  • 克隆 Dify 源代码至本地,成功后能够在本地目录查看到“dify”的文件夹

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

  • 进入Dify的源代码的docker目录,复制环境变量文件

cd dify/docker

cp .env.example .env

  • 配置加速地址,本次采用自建的Docker代理仓库

  • 注:自建Docker代理仓库,参考:https://thechen.work/subject/article/slug_docker_hub/

sudo sh -c 'cat << EOF > /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://hub.thechen.top"
    ]
}
EOF'

  • 重载配置,并且重启Docker生效

sudo systemctl daemon-reload

sudo systemctl restart docker

  • 拉取镜像,启动项目,注意执行docker compose命令的路径需要在dify项目的docker目录下

  • 启动成功后,直接转到“3.3 构建应用”章节继续

docker compose up -d

  • 在拉取镜像过程中,如果出现镜像拉取失败的报错,如下:

  • 原因是网络波动导致的,解决方法:

  • 多尝试几次docker compose up -d,直到成功

  • 下载提前保存的tar镜像文件,手动上传到服务器上,然后逐个加载镜像文件(共8个),自动生成镜像,全部加载完毕后,确保有8个镜像,然后执行docker compose up -d启动项目

docker load -i 镜像文件.tar

3.3 构建应用

  • 项目启动成功后,在浏览器地址栏输入服务器的IP,会自动跳转到Dify项目的初始界面。在这个界面注册账户信息,点击“设置”

  • 设置完成后,会自动跳转登录界面,登录刚才注册的信息

  • 登陆后进入主页

  • 有点右上角头像,点击“设置”

  • 选择“模型供应商”,选择“通义千问”,填入百炼平台上申请的API KE,点击“保存”

  • 设置系统默认模型

  • 创建知识库

  • 上传文档,点击“下一步”。本次演练以“百炼系列手机产品介绍.docx”为例,内容如下:
百炼手机产品介绍
欢迎来到未来科技的前沿探索我们精心打造的智能手机系列每一款都是为了满足您对科技生活的无限遐想而生
百炼X1 —— 畅享极致视界搭载6.7英寸1440 x 3200像素超清屏幕搭配120Hz刷新率流畅视觉体验跃然眼前256GB海量存储空间与12GB RAM强强联合无论是大型游戏还是多任务处理都能轻松应对5000mAh电池长续航加上超感光四摄系统记录生活每一刻精彩参考售价4599 - 4999
通义Vivid 7 —— 智能摄影新体验拥有6.5英寸1080 x 2400像素全面屏AI智能摄影功能让每一张照片都能展现专业级色彩与细节8GB RAM与128GB存储空间确保流畅操作4500mAh电池满足日常所需侧面指纹解锁便捷又安全参考售价2999 - 3299
星尘S9 Pro —— 创新视觉盛宴突破性6.9英寸1440 x 3088像素屏下摄像头设计带来无界视觉享受512GB存储与16GB RAM的顶级配置配合6000mAh电池与100W快充技术让性能与续航并驾齐驱引领科技潮流参考售价5999 - 6499
百炼Ace Ultra —— 游戏玩家之选配备6.67英寸1080 x 2400像素屏幕内置10GB RAM与256GB存储确保游戏运行丝滑无阻5500mAh电池搭配液冷散热系统长时间游戏也能保持冷静高动态双扬声器沉浸式音效升级游戏体验参考售价3999 - 4299
百炼Zephyr Z9 —— 轻薄便携的艺术轻巧的6.4英寸1080 x 2340像素设计搭配128GB存储与6GB RAM日常使用游刃有余4000mAh电池确保一天无忧30倍数字变焦镜头捕捉远处细节轻薄而不失强大参考售价2499 - 2799
百炼Flex Fold+ —— 折叠屏新纪元集创新与奢华于一身主屏7.6英寸1800 x 2400像素与外屏4.7英寸1080 x 2400像素多角度自由悬停设计满足不同场景需求512GB存储12GB RAM加之4700mAh电池与UTG超薄柔性玻璃开启折叠屏时代新篇章此外这款手机还支持双卡双待卫星通话帮助您在世界各地都能畅联通话参考零售价9999 - 10999
每一款手机都是匠心独运只为成就您手中的科技艺术品选择属于您的智能伙伴开启未来科技生活的新篇章

  • 分段设置选择“自定义”,分段标识符以实际文档中的内容为准,比如此次“百炼系列手机产品介绍.docx”的内容是以换行符为标准的分段,点击“确认并预览”,可在右侧查看分段的效果。

  • 分段:大语言模型存在有限的上下文窗口,通常需要将整段文本进行分段处理后,将与用户问题关联度最高的几个段落召回,即分段 TopK 召回模式。此外,在用户问题与文本分段进行语义匹配时,合适的分段大小将有助于匹配关联性最高的文本内容,减少信息噪音。

  • 索引方式设置为“高质量”,检索设置为“混合检索”,且选择“权重设置”类型。

  • TopK:用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。系统默认值为 3 。数值越高,预期被召回的文本分段数量越多。

  • Score 阈值:用于设置文本片段筛选的相似度阈值,即:只召回超过设置分数的文本片段。系统默认关闭该设置,即不会对召回的文本片段相似值过滤。打开后默认值为 0.5。数值越高,预期被召回的文本数量越少。

  • 等待嵌入完成,点击“前往文档”,能够看到文档内容已经根据换行符,切割成了9段

  • 在“工作室”点击“创建空白应用”,选择“聊天助手”、“基础编排”,设置应用名称,然后“创建”

  • 进入应用后,给应用设置提示词,有助于提升回答的质量,并在上下文中添加知识库。完成后可在右侧进行测试,通过测试可以看到AI回答的内容与文档的内容没有误差

3.4 部署上线

  • 确保上线前,点击“发布”、“更新”

3.4.1 上线方式一:公开访问的网页
  • 在应用的“监测”页面,查看到公开访问的URL,可通过该URL直接跳转到网页端的对话界面

  • 应用场景:在线客服系统、FAQ 自助服务、产品咨询等等

3.4.2 上线方式二:嵌入式的网站AI助手
  • 在应用的“监测”页面,点击“嵌入”,选择第二种小窗口的方式,复制前端script 代码到前端的 或 标签中

  • 应用场景:在线论坛和社区、智能客服助手、产品文档查询助手等等

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Dify聊天机器人测试页面</title>
  <style>
    body {
      font-family: "微软雅黑", sans-serif;
      margin: 0;
      padding: 0;
      display: flex;
      justify-content: center;
      align-items: center;
      min-height: 100vh;
      background-color: #f4f4f9;
    }
    .container {
      text-align: center;
      max-width: 800px;
      padding: 20px;
      background-color: #ffffff;
      border-radius: 10px;
      box-shadow: 0 4px 8px rgba(0,0,0,0.1);
    }
    h1 {
      color: #333333;
    }
    p {
      font-size: 1.1em;
      line-height: 1.6;
      color: #666666;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>欢迎来到Dify聊天机器人测试页面</h1>
    <p>这是一个用于测试Dify聊天机器人集成的页面。</p>
  </div>

#填入你的script代码


</body>
</html>

3.4.3 上线方式三:API调用
  • 在应用的“监测”页面,“后端服务API”提供了API的接口地址,点击“API密钥”创建API KEY,通过调用API接口的方式实现个性化应用开发
  • 应用场景:小程序、自研系统、APP等等
import requests
url = 'http://IP/v1/chat-messages'
api_key = '{api_key}'
headers = {
    'Authorization': f'Bearer {api_key}',
    'Content-Type': 'application/json',
}
data = {
    "inputs": {},
    "query": "星尘S9 Pro的价格是多少",
    "response_mode": "blocking",
    "conversation_id": "",
    "user": "1",
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
    # 解析JSON响应
    response_json = response.json()
    # 从响应中提取answer字段
    answer = response_json.get('answer')

    if answer:
        print(answer)
    else:
        print("Response does not contain an 'answer' field.")
else:
    print(f"Request failed with status code: {response.status_code}")

3.4.4 上线方式四:钉钉机器人接入
  • 进入钉钉开发者后台(https://open-dev.dingtalk.com/?spm=ding_open_doc.document.0.0.74f445e50lIX5t#/) 创建钉钉应用

  • 开通全部的卡片权限(5个)

  • 添加机器人应用能力,并配置机器人,注意消息接收模式选择为“Stream模式”,然后发布

  • 应用发布

  • 保存Client ID和Client Secret

  • 进入钉钉卡片平台(https://open-dev.dingtalk.com/fe/card) 新建模板,注意卡片类型为“消息卡片”,卡片场景模板“AI卡片”。

  • 点击保存,发布,并保存卡片ID

  • git拉取项目

git clone https://github.com/zfanswer/dify-on-dingtalk.git

  • 复制环境变量文件

cd dify-on-dingtalk/docker/

cp ../.env.example .env

cp ../.bots.yaml.example .bots.yaml

  • 分别修改.env和.bots.yaml文件,配置好所需参数
  • .env配置参数说明

  • .bots.ymal配置参数说明

  • 启动项目

  • 启动成功后可以在钉钉群里添加机器人

  • 验证

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:https://thechen.work/subject/article/slug_dify/

许可协议:署名-非商业性使用 4.0 国际许可协议