大模型应用开发之Dify进阶版使用教程—react前端+django后端+dify-API制作聊天界面

发布于:2025-05-23 ⋅ 阅读:(17) ⋅ 点赞:(0)

Dify进阶使用教程



前言

本文章将介绍如何使用dify提供的API进行项目开发,并介绍所用到的dify部分组件。
这一篇适合需要自主调用dify-API的朋友们。
项目背景:需要在自有系统中开发一个“知识回答机器人”
需求如下
1.AI-chat功能
2.根据自己React + Django系统项目字段进行知识库数据隔离,以及限制AI回答问题能够使用的知识库。

结果先行展示,给大伙靠谱的详情操作贴,最后在自己系统中,可生成参考知识库内容回答的智能专业客服机器人。
聊天界面
聊天界面
dify流程配置
请添加图片描述


一、dify-docker环境搭建及简单使用

请参考上一篇文章大模型应用开发之Dify入门使用教程-deepseek-R1,只需配置30分钟就能用

二、本篇使用API源码部署

代码下载及环境搭建,参考dify官方文档:dify官方手册

启动dify后端

进入项目api目录下

poetry run flask run --host 0.0.0.0 --port=5001 --debug

启动dify前端

进入web目录下

pnpm start

上述完成后浏览器输入http://localhost/install,进入dify控制台界面。按照流程设置账号密码后,登录即可使用。
然后来到,我们自己的工作流界面
在这里插入图片描述

基于通义模型的智能客服机器人应用与自己项目联动实战

1. 使用API进行项目与dify联动

1.1 在控制台主页,点击创建访问API

在这里插入图片描述

1.2 进入API页面,这里有4块是需要了解并使用的,中间是调用API基础路径,以及需要的header头部信息。

中间下方是每个API的具体入参,返回参数的介绍。右上角是我们API-Key获取的位置,右边是目录栏方便快速找到自己需要的API。
在这里插入图片描述

1.3 点击API密钥,进行创建API,并将其放保存,后续在后端代码中使用。

在这里插入图片描述

1.4 本教程我们只选择发送对话消息,以及暂停响应作为示例。

接口参数详情可自行查看该界面,本章节不会一一介绍。
在这里插入图片描述

2. 配置工作流

为了满足按照项目的不同,隔离各个知识库的功能,需要对工作流进行配置

2.1 配置聊天额外入参

在编排页面,选择START,找到右边的加号,即可添加自定义字段,下图中红色框框住的由名称sys.开头的是系统默认字段,key则是自定义字段
在这里插入图片描述

2.2 将自定义字段内容配置在分类器中

分类器输入变量栏中找到自定义参数key,并选择填入,这样这个分类器将按照这个key的内容进行分类。
在这里插入图片描述
分类器分为三类:TEST、default、health,后续将通过key传参来进行区分
在这里插入图片描述

2.3 使用变量聚合器组件,将流程简化

在知识库检索后,加入变量聚合器,由于知识库将按照项目区分,所以每次问答只会走一个知识库,则将其聚合再放入大模型组件中。
避免多次配置,费时,且页面杂乱
在这里插入图片描述

2.4 知识库配置

创建三个知识库,这里我将知识库名字改为和分类key一致。
在这里插入图片描述

3. 项目对接Dify-API

3.1 将Dify-API所需配置写入后端,并编写view

重点可看有注释的地方

class AiRobotViewSet(viewsets.ModelViewSet):
    API_URL = "http://xx.xx.xx.xx:5001/v1/chat-messages" #dify后端地址 
    HEADERS = {
   
        'Authorization': 'Bearer app-xxxxxxxxxxxxxx',  #api-key
        'Content-Type': 'application/json'
    }

    @action(methods=['post'], detail=False, url_path="chat-messages")
    def chat_messages(self, request):
        def generate():
            # 转发请求到原始API
            
            product_keys = list(UserAndProdRoles.objects.filter(user_id=request.user.id).values_list('product__product_key', flat=T