dify-spring-boot-starter
  • 介绍
  • 快速开始
  • 安装
  • 配置
  • 客户端构建器
  • 功能

    • Chat API
    • Workflow API
    • Dataset API
    • Server API
  • 事件

    • 介绍
    • 聊天事件
  • 使用配置
  • 自定义配置
  • v1.x
  • v0.x
  • 更新日志
  • 简体中文
  • English
GitHub
  • 介绍
  • 快速开始
  • 安装
  • 配置
  • 客户端构建器
  • 功能

    • Chat API
    • Workflow API
    • Dataset API
    • Server API
  • 事件

    • 介绍
    • 聊天事件
  • 使用配置
  • 自定义配置
  • v1.x
  • v0.x
  • 更新日志
  • 简体中文
  • English
GitHub
  • 指南

    • 介绍
    • 快速开始
    • 安装
    • 配置
    • 客户端构建器
  • 功能

    • Chat API
    • Workflow API
    • Dataset API
    • Server API
  • 事件

    • 介绍
    • 聊天事件

Server API

接口概述

服务器 API 提供了全面的功能,用于与 Dify 平台交互,包括管理应用程序、检索和初始化应用程序及数据集的 API 密钥。所有接口都需要有效的 API 密钥进行身份验证。 使用 DifyServer 接口实例。

默认检测当前环境包含 redis 则使用 redis持久化 token,若不包含 redis 则使用默认实现保存 token(重启服务会丢失)

1. 应用管理

1.1 获取所有应用 (非分页)

方法

List<AppsResponseVO> apps(String mode, String name);

请求参数

参数名类型是否必须描述
modeString否模式 chat\agent-chat\completion\advanced-chat\workflow
nameString否应用名称,用于过滤应用列表(可选,传入空字符串时表示不过滤)

响应参数

AppsResponseVO

参数名类型描述
idString应用ID
nameString应用名称
maxActiveRequestsInteger最大活跃请求数
descriptionString应用描述
modeString应用模式
iconTypeString图标类型
iconString图标
iconBackgroundString图标背景
iconUrlString图标URL
modelConfigModelConfig模型配置
workflowObject工作流信息
useIconAsAnswerIconBoolean是否使用图标作为答案图标
createdByString创建者ID
createdAtLong创建时间(时间戳)
updatedByString更新者ID
updatedAtLong更新时间(时间戳)
tagsList<String>应用标签

ModelConfig

参数名类型描述
modelModel模型信息
prePromptString预提示文本
createdByString创建者ID
createdAtLong创建时间(时间戳)
updatedByString更新者ID
updatedAtLong更新时间(时间戳)

Model

参数名类型描述
providerString模型提供商
nameString模型名称
modeString模型模式
completionParamsCompletionParams完成参数

CompletionParams

参数名类型描述
stopList<String>停止序列

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetApps() {
    // 获取所有应用
    List<AppsResponseVO> apps = difyServer.apps("");

    // 获取带名称过滤的应用
    List<AppsResponseVO> filteredApps = difyServer.apps("myApp");
}

1.2 分页获取应用

方法

AppsResponseResult apps(AppsRequest appsRequest);

请求参数

AppsRequest

参数名类型是否必须描述
pageInteger否页码(默认:1)
limitInteger否每页数量(默认:20,范围:1-100)
modeString否应用模式过滤:chat\agent-chat\completion\advanced-chat\workflow
nameString否应用名称过滤
isCreatedByMeBoolean否是否为当前用户创建的应用

响应参数

AppsResponseResult

参数名类型描述
dataList<AppsResponse>当前页数据列表
hasMoreBoolean是否有更多页
limitInteger每页数量
pageInteger当前页码
totalInteger总数据数量

AppsResponse 的结构与 1.1 节中定义的相同。

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetAppsPaginated() {
    // 创建分页请求
    AppsRequest request = new AppsRequest();
    request.setPage(1);
    request.setLimit(10);
    request.setMode("chat");
    request.setName("myApp");
    request.setIsCreatedByMe(true);

    // 获取分页应用列表
    AppsResponseResult result = difyServer.apps(request);

    System.out.println("当前页: " + result.getPage());
    System.out.println("每页数量: " + result.getLimit());
    System.out.println("总数: " + result.getTotal());
    System.out.println("是否有更多: " + result.getHasMore());
    System.out.println("数据大小: " + result.getData().size());
}

