微信扫码
添加专属顾问
我要投稿
轻松将Dify的AI能力集成到Java应用,支持多种应用类型和交互模式,提升开发效率。 核心内容: 1. 支持对话型、文本生成、工作流等多种Dify应用类型 2. 提供阻塞模式、流式模式等丰富的交互方式 3. 包含完整的会话管理和知识库全流程支持
Dify Java Client 是一个用于与 Dify 平台进行交互的 Java 客户端库。它提供了对 Dify 应用 API 和知识库 API 的完整支持,让 Java 开发者能够轻松地将 Dify 的生成式 AI 能力集成到自己的应用中。
Dify Java Client 提供以下核心功能:
DifyChatClient
调用对话型应用,支持会话管理、消息反馈等功能DifyCompletionClient
调用文本生成型应用DifyChatflowClient
调用工作流编排对话型应用DifyWorkflowClient
调用工作流应用DifyDatasetsClient
管理知识库、文档和检索<dependency>
<groupId>io.github.imfangs</groupId>
<artifactId>dify-java-client</artifactId>
<version>1.1.6</version>
</dependency>
implementation 'io.github.imfangs:dify-java-client:1.1.6'
// 创建完整的 Dify 客户端
DifyClientclient= DifyClientFactory.createClient("https://api.dify.ai/v1", "your-api-key");
// 创建特定类型的客户端
DifyChatClientchatClient= DifyClientFactory.createChatClient("https://api.dify.ai/v1", "your-api-key");
DifyCompletionClientcompletionClient= DifyClientFactory.createCompletionClient("https://api.dify.ai/v1", "your-api-key");
DifyChatflowClientchatflowClient= DifyClientFactory.createChatWorkflowClient("https://api.dify.ai/v1", "your-api-key");
DifyWorkflowClientworkflowClient= DifyClientFactory.createWorkflowClient("https://api.dify.ai/v1", "your-api-key");
DifyDatasetsClientdatasetsClient= DifyClientFactory.createDatasetsClient("https://api.dify.ai/v1", "your-api-key");
// 使用自定义配置创建客户端
DifyConfigconfig= DifyConfig.builder()
.baseUrl("https://api.dify.ai/v1")
.apiKey("your-api-key")
.connectTimeout(5000)
.readTimeout(60000)
.writeTimeout(30000)
.build();
DifyClientclientWithConfig= DifyClientFactory.createClient(config);
// 创建聊天客户端
DifyChatClientchatClient= DifyClientFactory.createChatClient("https://api.dify.ai/v1", "your-api-key");
// 创建聊天消息
ChatMessagemessage= ChatMessage.builder()
.query("你好,请介绍一下自己")
.user("user-123")
.responseMode(ResponseMode.BLOCKING)
.build();
// 发送消息并获取响应
ChatMessageResponseresponse= chatClient.sendChatMessage(message);
System.out.println("回复: " + response.getAnswer());
System.out.println("会话ID: " + response.getConversationId());
System.out.println("消息ID: " + response.getMessageId());
// 创建聊天消息
ChatMessagemessage= ChatMessage.builder()
.query("请给我讲一个简短的故事")
.user("user-123")
.responseMode(ResponseMode.STREAMING)
.build();
// 发送流式消息
chatClient.sendChatMessageStream(message, newChatStreamCallback() {
@Override
publicvoidonMessage(MessageEvent event) {
System.out.println("收到消息片段: " + event.getAnswer());
}
@Override
publicvoidonMessageEnd(MessageEndEvent event) {
System.out.println("消息结束,完整消息ID: " + event.getMessageId());
}
@Override
publicvoidonError(ErrorEvent event) {
System.err.println("错误: " + event.getMessage());
}
@Override
publicvoidonException(Throwable throwable) {
System.err.println("异常: " + throwable.getMessage());
}
});
// 获取会话历史消息
MessageListResponsemessages= chatClient.getMessages(conversationId, "user-123", null, 10);
// 获取会话列表
ConversationListResponseconversations= chatClient.getConversations("user-123", null, 10, "-updated_at");
// 重命名会话
ConversationrenamedConversation= chatClient.renameConversation(conversationId, "新会话名称", false, "user-123");
// 删除会话
SimpleResponsedeleteResponse= chatClient.deleteConversation(conversationId, "user-123");
// 发送消息反馈(点赞)
SimpleResponse feedbackResponse = chatClient.feedbackMessage(messageId, "like", "user-123", "这是一个很好的回答");
// 获取建议问题
SuggestedQuestionsResponse suggestedQuestions = chatClient.getSuggestedQuestions(messageId, "user-123");
// 语音转文字
AudioToTextResponse textResponse = chatClient.audioToText(audioFile, "user-123");
System.out.println("转换后的文本: " + textResponse.getText());
// 文字转语音
byte[] audioData = chatClient.textToAudio(null, "这是一段测试文本", "user-123");
// 创建文本生成客户端
DifyCompletionClientcompletionClient= DifyClientFactory.createCompletionClient("https://api.dify.ai/v1", "your-api-key");
// 创建请求
Map<String, Object> inputs = newHashMap<>();
inputs.put("content", "茄子");
CompletionRequestrequest= CompletionRequest.builder()
.inputs(inputs)
.responseMode(ResponseMode.BLOCKING)
.user("user-123")
.build();
// 发送请求并获取响应
CompletionResponseresponse= completionClient.sendCompletionMessage(request);
System.out.println("生成的文本: " + response.getAnswer());
// 创建请求
Map<String, Object> inputs = newHashMap<>();
inputs.put("content", "茄子");
CompletionRequestrequest= CompletionRequest.builder()
.inputs(inputs)
.responseMode(ResponseMode.STREAMING)
.user("user-123")
.build();
// 发送流式请求
completionClient.sendCompletionMessageStream(request, newCompletionStreamCallback() {
@Override
publicvoidonMessage(MessageEvent event) {
System.out.println("收到消息片段: " + event.getAnswer());
}
@Override
publicvoidonMessageEnd(MessageEndEvent event) {
System.out.println("消息结束,完整消息ID: " + event.getMessageId());
}
@Override
publicvoidonError(ErrorEvent event) {
System.err.println("错误: " + event.getMessage());
}
@Override
publicvoidonException(Throwable throwable) {
System.err.println("异常: " + throwable.getMessage());
}
});
// 停止文本生成
SimpleResponse stopResponse = completionClient.stopCompletion(taskId, "user-123");
// 创建工作流客户端
DifyWorkflowClientworkflowClient= DifyClientFactory.createWorkflowClient("https://api.dify.ai/v1", "your-api-key");
// 创建工作流请求
Map<String, Object> inputs = newHashMap<>();
inputs.put("content", "请介绍一下人工智能的应用场景");
WorkflowRunRequestrequest= WorkflowRunRequest.builder()
.inputs(inputs)
.responseMode(ResponseMode.BLOCKING)
.user("user-123")
.build();
// 执行工作流并获取响应
WorkflowRunResponseresponse= workflowClient.runWorkflow(request);
System.out.println("工作流执行ID: " + response.getTaskId());
// 输出结果
if (response.getData() != null) {
for (Map.Entry<String, Object> entry : response.getData().getOutputs().entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
// 创建工作流请求
Map<String, Object> inputs = newHashMap<>();
inputs.put("content", "请详细介绍一下机器学习的基本原理");
WorkflowRunRequestrequest= WorkflowRunRequest.builder()
.inputs(inputs)
.responseMode(ResponseMode.STREAMING)
.user("user-123")
.build();
// 执行工作流流式请求
workflowClient.runWorkflowStream(request, newWorkflowStreamCallback() {
@Override
publicvoidonWorkflowStarted(WorkflowStartedEvent event) {
System.out.println("工作流开始: " + event);
}
@Override
publicvoidonNodeStarted(NodeStartedEvent event) {
System.out.println("节点开始: " + event);
}
@Override
publicvoidonNodeFinished(NodeFinishedEvent event) {
System.out.println("节点完成: " + event);
}
@Override
publicvoidonWorkflowFinished(WorkflowFinishedEvent event) {
System.out.println("工作流完成: " + event);
}
@Override
publicvoidonError(ErrorEvent event) {
System.err.println("错误: " + event.getMessage());
}
@Override
publicvoidonException(Throwable throwable) {
System.err.println("异常: " + throwable.getMessage());
}
});
// 停止工作流
WorkflowStopResponse stopResponse = workflowClient.stopWorkflow(taskId, "user-123");
// 获取工作流执行情况
WorkflowRunStatusResponse statusResponse = workflowClient.getWorkflowRun(workflowRunId);
// 获取工作流日志
WorkflowLogsResponse logsResponse = workflowClient.getWorkflowLogs(null, null, 1, 10);
// 创建知识库客户端
DifyDatasetsClientdatasetsClient= DifyClientFactory.createDatasetsClient("https://api.dify.ai/v1", "your-api-key");
// 创建知识库
CreateDatasetRequestcreateRequest= CreateDatasetRequest.builder()
.name("测试知识库-" + System.currentTimeMillis())
.description("这是一个测试知识库")
.indexingTechnique("high_quality")
.permission("only_me")
.provider("vendor")
.build();
DatasetResponsedataset= datasetsClient.createDataset(createRequest);
System.out.println("创建的知识库ID: " + dataset.getId());
// 获取知识库列表
DatasetListResponsedatasetList= datasetsClient.getDatasets(1, 10);
System.out.println("知识库总数: " + datasetList.getTotal());
// 通过文本创建文档 - 使用自动处理模式(推荐)
CreateDocumentByTextRequestdocRequest= CreateDocumentByTextRequest.builder()
.name("测试文档-" + System.currentTimeMillis())
.text("这是一个测试文档的内容。\n这是第二行内容。\n这是第三行内容。")
.indexingTechnique("high_quality")
.docForm("text_model")
.docLanguage("Chinese")
.processRule(ProcessRule.builder()
.mode("automatic") // 使用自动处理模式
.build())
.build();
DocumentResponsedocResponse= datasetsClient.createDocumentByText(datasetId, docRequest);
System.out.println("创建的文档ID: " + docResponse.getDocument().getId());
// 获取文档列表
DocumentListResponsedocList= datasetsClient.getDocuments(datasetId, null, 1, 10);
System.out.println("文档总数: " + docList.getTotal());
// 删除文档
SimpleResponsedeleteResponse= datasetsClient.deleteDocument(datasetId, documentId);
// 创建检索请求
RetrievalModelretrievalModel=newRetrievalModel();
retrievalModel.setTopK(3);
retrievalModel.setScoreThreshold(0.5f);
RetrieveRequestretrieveRequest= RetrieveRequest.builder()
.query("什么是人工智能")
.retrievalModel(retrievalModel)
.build();
// 发送检索请求
RetrieveResponseretrieveResponse= datasetsClient.retrieveDataset(datasetId, retrieveRequest);
// 处理检索结果
System.out.println("检索查询: " + retrieveResponse.getQuery().getContent());
System.out.println("检索结果数量: " + retrieveResponse.getRecords().size());
retrieveResponse.getRecords().forEach(record -> {
System.out.println("分数: " + record.getScore());
System.out.println("内容: " + record.getSegment().getContent());
});
DifyClient | ||
DifyChatClient | ||
DifyCompletionClient | ||
DifyChatflowClient | ||
DifyWorkflowClient | ||
DifyDatasetsClient |
ResponseMode.BLOCKING | ||
ResponseMode.STREAMING |
MessageEvent | |
MessageEndEvent | |
MessageFileEvent | |
TtsMessageEvent | |
TtsMessageEndEvent | |
MessageReplaceEvent | |
AgentMessageEvent | |
AgentThoughtEvent | |
WorkflowStartedEvent | |
NodeStartedEvent | |
NodeFinishedEvent | |
WorkflowFinishedEvent | |
ErrorEvent | |
PingEvent |
// 创建自定义配置
DifyConfig config = DifyConfig.builder()
.baseUrl("https://api.dify.ai/v1")
.apiKey("your-api-key")
.connectTimeout(5000) // 连接超时(毫秒)
.readTimeout(60000) // 读取超时(毫秒)
.writeTimeout(30000) // 写入超时(毫秒)
.build();
// 使用自定义配置创建客户端
DifyClient client = DifyClientFactory.createClient(config);
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-08-20
深度实战:我用 Dify 复刻了 1688 的 AI 搜索,“多路召回”才是灵魂
2025-08-19
5 分钟搭建你的 AI 应用-Dify 全流程指南
2025-08-19
【万字长文】Dify 知识库全链路图解:7 个关键节点,彻底拆解 RAG 黑盒
2025-08-18
Dify功能解析四:Dify父子模式分段解决普通分段的什么问题?
2025-08-17
Dify 实战篇| 配置参数实战优化
2025-08-17
MacBook 本地化部署 Dify 指南。
2025-08-15
4000字长文:使用dify搭建SOP检索问答Agent
2025-08-14
效率与安全双飞跃!Dify v1.7.2 上线:全新升级工作流关系面板、节点搜索、API 版本指定与多项安全优化,支持一键部署
2025-06-04
2025-06-25
2025-06-03
2025-05-29
2025-06-02
2025-06-29
2025-06-05
2025-06-24
2025-06-10
2025-06-30
2025-08-18
2025-08-02
2025-07-30
2025-06-26
2025-06-17
2025-05-29
2025-05-28
2025-05-22