{"id":28641044,"url":"https://github.com/imfangs/dify-java-client","last_synced_at":"2025-06-12T20:36:48.680Z","repository":{"id":282365851,"uuid":"948346665","full_name":"imfangs/dify-java-client","owner":"imfangs","description":"Dify Java Client 是一个用于与 Dify 平台进行交互的 Java 客户端库。它提供了对 Dify 应用 API 和知识库 API 的完整支持，让 Java 开发者能够轻松地将 Dify 的生成式 AI 能力集成到自己的应用中。","archived":false,"fork":false,"pushed_at":"2025-06-03T01:48:59.000Z","size":228,"stargazers_count":253,"open_issues_count":0,"forks_count":67,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-06-03T17:12:21.319Z","etag":null,"topics":["client","dify","java","sdk"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imfangs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-14T07:06:02.000Z","updated_at":"2025-06-03T09:10:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"225a5084-a700-49da-a185-acf74bb7fcc1","html_url":"https://github.com/imfangs/dify-java-client","commit_stats":null,"previous_names":["imfangs/dify-java-client"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/imfangs/dify-java-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imfangs%2Fdify-java-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imfangs%2Fdify-java-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imfangs%2Fdify-java-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imfangs%2Fdify-java-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imfangs","download_url":"https://codeload.github.com/imfangs/dify-java-client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imfangs%2Fdify-java-client/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259522820,"owners_count":22870561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client","dify","java","sdk"],"created_at":"2025-06-12T20:36:48.014Z","updated_at":"2025-06-12T20:36:48.669Z","avatar_url":"https://github.com/imfangs.png","language":"Java","readme":"# Dify Java Client\n\n[![Maven Central](https://img.shields.io/maven-central/v/io.github.imfangs/dify-java-client.svg)](https://search.maven.org/search?q=g:io.github.imfangs%20AND%20a:dify-java-client)\n[![License](https://img.shields.io/github/license/imfangs/dify-java-client)](https://github.com/imfangs/dify-java-client/blob/main/LICENSE)\n[![Java](https://img.shields.io/badge/Java-8%2B-blue)](https://www.java.com)\n\n[English](README_EN.md) | 简体中文 | [日本語](README_JP.md)\n\nDify Java Client 是一个用于与 [Dify](https://dify.ai) 平台进行交互的 Java 客户端库。它提供了对 Dify 应用 API 和知识库 API 的完整支持，让 Java 开发者能够轻松地将 Dify 的生成式 AI 能力集成到自己的应用中。\n\n## 功能特性\n\nDify Java Client 提供以下核心功能：\n\n### 1. 多种应用类型支持\n\n- **对话型应用 (Chat)**: 通过 `DifyChatClient` 调用对话型应用，支持会话管理、消息反馈等功能\n- **文本生成应用 (Completion)**: 通过 `DifyCompletionClient` 调用文本生成型应用\n- **工作流编排对话 (Chatflow)**: 通过 `DifyChatflowClient` 调用工作流编排对话型应用\n- **工作流应用 (Workflow)**: 通过 `DifyWorkflowClient` 调用工作流应用\n- **知识库管理 (Datasets)**: 通过 `DifyDatasetsClient` 管理知识库、文档和检索\n\n### 2. 丰富的交互模式\n\n- **阻塞模式**: 同步调用API，等待完整响应\n- **流式模式**: 通过回调接收实时生成的内容，支持打字机效果\n- **文件处理**: 支持文件上传、语音转文字、文字转语音等多媒体功能\n\n### 3. 完整的会话管理\n\n- 创建和管理会话\n- 获取历史消息\n- 会话重命名\n- 消息反馈（点赞/点踩）\n- 获取建议问题\n\n### 4. 知识库全流程支持\n\n- 创建和管理知识库\n- 上传和管理文档\n- 文档分段管理\n- 语义检索\n\n### 5. 灵活的配置选项\n\n- 自定义连接超时\n- 自定义读写超时\n- 自定义HTTP客户端\n\n## 安装\n\n### 系统要求\n\n- Java 8 或更高版本\n- Maven 3.x 或 Gradle 4.x 以上\n\n### Maven\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.imfangs\u003c/groupId\u003e\n    \u003cartifactId\u003edify-java-client\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Gradle\n\n```groovy\nimplementation 'io.github.imfangs:dify-java-client:1.1.0'\n```\n\n## 快速开始\n\n### 创建客户端\n\n```java\n// 创建完整的 Dify 客户端\nDifyClient client = DifyClientFactory.createClient(\"https://api.dify.ai/v1\", \"your-api-key\");\n\n// 创建特定类型的客户端\nDifyChatClient chatClient = DifyClientFactory.createChatClient(\"https://api.dify.ai/v1\", \"your-api-key\");\nDifyCompletionClient completionClient = DifyClientFactory.createCompletionClient(\"https://api.dify.ai/v1\", \"your-api-key\");\nDifyChatflowClient chatflowClient = DifyClientFactory.createChatWorkflowClient(\"https://api.dify.ai/v1\", \"your-api-key\");\nDifyWorkflowClient workflowClient = DifyClientFactory.createWorkflowClient(\"https://api.dify.ai/v1\", \"your-api-key\");\nDifyDatasetsClient datasetsClient = DifyClientFactory.createDatasetsClient(\"https://api.dify.ai/v1\", \"your-api-key\");\n\n// 使用自定义配置创建客户端\nDifyConfig config = DifyConfig.builder()\n    .baseUrl(\"https://api.dify.ai/v1\")\n    .apiKey(\"your-api-key\")\n    .connectTimeout(5000)\n    .readTimeout(60000)\n    .writeTimeout(30000)\n    .build();\n\nDifyClient clientWithConfig = DifyClientFactory.createClient(config);\n```\n\n## 使用示例\n\n### 1. 对话型应用 (Chat)\n\n#### 阻塞模式\n\n```java\n// 创建聊天客户端\nDifyChatClient chatClient = DifyClientFactory.createChatClient(\"https://api.dify.ai/v1\", \"your-api-key\");\n\n// 创建聊天消息\nChatMessage message = ChatMessage.builder()\n    .query(\"你好，请介绍一下自己\")\n    .user(\"user-123\")\n    .responseMode(ResponseMode.BLOCKING)\n    .build();\n\n// 发送消息并获取响应\nChatMessageResponse response = chatClient.sendChatMessage(message);\nSystem.out.println(\"回复: \" + response.getAnswer());\nSystem.out.println(\"会话ID: \" + response.getConversationId());\nSystem.out.println(\"消息ID: \" + response.getMessageId());\n```\n\n#### 流式模式\n\n```java\n// 创建聊天消息\nChatMessage message = ChatMessage.builder()\n    .query(\"请给我讲一个简短的故事\")\n    .user(\"user-123\")\n    .responseMode(ResponseMode.STREAMING)\n    .build();\n\n// 发送流式消息\nchatClient.sendChatMessageStream(message, new ChatStreamCallback() {\n    @Override\n    public void onMessage(MessageEvent event) {\n        System.out.println(\"收到消息片段: \" + event.getAnswer());\n    }\n\n    @Override\n    public void onMessageEnd(MessageEndEvent event) {\n        System.out.println(\"消息结束，完整消息ID: \" + event.getMessageId());\n    }\n\n    @Override\n    public void onError(ErrorEvent event) {\n        System.err.println(\"错误: \" + event.getMessage());\n    }\n\n    @Override\n    public void onException(Throwable throwable) {\n        System.err.println(\"异常: \" + throwable.getMessage());\n    }\n});\n```\n\n#### 会话管理\n\n```java\n// 获取会话历史消息\nMessageListResponse messages = chatClient.getMessages(conversationId, \"user-123\", null, 10);\n\n// 获取会话列表\nConversationListResponse conversations = chatClient.getConversations(\"user-123\", null, 10, \"-updated_at\");\n\n// 重命名会话\nConversation renamedConversation = chatClient.renameConversation(conversationId, \"新会话名称\", false, \"user-123\");\n\n// 删除会话\nSimpleResponse deleteResponse = chatClient.deleteConversation(conversationId, \"user-123\");\n```\n\n#### 消息反馈\n\n```java\n// 发送消息反馈（点赞）\nSimpleResponse feedbackResponse = chatClient.feedbackMessage(messageId, \"like\", \"user-123\", \"这是一个很好的回答\");\n\n// 获取建议问题\nSuggestedQuestionsResponse suggestedQuestions = chatClient.getSuggestedQuestions(messageId, \"user-123\");\n```\n\n#### 语音转换\n\n```java\n// 语音转文字\nAudioToTextResponse textResponse = chatClient.audioToText(audioFile, \"user-123\");\nSystem.out.println(\"转换后的文本: \" + textResponse.getText());\n\n// 文字转语音\nbyte[] audioData = chatClient.textToAudio(null, \"这是一段测试文本\", \"user-123\");\n```\n\n### 2. 文本生成应用 (Completion)\n\n#### 阻塞模式\n\n```java\n// 创建文本生成客户端\nDifyCompletionClient completionClient = DifyClientFactory.createCompletionClient(\"https://api.dify.ai/v1\", \"your-api-key\");\n\n// 创建请求\nMap\u003cString, Object\u003e inputs = new HashMap\u003c\u003e();\ninputs.put(\"content\", \"茄子\");\n\nCompletionRequest request = CompletionRequest.builder()\n    .inputs(inputs)\n    .responseMode(ResponseMode.BLOCKING)\n    .user(\"user-123\")\n    .build();\n\n// 发送请求并获取响应\nCompletionResponse response = completionClient.sendCompletionMessage(request);\nSystem.out.println(\"生成的文本: \" + response.getAnswer());\n```\n\n#### 流式模式\n\n```java\n// 创建请求\nMap\u003cString, Object\u003e inputs = new HashMap\u003c\u003e();\ninputs.put(\"content\", \"茄子\");\n\nCompletionRequest request = CompletionRequest.builder()\n    .inputs(inputs)\n    .responseMode(ResponseMode.STREAMING)\n    .user(\"user-123\")\n    .build();\n\n// 发送流式请求\ncompletionClient.sendCompletionMessageStream(request, new CompletionStreamCallback() {\n    @Override\n    public void onMessage(MessageEvent event) {\n        System.out.println(\"收到消息片段: \" + event.getAnswer());\n    }\n\n    @Override\n    public void onMessageEnd(MessageEndEvent event) {\n        System.out.println(\"消息结束，完整消息ID: \" + event.getMessageId());\n    }\n\n    @Override\n    public void onError(ErrorEvent event) {\n        System.err.println(\"错误: \" + event.getMessage());\n    }\n\n    @Override\n    public void onException(Throwable throwable) {\n        System.err.println(\"异常: \" + throwable.getMessage());\n    }\n});\n```\n\n#### 停止生成\n\n```java\n// 停止文本生成\nSimpleResponse stopResponse = completionClient.stopCompletion(taskId, \"user-123\");\n```\n\n### 3. 工作流应用 (Workflow)\n\n#### 阻塞模式\n\n```java\n// 创建工作流客户端\nDifyWorkflowClient workflowClient = DifyClientFactory.createWorkflowClient(\"https://api.dify.ai/v1\", \"your-api-key\");\n\n// 创建工作流请求\nMap\u003cString, Object\u003e inputs = new HashMap\u003c\u003e();\ninputs.put(\"content\", \"请介绍一下人工智能的应用场景\");\n\nWorkflowRunRequest request = WorkflowRunRequest.builder()\n    .inputs(inputs)\n    .responseMode(ResponseMode.BLOCKING)\n    .user(\"user-123\")\n    .build();\n\n// 执行工作流并获取响应\nWorkflowRunResponse response = workflowClient.runWorkflow(request);\nSystem.out.println(\"工作流执行ID: \" + response.getTaskId());\n\n// 输出结果\nif (response.getData() != null) {\n    for (Map.Entry\u003cString, Object\u003e entry : response.getData().getOutputs().entrySet()) {\n        System.out.println(entry.getKey() + \": \" + entry.getValue());\n    }\n}\n```\n\n#### 流式模式\n\n```java\n// 创建工作流请求\nMap\u003cString, Object\u003e inputs = new HashMap\u003c\u003e();\ninputs.put(\"content\", \"请详细介绍一下机器学习的基本原理\");\n\nWorkflowRunRequest request = WorkflowRunRequest.builder()\n    .inputs(inputs)\n    .responseMode(ResponseMode.STREAMING)\n    .user(\"user-123\")\n    .build();\n\n// 执行工作流流式请求\nworkflowClient.runWorkflowStream(request, new WorkflowStreamCallback() {\n    @Override\n    public void onWorkflowStarted(WorkflowStartedEvent event) {\n        System.out.println(\"工作流开始: \" + event);\n    }\n\n    @Override\n    public void onNodeStarted(NodeStartedEvent event) {\n        System.out.println(\"节点开始: \" + event);\n    }\n\n    @Override\n    public void onNodeFinished(NodeFinishedEvent event) {\n        System.out.println(\"节点完成: \" + event);\n    }\n\n    @Override\n    public void onWorkflowFinished(WorkflowFinishedEvent event) {\n        System.out.println(\"工作流完成: \" + event);\n    }\n\n    @Override\n    public void onError(ErrorEvent event) {\n        System.err.println(\"错误: \" + event.getMessage());\n    }\n\n    @Override\n    public void onException(Throwable throwable) {\n        System.err.println(\"异常: \" + throwable.getMessage());\n    }\n});\n```\n\n#### 工作流管理\n\n```java\n// 停止工作流\nWorkflowStopResponse stopResponse = workflowClient.stopWorkflow(taskId, \"user-123\");\n\n// 获取工作流执行情况\nWorkflowRunStatusResponse statusResponse = workflowClient.getWorkflowRun(workflowRunId);\n\n// 获取工作流日志\nWorkflowLogsResponse logsResponse = workflowClient.getWorkflowLogs(null, null, 1, 10);\n```\n\n### 4. 知识库管理 (Datasets)\n\n#### 创建和管理知识库\n\n```java\n// 创建知识库客户端\nDifyDatasetsClient datasetsClient = DifyClientFactory.createDatasetsClient(\"https://api.dify.ai/v1\", \"your-api-key\");\n\n// 创建知识库\nCreateDatasetRequest createRequest = CreateDatasetRequest.builder()\n    .name(\"测试知识库-\" + System.currentTimeMillis())\n    .description(\"这是一个测试知识库\")\n    .indexingTechnique(\"high_quality\")\n    .permission(\"only_me\")\n    .provider(\"vendor\")\n    .build();\n\nDatasetResponse dataset = datasetsClient.createDataset(createRequest);\nSystem.out.println(\"创建的知识库ID: \" + dataset.getId());\n\n// 获取知识库列表\nDatasetListResponse datasetList = datasetsClient.getDatasets(1, 10);\nSystem.out.println(\"知识库总数: \" + datasetList.getTotal());\n```\n\n#### 文档管理\n\n```java\n// 通过文本创建文档\nCreateDocumentByTextRequest docRequest = CreateDocumentByTextRequest.builder()\n    .name(\"测试文档-\" + System.currentTimeMillis())\n    .text(\"这是一个测试文档的内容。\\n这是第二行内容。\\n这是第三行内容。\")\n    .indexingTechnique(\"high_quality\")\n    .build();\n\nDocumentResponse docResponse = datasetsClient.createDocumentByText(datasetId, docRequest);\nSystem.out.println(\"创建的文档ID: \" + docResponse.getDocument().getId());\n\n// 获取文档列表\nDocumentListResponse docList = datasetsClient.getDocuments(datasetId, null, 1, 10);\nSystem.out.println(\"文档总数: \" + docList.getTotal());\n\n// 删除文档\nSimpleResponse deleteResponse = datasetsClient.deleteDocument(datasetId, documentId);\n```\n\n#### 知识库检索\n\n```java\n// 创建检索请求\nRetrievalModel retrievalModel = new RetrievalModel();\nretrievalModel.setTopK(3);\nretrievalModel.setScoreThreshold(0.5f);\n\nRetrieveRequest retrieveRequest = RetrieveRequest.builder()\n    .query(\"什么是人工智能\")\n    .retrievalModel(retrievalModel)\n    .build();\n\n// 发送检索请求\nRetrieveResponse retrieveResponse = datasetsClient.retrieveDataset(datasetId, retrieveRequest);\n\n// 处理检索结果\nSystem.out.println(\"检索查询: \" + retrieveResponse.getQuery().getContent());\nSystem.out.println(\"检索结果数量: \" + retrieveResponse.getRecords().size());\nretrieveResponse.getRecords().forEach(record -\u003e {\n    System.out.println(\"分数: \" + record.getScore());\n    System.out.println(\"内容: \" + record.getSegment().getContent());\n});\n```\n\n## API 参考\n\n### 客户端类型\n\n| 客户端类型 | 描述 | 主要功能 |\n|------------|------|----------|\n| `DifyClient` | 完整客户端 | 支持所有API功能 |\n| `DifyChatClient` | 对话型应用客户端 | 对话、会话管理、消息反馈 |\n| `DifyCompletionClient` | 文本生成型应用客户端 | 文本生成、停止生成 |\n| `DifyChatflowClient` | 工作流编排对话型应用客户端 | 工作流编排对话 |\n| `DifyWorkflowClient` | 工作流应用客户端 | 执行工作流、工作流管理 |\n| `DifyDatasetsClient` | 知识库客户端 | 知识库管理、文档管理、检索 |\n\n### 响应模式\n\n| 模式 | 枚举值 | 描述 |\n|------|--------|------|\n| 阻塞模式 | `ResponseMode.BLOCKING` | 同步调用，等待完整响应 |\n| 流式模式 | `ResponseMode.STREAMING` | 通过回调接收实时生成的内容 |\n\n### 事件类型\n\n| 事件类型 | 描述 |\n|----------|------|\n| `MessageEvent` | 消息事件，包含生成的文本片段 |\n| `MessageEndEvent` | 消息结束事件，包含完整消息ID |\n| `MessageFileEvent` | 文件消息事件，包含文件信息 |\n| `TtsMessageEvent` | 文字转语音事件 |\n| `TtsMessageEndEvent` | 文字转语音结束事件 |\n| `MessageReplaceEvent` | 消息替换事件 |\n| `AgentMessageEvent` | Agent消息事件 |\n| `AgentThoughtEvent` | Agent思考事件 |\n| `WorkflowStartedEvent` | 工作流开始事件 |\n| `NodeStartedEvent` | 节点开始事件 |\n| `NodeFinishedEvent` | 节点完成事件 |\n| `WorkflowFinishedEvent` | 工作流完成事件 |\n| `ErrorEvent` | 错误事件 |\n| `PingEvent` | 心跳事件 |\n\n## 高级配置\n\n### 自定义HTTP客户端\n\n```java\n// 创建自定义配置\nDifyConfig config = DifyConfig.builder()\n    .baseUrl(\"https://api.dify.ai/v1\")\n    .apiKey(\"your-api-key\")\n    .connectTimeout(5000)  // 连接超时（毫秒）\n    .readTimeout(60000)    // 读取超时（毫秒）\n    .writeTimeout(30000)   // 写入超时（毫秒）\n    .build();\n\n// 使用自定义配置创建客户端\nDifyClient client = DifyClientFactory.createClient(config);\n```\n\n## 更多文档\n\n- [对话型应用 API 示例](src/test/java/io/github/imfangs/dify/client/DifyChatClientTest.java)\n    - 消息发送（阻塞/流式）\n    - 会话管理\n    - 消息反馈\n    - 语音转换\n    - 建议问题\n\n- [文本生成应用 API 示例](src/test/java/io/github/imfangs/dify/client/DifyCompletionClientTest.java)\n    - 文本生成（阻塞/流式）\n    - 停止生成\n    - 文件处理\n    - 文字转语音\n\n- [工作流应用 API 示例](src/test/java/io/github/imfangs/dify/client/DifyWorkflowClientTest.java)\n    - 工作流执行（阻塞/流式）\n    - 停止工作流\n    - 工作流状态\n    - 工作流日志\n\n- [知识库 API 示例](src/test/java/io/github/imfangs/dify/client/DifyDatasetsClientTest.java)\n    - 知识库管理\n    - 文档管理\n    - 语义检索\n\n- [事件和回调示例](src/test/java/io/github/imfangs/dify/client/DifyChatflowClientTest.java)\n    - 消息事件\n    - 文件事件\n    - TTS事件\n    - 工作流事件\n    - 错误处理\n\n\n## 贡献\n\n欢迎贡献代码、报告问题或提出改进建议。请通过 GitHub Issues 或 Pull Requests 参与项目开发。\n\n## 许可证\n\n本项目采用 [Apache License 2.0](LICENSE) 许可证。\n\n## 相关链接\n\n- [Dify 官网](https://dify.ai)\n- [Dify 文档](https://docs.dify.ai)\n- [Dify GitHub](https://github.com/langgenius/dify)\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=imfangs/dify-java-client\u0026type=Date)](https://www.star-history.com/#imfangs/dify-java-client\u0026Date)\n\n","funding_links":[],"categories":["人工智能"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimfangs%2Fdify-java-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimfangs%2Fdify-java-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimfangs%2Fdify-java-client/lists"}