1.3 根据ID获取应用

方法

AppsResponseVO app(String appId);

请求参数

参数名类型是否必须描述
appIdString是应用 ID

响应参数

与上面定义的 AppsResponseVO 结构相同。

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetApp() {
    AppsResponseVO app = difyServer.app("app-123456789");
}

1.4 获取应用API密钥

方法

List<ApiKeyResponseVO> getAppApiKey(String id);

请求参数

参数名类型是否必须描述
idString是应用 ID

响应参数

ApiKeyResponseVO

参数名类型描述
idStringAPI 密钥 ID
tokenStringAPI 密钥令牌值

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetAppApiKeys() {
    List<ApiKeyResponseVO> apiKeys = difyServer.getAppApiKey("app-123456789");
}

1.5 初始化应用API密钥

方法

List<ApiKeyResponseVO> initAppApiKey(String id);

请求参数

参数名类型是否必须描述
idString是应用 ID

响应参数

与上面定义的 ApiKeyResponseVO 结构相同。

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testInitAppApiKey() {
    List<ApiKeyResponseVO> apiKeys = difyServer.initAppApiKey("app-123456789");
}

1.6 删除应用API密钥

方法

void deleteAppApiKey(String appId, String apiKeyId);

请求参数

参数名类型是否必须描述
appIdString是应用 ID
apiKeyIdString是API密钥ID

响应参数

该方法不返回值,成功时返回204 No Content。

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testDeleteAppApiKey() {
    // 删除指定应用的API密钥
    difyServer.deleteAppApiKey("app-123456789", "key-789012345");
}

2. 知识库管理

2.1 获取知识库API密钥

方法

List<DatasetApiKeyResponseVO> getDatasetApiKey();

响应参数

DatasetApiKeyResponseVO

参数名类型描述
idStringAPI 密钥 ID
typeStringAPI 密钥类型
tokenStringAPI 密钥令牌值
lastUsedAtLong上次使用时间(时间戳)
createdAtLong创建时间(时间戳)

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetDatasetApiKeys() {
    List<DatasetApiKeyResponseVO> datasetApiKeys = difyServer.getDatasetApiKey();
}

2.2 初始化知识库API密钥

方法

List<DatasetApiKeyResponseVO> initDatasetApiKey();

响应参数

与上面定义的 DatasetApiKeyResponseVO 结构相同。

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testInitDatasetApiKey() {
    List<DatasetApiKeyResponseVO> datasetApiKeys = difyServer.initDatasetApiKey();
}

2.3 删除知识库API密钥

方法

void deleteDatasetApiKey(String apiKeyId);

请求参数

参数名类型是否必须描述
apiKeyIdString是API密钥ID

响应参数

该方法不返回值,成功时返回204 No Content。

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testDeleteDatasetApiKey() {
    // 删除指定的知识库API密钥
    difyServer.deleteDatasetApiKey("89f04b59-6906-4d32-a630-d2911d3b5fd8");
}

3. 聊天会话管理

3.1 获取应用的聊天会话列表

方法

DifyPageResult<ChatConversationResponse> chatConversations(ChatConversationsRequest request);

请求参数

ChatConversationsRequest

参数名类型是否必须描述
appIdString是应用ID
pageInteger否页码(默认:1)
limitInteger否每页数量(默认:10,范围:1-100)
startString否开始时间,格式:yyyy-MM-dd HH:mm
endString否结束时间,格式:yyyy-MM-dd HH:mm
sortByString否排序字段,例如:-created_at(按创建时间倒序)
annotationStatusString否注释状态:all、not_annotated、annotated

响应参数

DifyPageResult<ChatConversationResponse>

参数名类型描述
dataList<ChatConversationResponse>当前页数据列表
hasMoreBoolean是否有更多页
limitInteger每页数量
pageInteger当前页码
totalInteger总数据数量

ChatConversationResponse

参数名类型描述
idString会话ID
statusString会话状态
fromSourceString来源
fromEndUserIdString终端用户ID
fromEndUserSessionIdString终端用户会话ID
fromAccountIdString账户ID
fromAccountNameString账户名称
nameString会话名称
summaryString会话摘要
readAtLong阅读时间戳
createdAtLong创建时间戳
updatedAtLong更新时间戳
annotatedBoolean是否已标注
modelConfigMap<String, Object>模型配置
messageCountInteger消息数量
userFeedbackStatsFeedbackStats用户反馈统计
adminFeedbackStatsFeedbackStats管理员反馈统计
statusCountStatusCount状态计数

