mirror of
https://github.com/langgenius/dify-docs.git
synced 2026-03-27 13:28:32 +07:00
* fix redirect language code prefixes * rename: cn -> zh, jp -> ja * remove hardcoded ja / zh references * remove hardcoded 'english' references * renamed variable names and dict keys to language agnostic names * fix: add missing language helper methods to PRAnalyzer - Add get_language_directory() method - Initialize source_language and target_languages from config - Fixes AttributeError when generating mixed PR errors 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * test: kitchen sink workflow validation v2 This PR validates the translation workflow after config-driven refactoring: Changes: - Add new test file: test-workflow-validation.mdx - Modify existing file: introduction.mdx - Update docs.json navigation Tests: - New file translation (add workflow) - Existing file translation (update workflow) - Navigation sync across languages - Config-driven language codes (zh/ja instead of cn/jp) - Source language abstraction (no hardcoded "English") Expected workflow behavior: 1. Detect changes in en/ directory 2. Translate new file to zh and ja 3. Update modified file translations 4. Sync docs.json for all language sections 5. Commit translated files automatically 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: update workflow paths to use zh/ja instead of cn/jp Aligns workflow trigger paths with the zh/ja language directory rename. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Revert "fix: update workflow paths to use zh/ja instead of cn/jp" This reverts commit9587b7cc5d. * Revert "test: kitchen sink workflow validation v2" This reverts commit4abdd69fd2. * fix: update workflow paths in doc analyze workflow to use zh/ja instead of cn/jp * Refactor/language codes (#240) * test: kitchen sink workflow validation v2 This PR validates the translation workflow after config-driven refactoring: Changes: - Add new test file: test-workflow-validation.mdx - Modify existing file: introduction.mdx - Update docs.json navigation Tests: - New file translation (add workflow) - Existing file translation (update workflow) - Navigation sync across languages - Config-driven language codes (zh/ja instead of cn/jp) - Source language abstraction (no hardcoded "English") Expected workflow behavior: 1. Detect changes in en/ directory 2. Translate new file to zh and ja 3. Update modified file translations 4. Sync docs.json for all language sections 5. Commit translated files automatically 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: update workflow paths to use zh/ja instead of cn/jp Aligns workflow trigger paths with the zh/ja language directory rename. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Revert "fix: update workflow paths to use zh/ja instead of cn/jp" This reverts commit9587b7cc5d. * Revert "test: kitchen sink workflow validation v2" This reverts commit4abdd69fd2. * fix: update workflow paths in doc analyze workflow to use zh/ja instead of cn/jp --------- Co-authored-by: Claude <noreply@anthropic.com> * fix: update workflow files to use 'source' instead of 'english' After refactoring the PR analyzer to use 'source' for source language PRs (instead of hardcoded 'english'), the workflow files need to match. Changes: - sync_docs_analyze.yml: pr_type == 'source' (was 'english') - sync_docs_update.yml: PR_TYPE != 'source' check - Updated all comments from "English" to "source language" - Updated all pr_type values in JSON from "english" to "source" This ensures the workflows trigger correctly with the refactored config-driven language system. Related: language code refactoring (cn/jp → zh/ja) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix/workflow source language references (#245) * test: kitchen sink workflow validation v2 This PR validates the translation workflow after config-driven refactoring: Changes: - Add new test file: test-workflow-validation.mdx - Modify existing file: introduction.mdx - Update docs.json navigation Tests: - New file translation (add workflow) - Existing file translation (update workflow) - Navigation sync across languages - Config-driven language codes (zh/ja instead of cn/jp) - Source language abstraction (no hardcoded "English") Expected workflow behavior: 1. Detect changes in en/ directory 2. Translate new file to zh and ja 3. Update modified file translations 4. Sync docs.json for all language sections 5. Commit translated files automatically 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: update workflow paths to use zh/ja instead of cn/jp Aligns workflow trigger paths with the zh/ja language directory rename. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Revert "fix: update workflow paths to use zh/ja instead of cn/jp" This reverts commit9587b7cc5d. * Revert "test: kitchen sink workflow validation v2" This reverts commit4abdd69fd2. * fix: update workflow paths in doc analyze workflow to use zh/ja instead of cn/jp * fix: update workflow files to use 'source' instead of 'english' After refactoring the PR analyzer to use 'source' for source language PRs (instead of hardcoded 'english'), the workflow files need to match. Changes: - sync_docs_analyze.yml: pr_type == 'source' (was 'english') - sync_docs_update.yml: PR_TYPE != 'source' check - Updated all comments from "English" to "source language" - Updated all pr_type values in JSON from "english" to "source" This ensures the workflows trigger correctly with the refactored config-driven language system. Related: language code refactoring (cn/jp → zh/ja) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * fix * fix docs.json language codes * rename previous version docs: cn -> zh, jp -> ja * rm duplicate redirect entires --------- Co-authored-by: Claude <noreply@anthropic.com>
660 lines
40 KiB
JSON
660 lines
40 KiB
JSON
{
|
||
"openapi": "3.0.1",
|
||
"info": {
|
||
"title": "文本生成型应用 API",
|
||
"description": "文本生成应用无会话支持,适合用于翻译/文章写作/总结 AI 等等。",
|
||
"version": "1.0.0"
|
||
},
|
||
"servers": [
|
||
{
|
||
"url": "{api_base_url}",
|
||
"description": "API 的基础 URL。请将 {api_base_url} 替换为你的应用提供的实际 API 基础 URL。",
|
||
"variables": {
|
||
"api_base_url": {
|
||
"default": "https://api.dify.ai/v1",
|
||
"description": "实际的 API 基础 URL"
|
||
}
|
||
}
|
||
}
|
||
],
|
||
"security": [
|
||
{
|
||
"ApiKeyAuth": []
|
||
}
|
||
],
|
||
"paths": {
|
||
"/completion-messages": {
|
||
"post": {
|
||
"summary": "发送消息",
|
||
"description": "发送请求给文本生成型应用。",
|
||
"operationId": "createCompletionMessage",
|
||
"tags": ["文本生成"],
|
||
"requestBody": {
|
||
"description": "创建完成消息的请求体。",
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/CompletionRequest"
|
||
},
|
||
"examples": {
|
||
"streaming_example": {
|
||
"summary": "流式模式示例",
|
||
"value": {
|
||
"inputs": {"query": "你好,世界!"},
|
||
"response_mode": "streaming",
|
||
"user": "abc-123"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": {
|
||
"description": "成功响应。内容类型和结构取决于请求中的 `response_mode` 参数。\n- 若 `response_mode` 为 `blocking`,返回 `application/json` 及 `ChatCompletionResponse` 对象。\n- 若 `response_mode` 为 `streaming`,返回 `text/event-stream` 及 `ChunkChatCompletionResponse` 流式序列。",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/ChatCompletionResponse"
|
||
},
|
||
"examples": {
|
||
"blockingResponse": {
|
||
"summary": "阻塞模式响应示例",
|
||
"value": {
|
||
"id": "0b089b9a-24d9-48cc-94f8-762677276261",
|
||
"message_id": "0b089b9a-24d9-48cc-94f8-762677276261",
|
||
"mode": "chat",
|
||
"answer": "how are you?",
|
||
"metadata": {},
|
||
"created_at": 1679586667
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"text/event-stream": {
|
||
"schema": {
|
||
"type": "string",
|
||
"description": "服务器发送事件 (SSE) 流。每个事件都是以 'data: ' 开头,以 '\\n\\n' 结尾的 JSON 对象。详见 `ChunkEvent` 的可能结构。"
|
||
},
|
||
"examples": {
|
||
"streamingResponse": {
|
||
"summary": "流式模式响应示例",
|
||
"value": "data: {\"event\": \"message\", \"task_id\": \"900bbd43-dc0b-4383-a372-aa6e6c414227\", \"id\": \"663c5084-a254-4040-8ad3-51f2a3c1a77c\", \"message_id\": \"663c5084-a254-4040-8ad3-51f2a3c1a77c\", \"answer\": \"Hi\", \"created_at\": 1705398420}\n\ndata: {\"event\": \"tts_message\", \"task_id\": \"3bf8a0bb-e73b-4690-9e66-4e429bad8ee7\", \"message_id\": \"a8bdc41c-13b2-4c18-bfd9-054b9803038c\", \"audio\": \"base64encodedaudio...\", \"created_at\": 1721205487}\n\n"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"400": { "$ref": "#/components/responses/BadRequestCompletion" },
|
||
"404": { "$ref": "#/components/responses/ConversationNotFound" },
|
||
"500": { "$ref": "#/components/responses/InternalServerError" }
|
||
}
|
||
}
|
||
},
|
||
"/files/upload": {
|
||
"post": {
|
||
"summary": "上传文件",
|
||
"description": "上传文件(目前仅支持图片)并在发送消息时使用,可实现图文多模态理解。支持 png, jpg, jpeg, webp, gif 格式。上传的文件仅供当前终端用户使用。",
|
||
"operationId": "uploadFile",
|
||
"tags": ["文件管理"],
|
||
"requestBody": {
|
||
"description": "文件上传请求,需使用 `multipart/form-data`。",
|
||
"required": true,
|
||
"content": {
|
||
"multipart/form-data": {
|
||
"schema": {
|
||
"type": "object",
|
||
"required": ["file", "user"],
|
||
"properties": {
|
||
"file": {
|
||
"type": "string",
|
||
"format": "binary",
|
||
"description": "要上传的文件。支持的图片类型:png, jpg, jpeg, webp, gif。"
|
||
},
|
||
"user": {
|
||
"type": "string",
|
||
"description": "用户标识,由开发者定义规则,需保证用户标识在应用内唯一,必须和发送消息接口传入 user 保持一致。"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": {
|
||
"description": "文件上传成功。",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/FileUploadResponse"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"201": {
|
||
"description": "文件创建成功 (备选成功状态码)。",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/FileUploadResponse"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"400": { "$ref": "#/components/responses/BadRequestFile" },
|
||
"413": { "$ref": "#/components/responses/FileTooLarge" },
|
||
"415": { "$ref": "#/components/responses/UnsupportedFileTypeFile" },
|
||
"503": { "$ref": "#/components/responses/S3ErrorFile" }
|
||
}
|
||
}
|
||
},
|
||
"/completion-messages/{task_id}/stop": {
|
||
"post": {
|
||
"summary": "停止响应",
|
||
"description": "停止生成任务,仅支持流式模式。",
|
||
"operationId": "stopCompletionGeneration",
|
||
"tags": ["文本生成"],
|
||
"parameters": [
|
||
{
|
||
"name": "task_id",
|
||
"in": "path",
|
||
"required": true,
|
||
"description": "任务 ID,可在流式返回 Chunk 中获取。",
|
||
"schema": { "type": "string", "format": "uuid" }
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"type": "object",
|
||
"required": ["user"],
|
||
"properties": {
|
||
"user": {
|
||
"type": "string",
|
||
"description": "用户标识,必须和发送消息接口传入 user 保持一致。"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": { "$ref": "#/components/responses/SuccessResult" }
|
||
}
|
||
}
|
||
},
|
||
"/messages/{message_id}/feedbacks": {
|
||
"post": {
|
||
"summary": "消息反馈(点赞)",
|
||
"description": "消息终端用户反馈、点赞,方便应用开发者优化输出预期。",
|
||
"operationId": "postMessageFeedback",
|
||
"tags": ["反馈"],
|
||
"parameters": [
|
||
{
|
||
"name": "message_id",
|
||
"in": "path",
|
||
"required": true,
|
||
"description": "消息 ID。",
|
||
"schema": { "type": "string", "format": "uuid" }
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": { "$ref": "#/components/schemas/MessageFeedbackRequest" }
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": { "$ref": "#/components/responses/SuccessResult" }
|
||
}
|
||
}
|
||
},
|
||
"/app/feedbacks": {
|
||
"get": {
|
||
"summary": "获取应用反馈列表",
|
||
"description": "获取应用的反馈信息。",
|
||
"operationId": "getAppFeedbacks",
|
||
"tags": ["反馈"],
|
||
"parameters": [
|
||
{ "$ref": "#/components/parameters/PageQueryParam" },
|
||
{ "$ref": "#/components/parameters/LimitQueryParamDefault20" }
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "成功获取应用反馈列表。",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": { "$ref": "#/components/schemas/AppFeedbacksResponse" }
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/text-to-audio": {
|
||
"post": {
|
||
"summary": "文字转语音",
|
||
"description": "将文本内容转换为语音。",
|
||
"operationId": "textToAudio",
|
||
"tags": ["语音服务"],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": { "$ref": "#/components/schemas/TextToAudioRequest" }
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": {
|
||
"description": "语音文件生成成功。",
|
||
"content": {
|
||
"audio/wav": { "schema": { "type": "string", "format": "binary", "description": "生成的 WAV 格式音频文件。" } },
|
||
"audio/mp3": { "schema": { "type": "string", "format": "binary", "description": "生成的 MP3 格式音频文件。" } }
|
||
},
|
||
"headers": {
|
||
"Content-Type": { "schema": { "type": "string", "example": "audio/wav" }, "description": "响应的内容类型,通常为 `audio/wav` 或 `audio/mp3`。" }
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/info": {
|
||
"get": {
|
||
"summary": "获取应用基本信息",
|
||
"description": "用于获取此应用的基本信息。",
|
||
"operationId": "getAppInfo",
|
||
"tags": ["应用设置"],
|
||
"responses": {
|
||
"200": {
|
||
"description": "应用的基本信息。",
|
||
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/AppInfoResponse" } } }
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/parameters": {
|
||
"get": {
|
||
"summary": "获取应用参数",
|
||
"description": "用于进入页面一开始,获取功能开关、输入参数名称、类型及默认值等使用。",
|
||
"operationId": "getAppParameters",
|
||
"tags": ["应用设置"],
|
||
"responses": {
|
||
"200": {
|
||
"description": "应用的参数信息。",
|
||
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/AppParametersResponseCompletion" } } }
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/site": {
|
||
"get": {
|
||
"summary": "获取应用 WebApp 设置",
|
||
"description": "用于获取应用的 WebApp 设置。",
|
||
"operationId": "getWebAppSettings",
|
||
"tags": ["应用设置"],
|
||
"responses": {
|
||
"200": {
|
||
"description": "应用的 WebApp 设置信息。",
|
||
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebAppSettingsResponse" } } }
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"/apps/annotations": {
|
||
"get": {
|
||
"summary": "获取标注列表",
|
||
"description": "获取应用的标注列表。",
|
||
"operationId": "getAnnotationList",
|
||
"tags": ["标注管理"],
|
||
"parameters": [
|
||
{ "$ref": "#/components/parameters/PageQueryParam" },
|
||
{ "$ref": "#/components/parameters/LimitQueryParamAnnotation" }
|
||
],
|
||
"responses": {
|
||
"200": { "description": "成功获取标注列表。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AnnotationListResponse" } } } }
|
||
}
|
||
},
|
||
"post": {
|
||
"summary": "创建标注",
|
||
"description": "创建一个新的标注。",
|
||
"operationId": "createAnnotation",
|
||
"tags": ["标注管理"],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAnnotationRequest" } } }
|
||
},
|
||
"responses": {
|
||
"200": { "description": "标注创建成功。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AnnotationItem" } } } },
|
||
"201": { "description": "标注创建成功 (备选)。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AnnotationItem" } } } }
|
||
}
|
||
}
|
||
},
|
||
"/apps/annotations/{annotation_id}": {
|
||
"put": {
|
||
"summary": "更新标注",
|
||
"description": "更新一个已存在的标注。",
|
||
"operationId": "updateAnnotation",
|
||
"tags": ["标注管理"],
|
||
"parameters": [ { "$ref": "#/components/parameters/AnnotationIdPathParam" } ],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateAnnotationRequest" } } }
|
||
},
|
||
"responses": {
|
||
"200": { "description": "标注更新成功。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AnnotationItem" } } } }
|
||
}
|
||
},
|
||
"delete": {
|
||
"summary": "删除标注",
|
||
"description": "删除一个标注。",
|
||
"operationId": "deleteAnnotation",
|
||
"tags": ["标注管理"],
|
||
"parameters": [ { "$ref": "#/components/parameters/AnnotationIdPathParam" } ],
|
||
"responses": { "204": { "description": "标注删除成功,无内容返回。" } }
|
||
}
|
||
},
|
||
"/apps/annotation-reply/{action}": {
|
||
"post": {
|
||
"summary": "标注回复初始设置",
|
||
"description": "启用或禁用标注回复设置,并配置嵌入模型。此接口异步执行。嵌入模型的提供商和模型名称可通过 v1/workspaces/current/models/model-types/text-embedding 接口获取(使用 Dataset API Token 鉴权)。",
|
||
"operationId": "initialAnnotationReplySettings",
|
||
"tags": ["标注管理"],
|
||
"parameters": [ { "$ref": "#/components/parameters/AnnotationActionPathParam" } ],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/InitialAnnotationReplySettingsRequest" } } }
|
||
},
|
||
"responses": {
|
||
"200": { "description": "标注回复设置任务已启动。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AsyncJobResponse" } } } },
|
||
"202": { "description": "标注回复设置任务已接受。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AsyncJobResponse" } } } }
|
||
}
|
||
}
|
||
},
|
||
"/apps/annotation-reply/{action}/status/{job_id}": {
|
||
"get": {
|
||
"summary": "查询标注回复初始设置任务状态",
|
||
"description": "查询异步执行的标注回复初始设置任务的状态。",
|
||
"operationId": "getInitialAnnotationReplySettingsStatus",
|
||
"tags": ["标注管理"],
|
||
"parameters": [
|
||
{ "$ref": "#/components/parameters/AnnotationActionPathParam" },
|
||
{ "$ref": "#/components/parameters/JobIdPathParam" }
|
||
],
|
||
"responses": {
|
||
"200": { "description": "成功获取任务状态。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AsyncJobStatusResponse" } } } }
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"components": {
|
||
"securitySchemes": {
|
||
"ApiKeyAuth": {
|
||
"type": "http",
|
||
"scheme": "bearer",
|
||
"bearerFormat": "API_KEY",
|
||
"description": "API-Key 鉴权。所有 API 请求都应在 `Authorization` HTTP Header 中包含你的 API-Key,格式为 `Bearer {API_KEY}`。**强烈建议开发者把 API-Key 放在后端存储,而非分享或者放在客户端存储,以免 API-Key 泄露,导致财产损失。**"
|
||
}
|
||
},
|
||
"parameters": {
|
||
"PageQueryParam": { "name": "page", "in": "query", "description": "(可选)分页页码,默认:1。", "schema": { "type": "integer", "default": 1 } },
|
||
"LimitQueryParamDefault20": { "name": "limit", "in": "query", "description": "(可选)每页记录数,默认:20。", "schema": { "type": "integer", "default": 20 } },
|
||
"LimitQueryParamAnnotation": { "name": "limit", "in": "query", "description": "每页数量,默认 20,范围 1-100。", "schema": { "type": "integer", "default": 20, "minimum": 1, "maximum": 100 } },
|
||
"AnnotationIdPathParam": { "name": "annotation_id", "in": "path", "required": true, "description": "标注 ID。", "schema": { "type": "string", "format": "uuid" } },
|
||
"AnnotationActionPathParam": { "name": "action", "in": "path", "required": true, "description": "动作,只能是 'enable' 或 'disable'。", "schema": { "type": "string", "enum": ["enable", "disable"] } },
|
||
"JobIdPathParam": { "name": "job_id", "in": "path", "required": true, "description": "任务 ID,从标注回复初始设置接口返回。", "schema": { "type": "string", "format": "uuid" } }
|
||
},
|
||
"responses": {
|
||
"BadRequestCompletion": { "description": "错误的请求。可能原因:`invalid_param`(参数异常),`app_unavailable`(App 配置不可用),`provider_not_initialize`(无可用模型凭据),`provider_quota_exceeded`(额度不足),`model_currently_not_support`(模型不可用),`completion_request_error`(文本生成失败)。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } },
|
||
"BadRequestFile": { "description": "文件操作相关的错误请求。可能原因:`no_file_uploaded`,`too_many_files`,`unsupported_preview`,`unsupported_estimate`。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } },
|
||
"ConversationNotFound": { "description": "对话不存在。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } },
|
||
"FileTooLarge": { "description": "文件太大 (`file_too_large`)。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } },
|
||
"UnsupportedFileTypeFile": { "description": "不支持的文件类型 (`unsupported_file_type`)。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } },
|
||
"S3ErrorFile": { "description": "S3 存储服务错误。可能原因:`s3_connection_failed`,`s3_permission_denied`,`s3_file_too_large`。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } },
|
||
"InternalServerError": { "description": "服务内部异常。", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } },
|
||
"SuccessResult": { "description": "操作成功。", "content": { "application/json": { "schema": { "type": "object", "properties": { "result": { "type": "string", "example": "success" } } } } } }
|
||
},
|
||
"schemas": {
|
||
"CompletionRequest": {
|
||
"type": "object",
|
||
"required": ["inputs", "response_mode", "user"],
|
||
"properties": {
|
||
"inputs": {
|
||
"type": "object",
|
||
"description": "(选填)允许传入 App 定义的各变量值。inputs 参数包含了多组键值对,每组的键对应一个特定变量,值则是该变量的具体值。文本生成型应用要求至少传入一组键值对。",
|
||
"required": ["query"],
|
||
"properties": {
|
||
"query": { "type": "string", "description": "用户输入的文本内容。" }
|
||
},
|
||
"additionalProperties": true
|
||
},
|
||
"response_mode": { "type": "string", "enum": ["streaming", "blocking"], "description": "响应返回模式。`streaming`:流式模式(推荐),基于 SSE 实现打字机输出。`blocking`:阻塞模式,等待执行完毕后返回(长流程可能中断)。Cloudflare 限制为 100 秒超时。" },
|
||
"user": { "type": "string", "description": "用户标识,用于定义终端用户的身份,方便检索、统计。由开发者定义规则,需保证用户标识在应用内唯一。" },
|
||
"files": {
|
||
"type": "array",
|
||
"items": { "$ref": "#/components/schemas/InputFileObject" },
|
||
"description": "上传的文件列表(目前仅支持图片)。"
|
||
}
|
||
}
|
||
},
|
||
"InputFileObject": {
|
||
"type": "object",
|
||
"required": ["type", "transfer_method"],
|
||
"properties": {
|
||
"type": { "type": "string", "enum": ["image"], "description": "支持类型:图片 `image`。" },
|
||
"transfer_method": { "type": "string", "enum": ["remote_url", "local_file"], "description": "传递方式,remote_url 用于图片 URL / local_file 用于文件上传" },
|
||
"url": { "type": "string", "format": "url", "description": "图片地址(当传递方式为 remote_url 时)" },
|
||
"upload_file_id": { "type": "string", "description": "上传文件 ID,必须通过事先上传文件接口获得(当传递方式为 local_file 时)" }
|
||
},
|
||
"anyOf": [
|
||
{
|
||
"properties": {
|
||
"transfer_method": { "enum": ["remote_url"] },
|
||
"url": { "type": "string", "format": "url" }
|
||
},
|
||
"required": ["url"],
|
||
"not": { "required": ["upload_file_id"] }
|
||
},
|
||
{
|
||
"properties": {
|
||
"transfer_method": { "enum": ["local_file"] },
|
||
"upload_file_id": { "type": "string" }
|
||
},
|
||
"required": ["upload_file_id"],
|
||
"not": { "required": ["url"] }
|
||
}
|
||
]
|
||
},
|
||
"ChatCompletionResponse": {
|
||
"type": "object",
|
||
"description": "阻塞模式下的完整 App 结果。",
|
||
"properties": {
|
||
"message_id": { "type": "string", "format": "uuid", "description": "消息唯一 ID。" },
|
||
"mode": { "type": "string", "description": "App 模式,固定为 `chat`。", "example": "chat" },
|
||
"answer": { "type": "string", "description": "完整回复内容。" },
|
||
"metadata": { "$ref": "#/components/schemas/ResponseMetadata" },
|
||
"created_at": { "type": "integer", "format": "int64", "description": "消息创建时间戳,如:1705395332。" }
|
||
}
|
||
},
|
||
"ResponseMetadata": {
|
||
"type": "object", "description": "元数据。",
|
||
"properties": {
|
||
"usage": { "$ref": "#/components/schemas/Usage" },
|
||
"retriever_resources": { "type": "array", "items": { "$ref": "#/components/schemas/RetrieverResource" }, "description": "引用和归属分段列表。" }
|
||
}
|
||
},
|
||
"ChunkEvent": {
|
||
"type": "object",
|
||
"description": "流式响应中的事件块结构。",
|
||
"required": ["event"],
|
||
"properties": {
|
||
"event": { "type": "string", "enum": ["message", "message_end", "tts_message", "tts_message_end", "message_replace", "error", "ping"], "description": "事件类型。" }
|
||
},
|
||
"discriminator": {
|
||
"propertyName": "event",
|
||
"mapping": {
|
||
"message": "#/components/schemas/StreamEventMessage",
|
||
"message_end": "#/components/schemas/StreamEventMessageEnd",
|
||
"tts_message": "#/components/schemas/StreamEventTtsMessage",
|
||
"tts_message_end": "#/components/schemas/StreamEventTtsMessageEnd",
|
||
"message_replace": "#/components/schemas/StreamEventMessageReplace",
|
||
"error": "#/components/schemas/StreamEventError",
|
||
"ping": "#/components/schemas/StreamEventPing"
|
||
}
|
||
}
|
||
},
|
||
"StreamEventBase": {
|
||
"type": "object",
|
||
"properties": {
|
||
"task_id": { "type": "string", "format": "uuid", "description": "任务 ID,用于请求跟踪和停止响应接口。" },
|
||
"message_id": { "type": "string", "format": "uuid", "description": "消息唯一 ID。" },
|
||
"created_at": { "type": "integer", "format": "int64", "description": "创建时间戳,如:1705395332。" }
|
||
}
|
||
},
|
||
"StreamEventMessage": {
|
||
"allOf": [ { "$ref": "#/components/schemas/ChunkEvent" }, { "$ref": "#/components/schemas/StreamEventBase" },
|
||
{ "type": "object", "description": "LLM 返回文本块事件。", "required": ["answer"], "properties": { "answer": { "type": "string", "description": "LLM 返回文本块内容。" } } }
|
||
]
|
||
},
|
||
"StreamEventMessageEnd": {
|
||
"allOf": [ { "$ref": "#/components/schemas/ChunkEvent" }, { "$ref": "#/components/schemas/StreamEventBase" },
|
||
{ "type": "object", "description": "消息结束事件。", "required": ["metadata"], "properties": { "metadata": { "$ref": "#/components/schemas/ResponseMetadata" } } }
|
||
]
|
||
},
|
||
"StreamEventTtsMessage": {
|
||
"allOf": [ { "$ref": "#/components/schemas/ChunkEvent" }, { "$ref": "#/components/schemas/StreamEventBase" },
|
||
{ "type": "object", "description": "TTS 音频流事件 (Mp3格式, Base64编码)。开启自动播放时可用。", "required": ["audio"], "properties": { "audio": { "type": "string", "format": "byte", "description": "Base64 编码的音频块。" } } }
|
||
]
|
||
},
|
||
"StreamEventTtsMessageEnd": {
|
||
"allOf": [ { "$ref": "#/components/schemas/ChunkEvent" }, { "$ref": "#/components/schemas/StreamEventBase" },
|
||
{ "type": "object", "description": "TTS 音频流结束事件。", "required": ["audio"], "properties": { "audio": { "type": "string", "description": "空字符串。" } } }
|
||
]
|
||
},
|
||
"StreamEventMessageReplace": {
|
||
"allOf": [ { "$ref": "#/components/schemas/ChunkEvent" }, { "$ref": "#/components/schemas/StreamEventBase" },
|
||
{ "type": "object", "description": "消息内容替换事件(内容审查触发)。", "required": ["answer"], "properties": { "answer": { "type": "string", "description": "替换内容(直接替换所有 LLM 回复)。" } } }
|
||
]
|
||
},
|
||
"StreamEventError": {
|
||
"allOf": [ { "$ref": "#/components/schemas/ChunkEvent" }, { "$ref": "#/components/schemas/StreamEventBase" },
|
||
{ "type": "object", "description": "流式输出过程中的异常事件。", "required": ["status", "code", "message"],
|
||
"properties": { "status": { "type": "integer", "description": "HTTP 状态码。" }, "code": { "type": "string", "description": "错误码。" }, "message": { "type": "string", "description": "错误消息。" } }
|
||
}
|
||
]
|
||
},
|
||
"StreamEventPing": {
|
||
"allOf": [ { "$ref": "#/components/schemas/ChunkEvent" }, { "type": "object", "description": "每 10s 一次的 ping 事件,保持连接存活。" } ]
|
||
},
|
||
"Usage": {
|
||
"type": "object", "description": "模型用量信息。",
|
||
"properties": { "prompt_tokens": { "type": "integer" }, "prompt_unit_price": { "type": "string" }, "prompt_price_unit": { "type": "string" }, "prompt_price": { "type": "string" }, "completion_tokens": { "type": "integer" }, "completion_unit_price": { "type": "string" }, "completion_price_unit": { "type": "string" }, "completion_price": { "type": "string" }, "total_tokens": { "type": "integer" }, "total_price": { "type": "string" }, "currency": { "type": "string" }, "latency": { "type": "number", "format": "double" } }
|
||
},
|
||
"RetrieverResource": {
|
||
"type": "object", "description": "引用和归属分段信息。",
|
||
"properties": { "position": { "type": "integer" }, "dataset_id": { "type": "string", "format": "uuid" }, "dataset_name": { "type": "string" }, "document_id": { "type": "string", "format": "uuid" }, "document_name": { "type": "string" }, "segment_id": { "type": "string", "format": "uuid" }, "score": { "type": "number", "format": "float" }, "content": { "type": "string" } }
|
||
},
|
||
"FileUploadResponse": {
|
||
"type": "object", "description": "文件上传成功后的响应。",
|
||
"properties": { "id": { "type": "string", "format": "uuid", "description": "ID。" }, "name": { "type": "string", "description": "文件名。" }, "size": { "type": "integer", "description": "文件大小(byte)。" }, "extension": { "type": "string", "description": "文件后缀。" }, "mime_type": { "type": "string", "description": "文件 mime-type。" }, "created_by": { "type": "string", "format": "uuid", "description": "上传人 ID (示例中为integer,规范为uuid)。" }, "created_at": { "type": "integer", "format": "int64", "description": "上传时间。" } }
|
||
},
|
||
"MessageFeedbackRequest": {
|
||
"type": "object", "required": ["user"], "description": "消息反馈请求体。",
|
||
"properties": { "rating": { "type": "string", "enum": ["like", "dislike", null], "nullable": true, "description": "点赞 `like`, 点踩 `dislike`, 撤销 `null`。" }, "user": { "type": "string", "description": "用户标识,应用内唯一。" }, "content": { "type": "string", "nullable": true, "description": "消息反馈的具体信息。" } }
|
||
},
|
||
"AppFeedbacksResponse": {
|
||
"type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/FeedbackItem" }, "description": "应用反馈列表。" } }
|
||
},
|
||
"FeedbackItem": {
|
||
"type": "object", "description": "单个反馈条目。",
|
||
"properties": { "id": { "type": "string", "format": "uuid" }, "app_id": { "type": "string", "format": "uuid" }, "conversation_id": { "type": "string", "format": "uuid", "nullable": true }, "message_id": { "type": "string", "format": "uuid" }, "rating": { "type": "string", "enum": ["like", "dislike", null], "nullable": true }, "content": { "type": "string", "nullable": true }, "from_source": { "type": "string" }, "from_end_user_id": { "type": "string", "format": "uuid" }, "from_account_id": { "type": "string", "format": "uuid", "nullable": true }, "created_at": { "type": "string", "format": "date-time" }, "updated_at": { "type": "string", "format": "date-time" } }
|
||
},
|
||
"TextToAudioRequest": {
|
||
"type": "object", "required": ["user"], "description": "文字转语音请求体。",
|
||
"properties": { "message_id": { "type": "string", "format": "uuid", "description": "Dify 生成的消息 ID(优先使用)。" }, "text": { "type": "string", "description": "语音生成内容(若无 message_id)。" }, "user": { "type": "string", "description": "用户标识,应用内唯一。" }, "streaming": {"type": "boolean", "default": false, "description": "是否流式返回音频。"} },
|
||
"example": { "message_id": "5ad4cb98-f0c7-4085-b384-88c403be6290", "text": "你好Dify", "user": "abc-123", "streaming": false }
|
||
},
|
||
"AppInfoResponse": {
|
||
"type": "object", "description": "应用基本信息。",
|
||
"properties": { "name": { "type": "string", "description": "应用名称。" }, "description": { "type": "string", "description": "应用描述。" }, "tags": { "type": "array", "items": { "type": "string" }, "description": "应用标签。" } }
|
||
},
|
||
"AppParametersResponseCompletion": {
|
||
"type": "object", "description": "应用参数信息。",
|
||
"properties": {
|
||
"opening_statement": { "type": "string", "description": "开场白。", "example": "nice to meet you" },
|
||
"suggested_questions": { "type": "array", "items": { "type": "string" }, "description": "开场推荐问题列表。" },
|
||
"suggested_questions_after_answer": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "是否开启回答后推荐问题。" } } },
|
||
"speech_to_text": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "是否开启语音转文本。" } } },
|
||
"retriever_resource": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "是否开启引用和归属。" } } },
|
||
"annotation_reply": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "是否开启标记回复。" } } },
|
||
"user_input_form": { "type": "array", "items": { "$ref": "#/components/schemas/UserInputFormItem" }, "description": "用户输入表单配置。" },
|
||
"file_upload": { "$ref": "#/components/schemas/FileUploadSetting" },
|
||
"system_parameters": { "$ref": "#/components/schemas/SystemParameters" }
|
||
}
|
||
},
|
||
"UserInputFormItem": { "type": "object", "description": "用户输入表单中的一个控件。", "oneOf": [ { "$ref": "#/components/schemas/TextInputControlWrapper" }, { "$ref": "#/components/schemas/ParagraphControlWrapper" }, { "$ref": "#/components/schemas/SelectControlWrapper" } ] },
|
||
"TextInputControlWrapper": { "type": "object", "properties": { "text-input": { "$ref": "#/components/schemas/TextInputControl" } }, "required":["text-input"] },
|
||
"ParagraphControlWrapper": { "type": "object", "properties": { "paragraph": { "$ref": "#/components/schemas/ParagraphControl" } }, "required":["paragraph"] },
|
||
"SelectControlWrapper": { "type": "object", "properties": { "select": { "$ref": "#/components/schemas/SelectControl" } }, "required":["select"] },
|
||
"TextInputControl": { "type": "object", "description": "文本输入控件。", "required": ["label", "variable", "required"], "properties": { "label": { "type": "string", "description": "控件展示标签名。" }, "variable": { "type": "string", "description": "控件 ID。" }, "required": { "type": "boolean", "description": "是否必填。" }, "default": { "type": "string", "description": "默认值。" }, "max_length": {"type": "integer", "description": "最大长度 (来自示例)。", "nullable": true} } },
|
||
"ParagraphControl": { "type": "object", "description": "段落文本输入控件。", "required": ["label", "variable", "required"], "properties": { "label": { "type": "string", "description": "控件展示标签名。" }, "variable": { "type": "string", "description": "控件 ID。" }, "required": { "type": "boolean", "description": "是否必填。" }, "default": { "type": "string", "description": "默认值。" } } },
|
||
"SelectControl": { "type": "object", "description": "下拉控件。", "required": ["label", "variable", "required", "options"], "properties": { "label": { "type": "string", "description": "控件展示标签名。" }, "variable": { "type": "string", "description": "控件 ID。" }, "required": { "type": "boolean", "description": "是否必填。" }, "default": { "type": "string", "description": "默认值。" }, "options": { "type": "array", "items": { "type": "string" }, "description": "选项值。" } } },
|
||
"FileUploadSetting": {
|
||
"type": "object", "description": "文件上传配置。",
|
||
"properties": { "image": { "type": "object", "description": "图片设置。当前仅支持图片类型:`png`, `jpg`, `jpeg`, `webp`, `gif`。", "properties": { "enabled": { "type": "boolean", "description": "是否开启。" }, "number_limits": { "type": "integer", "description": "图片数量限制,默认 3。" }, "detail": {"type": "string", "description": "图片细节 (来自示例)。", "nullable": true}, "transfer_methods": { "type": "array", "items": { "type": "string", "enum": ["remote_url", "local_file"] }, "description": "传递方式列表,remote_url , local_file,必选一个。" } } } }
|
||
},
|
||
"SystemParameters": {
|
||
"type": "object", "description": "系统参数。",
|
||
"properties": { "file_size_limit": { "type": "integer", "description": "文档上传大小限制 (MB)。" }, "image_file_size_limit": { "type": "integer", "description": "图片文件上传大小限制(MB)。" }, "audio_file_size_limit": { "type": "integer", "description": "音频文件上传大小限制 (MB)。" }, "video_file_size_limit": { "type": "integer", "description": "视频文件上传大小限制 (MB)。" } }
|
||
},
|
||
"WebAppSettingsResponse": {
|
||
"type": "object", "description": "应用的 WebApp 设置。",
|
||
"properties": { "title": { "type": "string", "description": "WebApp 名称。" }, "chat_color_theme": { "type": "string", "description": "聊天颜色主题, hex 格式。" }, "chat_color_theme_inverted": { "type": "boolean", "description": "聊天颜色主题是否反转。" }, "icon_type": { "type": "string", "enum": ["emoji", "image"], "description": "图标类型, `emoji`-表情, `image`-图片。" }, "icon": { "type": "string", "description": "图标, emoji 或图片 URL。" }, "icon_background": { "type": "string", "description": "hex 格式的背景色。" }, "icon_url": { "type": "string", "format": "url", "nullable": true, "description": "图标 URL。" }, "description": { "type": "string", "description": "描述。" }, "copyright": { "type": "string", "description": "版权信息。" }, "privacy_policy": { "type": "string", "description": "隐私政策链接。" }, "custom_disclaimer": { "type": "string", "description": "自定义免责声明。" }, "default_language": { "type": "string", "description": "默认语言。" }, "show_workflow_steps": { "type": "boolean", "description": "是否显示工作流详情。" }, "use_icon_as_answer_icon": { "type": "boolean", "description": "是否使用 WebApp 图标替换聊天中的 机器人图标。" } }
|
||
},
|
||
"AnnotationListResponse": {
|
||
"type": "object", "description": "标注列表响应。",
|
||
"properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/AnnotationItem" } }, "has_more": { "type": "boolean" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "page": { "type": "integer" } }
|
||
},
|
||
"AnnotationItem": {
|
||
"type": "object", "description": "单个标注条目。",
|
||
"properties": { "id": { "type": "string", "format": "uuid" }, "question": { "type": "string", "description": "问题。" }, "answer": { "type": "string", "description": "答案内容。" }, "hit_count": { "type": "integer", "description": "命中次数。" }, "created_at": { "type": "integer", "format": "int64", "description": "创建时间戳。" } }
|
||
},
|
||
"CreateAnnotationRequest": {
|
||
"type": "object", "required": ["question", "answer"], "description": "创建标注请求体。",
|
||
"properties": { "question": { "type": "string", "description": "问题。" }, "answer": { "type": "string", "description": "答案内容。" } }
|
||
},
|
||
"UpdateAnnotationRequest": {
|
||
"type": "object", "required": ["question", "answer"], "description": "更新标注请求体。",
|
||
"properties": { "question": { "type": "string", "description": "问题。" }, "answer": { "type": "string", "description": "答案内容。" } }
|
||
},
|
||
"InitialAnnotationReplySettingsRequest": {
|
||
"type": "object", "required": ["score_threshold"], "description": "标注回复初始设置请求体。",
|
||
"properties": { "embedding_provider_name": { "type": "string", "nullable": true, "description": "(可选)指定的嵌入模型提供商名称。" }, "embedding_model_name": { "type": "string", "nullable": true, "description": "(可选)指定的嵌入模型名称。" }, "score_threshold": { "type": "number", "format": "float", "description": "相似度阈值。" } }
|
||
},
|
||
"AsyncJobResponse": {
|
||
"type": "object", "description": "异步任务响应。",
|
||
"properties": { "job_id": { "type": "string", "format": "uuid", "description": "任务 ID。" }, "job_status": { "type": "string", "description": "任务状态。" } }
|
||
},
|
||
"AsyncJobStatusResponse": {
|
||
"allOf": [ { "$ref": "#/components/schemas/AsyncJobResponse" }, { "type": "object", "properties": { "error_msg": { "type": "string", "nullable": true, "description": "错误信息(如果任务失败)。" } } } ]
|
||
},
|
||
"ErrorResponse": {
|
||
"type": "object", "description": "错误响应结构。",
|
||
"properties": { "status": { "type": "integer", "description": "HTTP 状态码。", "nullable": true }, "code": { "type": "string", "description": "错误码。", "nullable": true }, "message": { "type": "string", "description": "错误消息。" } }
|
||
}
|
||
}
|
||
},
|
||
"tags": [
|
||
{ "name": "文本生成", "description": "与文本生成和完成相关的操作。" },
|
||
{ "name": "文件管理", "description": "与文件上传和管理相关的操作。" },
|
||
{ "name": "反馈", "description": "与用户反馈相关的操作。" },
|
||
{ "name": "语音服务", "description": "与文本转语音相关的操作。" },
|
||
{ "name": "应用设置", "description": "获取应用基本信息和参数配置的操作。" },
|
||
{ "name": "标注管理", "description": "与标注(用于直接回复)相关的操作。" }
|
||
]
|
||
} |