FeedbackStats

参数名类型描述
likeInteger点赞数
dislikeInteger点踩数

StatusCount

参数名类型描述
successInteger成功数量
failedInteger失败数量
partialSuccessInteger部分成功数量

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetChatConversations() {
    // 创建请求对象
    ChatConversationsRequest request = new ChatConversationsRequest();
    request.setAppId("app-123456789");
    request.setPage(1);
    request.setLimit(10);
    request.setStart("2025-10-23 00:00");
    request.setEnd("2025-10-30 23:59");
    request.setAnnotationStatus("all");
    request.setSortBy("-created_at");

    // 获取聊天会话列表
    DifyPageResult<ChatConversationResponse> result = difyServer.chatConversations(request);

    System.out.println("当前页: " + result.getPage());
    System.out.println("每页数量: " + result.getLimit());
    System.out.println("总数: " + result.getTotal());
    System.out.println("是否有更多: " + result.getHasMore());
    System.out.println("数据大小: " + result.getData().size());

    for (ChatConversationResponse conversation : result.getData()) {
        System.out.println("会话ID: " + conversation.getId());
        System.out.println("会话名称: " + conversation.getName());
        System.out.println("是否标注: " + conversation.isAnnotated());
    }
}

4. 应用统计

4.1 获取应用的每日对话统计

方法

List<DailyConversationsResponse> dailyConversations(String appId, LocalDateTime start, LocalDateTime end);

请求参数

参数名类型是否必须描述
appIdString是应用 ID
startLocalDateTime是开始时间,格式:yyyy-MM-dd HH:mm
endLocalDateTime是结束时间,格式:yyyy-MM-dd HH:mm

响应参数

DailyConversationsResponse

参数名类型描述
dateString日期,格式:yyyy-MM-dd
conversationCountInteger当日对话数量

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetDailyConversations() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // 获取每日对话统计
    List<DailyConversationsResponse> dailyStats = difyServer.dailyConversations(appId, start, end);

    if (dailyStats != null) {
        for (DailyConversationsResponse dailyStat : dailyStats) {
            System.out.println("日期: " + dailyStat.getDate());
            System.out.println("对话数量: " + dailyStat.getConversationCount());
        }
    }
}

4.2 获取应用的每日终端用户统计

方法

List<DailyEndUsersResponse> dailyEndUsers(String appId, LocalDateTime start, LocalDateTime end);

请求参数

参数名类型是否必须描述
appIdString是应用 ID
startLocalDateTime是开始时间,格式:yyyy-MM-dd HH:mm
endLocalDateTime是结束时间,格式:yyyy-MM-dd HH:mm

响应参数

DailyEndUsersResponse

参数名类型描述
dateString日期,格式:yyyy-MM-dd
terminalCountInteger当日终端用户数量

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetDailyEndUsers() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // 获取每日终端用户统计
    List<DailyEndUsersResponse> dailyEndUsersStats = difyServer.dailyEndUsers(appId, start, end);

    if (dailyEndUsersStats != null) {
        for (DailyEndUsersResponse dailyStat : dailyEndUsersStats) {
            System.out.println("日期: " + dailyStat.getDate());
            System.out.println("终端用户数量: " + dailyStat.getTerminalCount());
        }
    }
}

4.3 获取应用的平均会话交互统计

方法

List<AverageSessionInteractionsResponse> averageSessionInteractions(String appId, LocalDateTime start, LocalDateTime end);

请求参数

参数名类型是否必须描述
appIdString是应用 ID
startLocalDateTime是开始时间,格式:yyyy-MM-dd HH:mm
endLocalDateTime是结束时间,格式:yyyy-MM-dd HH:mm

响应参数

AverageSessionInteractionsResponse

参数名类型描述
dateString日期,格式:yyyy-MM-dd
interactionsDouble当日平均会话交互数

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetAverageSessionInteractions() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // 获取平均会话交互统计
    List<AverageSessionInteractionsResponse> averageSessionInteractionsStats = difyServer.averageSessionInteractions(appId, start, end);

    if (averageSessionInteractionsStats != null) {
        for (AverageSessionInteractionsResponse dailyStat : averageSessionInteractionsStats) {
            System.out.println("日期: " + dailyStat.getDate());
            System.out.println("平均会话交互数: " + dailyStat.getInteractions());
        }
    }
}

4.4 获取应用的每秒令牌统计

方法

List<TokensPerSecondResponse> tokensPerSecond(String appId, LocalDateTime start, LocalDateTime end);

请求参数

参数名类型是否必须描述
appIdString是应用 ID
startLocalDateTime是开始时间,格式:yyyy-MM-dd HH:mm
endLocalDateTime是结束时间,格式:yyyy-MM-dd HH:mm

响应参数

TokensPerSecondResponse

参数名类型描述
dateString日期,格式:yyyy-MM-dd
tpsDouble当日每秒令牌数

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetTokensPerSecond() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // 获取每秒令牌统计
    List<TokensPerSecondResponse> tokensPerSecondStats = difyServer.tokensPerSecond(appId, start, end);

    if (tokensPerSecondStats != null) {
        for (TokensPerSecondResponse dailyStat : tokensPerSecondStats) {
            System.out.println("日期: " + dailyStat.getDate());
            System.out.println("每秒令牌数: " + dailyStat.getTps());
        }
    }
}

4.5 获取应用的用户满意度率统计

方法

List<UserSatisfactionRateResponse> userSatisfactionRate(String appId, LocalDateTime start, LocalDateTime end);

请求参数

参数名类型是否必须描述
appIdString是应用 ID
startLocalDateTime是开始时间,格式:yyyy-MM-dd HH:mm
endLocalDateTime是结束时间,格式:yyyy-MM-dd HH:mm

响应参数

UserSatisfactionRateResponse

参数名类型描述
dateString日期,格式:yyyy-MM-dd
rateDouble当日用户满意度率

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetUserSatisfactionRate() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // 获取用户满意度率统计
    List<UserSatisfactionRateResponse> userSatisfactionRateStats = difyServer.userSatisfactionRate(appId, start, end);

    if (userSatisfactionRateStats != null) {
        for (UserSatisfactionRateResponse dailyStat : userSatisfactionRateStats) {
            System.out.println("日期: " + dailyStat.getDate());
            System.out.println("用户满意度率: " + dailyStat.getRate());
        }
    }
}

4.6 获取应用的令牌费用统计

方法

List<TokenCostsResponse> tokenCosts(String appId, LocalDateTime start, LocalDateTime end);

请求参数

参数名类型是否必须描述
appIdString是应用 ID
startLocalDateTime是开始时间,格式:yyyy-MM-dd HH:mm
endLocalDateTime是结束时间,格式:yyyy-MM-dd HH:mm

响应参数

TokenCostsResponse

参数名类型描述
dateString日期,格式:yyyy-MM-dd
token_countInteger当日令牌数量
total_priceString当日总费用
currencyString货币类型

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetTokenCosts() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // 获取令牌费用统计
    List<TokenCostsResponse> tokenCostsStats = difyServer.tokenCosts(appId, start, end);

    if (tokenCostsStats != null) {
        for (TokenCostsResponse dailyStat : tokenCostsStats) {
            System.out.println("日期: " + dailyStat.getDate());
            System.out.println("令牌数量: " + dailyStat.getTokenCount());
            System.out.println("总费用: " + dailyStat.getTotalPrice());
            System.out.println("货币类型: " + dailyStat.getCurrency());
        }
    }
}

4.7 获取应用的每日消息统计

方法

List<DailyMessagesResponse> dailyMessages(String appId, LocalDateTime start, LocalDateTime end);

请求参数

参数名类型是否必须描述
appIdString是应用 ID
startLocalDateTime是开始时间,格式:yyyy-MM-dd HH:mm
endLocalDateTime是结束时间,格式:yyyy-MM-dd HH:mm

响应参数

DailyMessagesResponse

参数名类型描述
dateString日期,格式:yyyy-MM-dd
message_countInteger当日消息数量

请求示例


@Resource
private DifyServer difyServer;

@Test
public void testGetDailyMessages() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // 获取每日消息统计
    List<DailyMessagesResponse> dailyMessagesStats = difyServer.dailyMessages(appId, start, end);

    if (dailyMessagesStats != null) {
        for (DailyMessagesResponse dailyStat : dailyMessagesStats) {
            System.out.println("日期: " + dailyStat.getDate());
            System.out.println("消息数量: " + dailyStat.getMessageCount());
        }
    }
}
在 GitHub 上编辑此页
上次更新: 2025/11/3 07:12
Prev
Dataset API