瀏覽代碼

Improvement: update api doc of workflow (#11054)

KVOJJJin 4 月之前
父節點
當前提交
8028e75fbb

+ 95 - 1
web/app/components/develop/template/template_workflow.en.mdx

@@ -54,7 +54,7 @@ Workflow applications offers non-session support and is ideal for translation, a
         User identifier, used to define the identity of the end-user for retrieval and statistics.
         Should be uniquely defined by the developer within the application.
       - `files` (array[object]) Optional
-        File list, suitable for inputting files combined with text understanding and answering questions, available only when the model supports Vision capability.
+        File list, suitable for inputting files combined with text understanding and answering questions, available only when the model supports file parsing and understanding capability.
           - `type` (string) Supported type: 
             - `document` ('TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB')
             - `image` ('JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG')
@@ -188,6 +188,19 @@ Workflow applications offers non-session support and is ideal for translation, a
     }'
     ```
 
+    </CodeGroup>
+    <CodeGroup title="File variable example">
+      ```json {{ title: 'File variable example' }}
+      {
+        "inputs": {
+          "{variable_name}": {
+            "transfer_method": "local_file",
+            "upload_file_id": "{upload_file_id}",
+            "type": "{document_type}"
+          }
+        }
+      }
+      ```
     </CodeGroup>
     ### Blocking Mode
     <CodeGroup title="Response">
@@ -223,7 +236,88 @@ Workflow applications offers non-session support and is ideal for translation, a
       data: {"event": "tts_message_end", "conversation_id": "23dd85f3-1a41-4ea0-b7a9-062734ccfaf9", "message_id": "a8bdc41c-13b2-4c18-bfd9-054b9803038c", "created_at": 1721205487, "task_id": "3bf8a0bb-e73b-4690-9e66-4e429bad8ee7", "audio": ""}
     ```
     </CodeGroup>
+    <CodeGroup title="File upload sample code">
+      ```json {{ title: 'File upload sample code' }}
+      {
+        import requests
+        import json
+
+        def upload_file(file_path, user):
+            upload_url = "https://api.dify.ai/v1/files/upload"
+            headers = {
+                "Authorization": "Bearer app-xxxxxxxx",
+            }
+            
+            try:
+                print("Upload file...")
+                with open(file_path, 'rb') as file:
+                    files = {
+                        'file': (file_path, file, 'text/plain')  # Make sure the file is uploaded with the appropriate MIME type
+                    }
+                    data = {
+                        "user": user,
+                        "type": "TXT"  # Set the file type to TXT
+                    }
+                    
+                    response = requests.post(upload_url, headers=headers, files=files, data=data)
+                    if response.status_code == 201:  # 201 means creation is successful
+                        print("File uploaded successfully")
+                        return response.json().get("id")  # Get the uploaded file ID
+                    else:
+                        print(f"File upload failed, status code: {response.status_code}")
+                        return None
+            except Exception as e:
+                print(f"Error occurred: {str(e)}")
+                return None
+
+        def run_workflow(file_id, user, response_mode="blocking"):
+            workflow_url = "https://api.dify.ai/v1/workflows/run"
+            headers = {
+                "Authorization": "Bearer app-xxxxxxxxx",
+                "Content-Type": "application/json"
+            }
 
+            data = {
+                "inputs": {
+                    "orig_mail": {
+                        "transfer_method": "local_file",
+                        "upload_file_id": file_id,
+                        "type": "document"
+                    }
+                },
+                "response_mode": response_mode,
+                "user": user
+            }
+
+            try:
+                print("Run Workflow...")
+                response = requests.post(workflow_url, headers=headers, json=data)
+                if response.status_code == 200:
+                    print("Workflow execution successful")
+                    return response.json()
+                else:
+                    print(f"Workflow execution failed, status code: {response.status_code}")
+                    return {"status": "error", "message": f"Failed to execute workflow, status code: {response.status_code}"}
+            except Exception as e:
+                print(f"Error occurred: {str(e)}")
+                return {"status": "error", "message": str(e)}
+
+        # Usage Examples
+        file_path = "{your_file_path}"
+        user = "difyuser"
+
+        # Upload files
+        file_id = upload_file(file_path, user)
+        if file_id:
+            # The file was uploaded successfully, and the workflow continues to run
+            result = run_workflow(file_id, user)
+            print(result)
+        else:
+            print("File upload failed and workflow cannot be executed")
+
+      }
+      ```
+    </CodeGroup>
   </Col>
 </Row>
 

+ 95 - 1
web/app/components/develop/template/template_workflow.ja.mdx

@@ -54,7 +54,7 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
         ユーザー識別子、エンドユーザーのアイデンティティを定義するために使用されます。
         アプリケーション内で開発者によって一意に定義される必要があります。
       - `files` (array[object]) オプション
-        ファイルリスト、テキスト理解と質問への回答を組み合わせたファイルの入力に適しており、モデルがビジョン機能をサポートしている場合にのみ利用可能です。
+        ファイルリスト、テキスト理解と質問への回答を組み合わせたファイルの入力に適しています。モデルがファイルの解析と理解機能をサポートしている場合にのみ使用できます。
           - `type` (string) サポートされているタイプ: 
             - `document` ('TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB')
             - `image` ('JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG')
@@ -188,6 +188,19 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
     }'
     ```
 
+    </CodeGroup>
+    <CodeGroup title="ファイル変数の例">
+      ```json {{ title: 'ファイル変数の例' }}
+      {
+        "inputs": {
+          "{variable_name}": {
+            "transfer_method": "local_file",
+            "upload_file_id": "{upload_file_id}",
+            "type": "{document_type}"
+          }
+        }
+      }
+      ```
     </CodeGroup>
     ### ブロッキングモード
     <CodeGroup title="応答">
@@ -223,7 +236,88 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
       data: {"event": "tts_message_end", "conversation_id": "23dd85f3-1a41-4ea0-b7a9-062734ccfaf9", "message_id": "a8bdc41c-13b2-4c18-bfd9-054b9803038c", "created_at": 1721205487, "task_id": "3bf8a0bb-e73b-4690-9e66-4e429bad8ee7", "audio": ""}
     ```
     </CodeGroup>
+    <CodeGroup title="ファイルアップロードのサンプルコード">
+      ```json {{ title: 'ファイルアップロードのサンプルコード' }}
+      {
+        import requests
+        import json
+
+        def upload_file(file_path, user):
+            upload_url = "https://api.dify.ai/v1/files/upload"
+            headers = {
+                "Authorization": "Bearer app-xxxxxxxx",
+            }
+            
+            try:
+                print("ファイルをアップロードしています...")
+                with open(file_path, 'rb') as file:
+                    files = {
+                        'file': (file_path, file, 'text/plain')  # ファイルが適切な MIME タイプでアップロードされていることを確認してください
+                    }
+                    data = {
+                        "user": user,
+                        "type": "TXT"  # ファイルタイプをTXTに設定します
+                    }
+                    
+                    response = requests.post(upload_url, headers=headers, files=files, data=data)
+                    if response.status_code == 201:  # 201 は作成が成功したことを意味します
+                        print("ファイルが正常にアップロードされました")
+                        return response.json().get("id")  # アップロードされたファイルIDを取得する
+                    else:
+                        print(f"ファイルのアップロードに失敗しました。ステータス コード: {response.status_code}")
+                        return None
+            except Exception as e:
+                print(f"エラーが発生しました: {str(e)}")
+                return None
+
+        def run_workflow(file_id, user, response_mode="blocking"):
+            workflow_url = "https://api.dify.ai/v1/workflows/run"
+            headers = {
+                "Authorization": "Bearer app-xxxxxxxxx",
+                "Content-Type": "application/json"
+            }
 
+            data = {
+                "inputs": {
+                    "orig_mail": {
+                        "transfer_method": "local_file",
+                        "upload_file_id": file_id,
+                        "type": "document"
+                    }
+                },
+                "response_mode": response_mode,
+                "user": user
+            }
+
+            try:
+                print("ワークフローを実行...")
+                response = requests.post(workflow_url, headers=headers, json=data)
+                if response.status_code == 200:
+                    print("ワークフローが正常に実行されました")
+                    return response.json()
+                else:
+                    print(f"ワークフローの実行がステータス コードで失敗しました: {response.status_code}")
+                    return {"status": "error", "message": f"Failed to execute workflow, status code: {response.status_code}"}
+            except Exception as e:
+                print(f"エラーが発生しました: {str(e)}")
+                return {"status": "error", "message": str(e)}
+
+        # 使用例
+        file_path = "{your_file_path}"
+        user = "difyuser"
+
+        # ファイルをアップロードする
+        file_id = upload_file(file_path, user)
+        if file_id:
+            # ファイルは正常にアップロードされました。ワークフローの実行を続行します
+            result = run_workflow(file_id, user)
+            print(result)
+        else:
+            print("ファイルのアップロードに失敗し、ワークフローを実行できません")
+
+      }
+      ```
+    </CodeGroup>
   </Col>
 </Row>
 

+ 96 - 4
web/app/components/develop/template/template_workflow.zh.mdx

@@ -52,7 +52,7 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等
         用户标识,用于定义终端用户的身份,方便检索、统计。
         由开发者定义规则,需保证用户标识在应用内唯一。
       - `files` (array[object]) Optional
-          文件列表,适用于传入文件结合文本理解并回答问题,仅当模型支持 Vision 能力时可用。
+          文件列表,适用于传入文件结合文本理解并回答问题,仅当模型支持该类型文件解析能力时可用。
           - `type` (string) 支持类型:
             - `document` 具体类型包含:'TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
             - `image` 具体类型包含:'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
@@ -171,8 +171,7 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等
 
   </Col>
   <Col sticky>
-     <CodeGroup title="Request" tag="POST" label="/workflows/run" targetCode={`curl -X POST '${props.appDetail.api_base_url}/workflows/run' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n    "inputs": ${JSON.stringify(props.inputs)},\n    "response_mode": "streaming",\n    "user": "abc-123"\n}'\n`}>
-
+    <CodeGroup title="Request" tag="POST" label="/workflows/run" targetCode={`curl -X POST '${props.appDetail.api_base_url}/workflows/run' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n    "inputs": ${JSON.stringify(props.inputs)},\n    "response_mode": "streaming",\n    "user": "abc-123"\n}'\n`}>
     ```bash {{ title: 'cURL' }}
     curl -X POST '${props.appDetail.api_base_url}/workflows/run' \
     --header 'Authorization: Bearer {api_key}' \
@@ -183,7 +182,19 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等
         "user": "abc-123"
     }'
     ```
-
+    </CodeGroup>
+    <CodeGroup title="File variable example">
+      ```json {{ title: 'File variable example' }}
+      {
+        "inputs": {
+          "{variable_name}": {
+            "transfer_method": "local_file",
+            "upload_file_id": "{upload_file_id}",
+            "type": "{document_type}"
+          }
+        }
+      }
+      ```
     </CodeGroup>
     ### Blocking Mode
     <CodeGroup title="Response">
@@ -219,7 +230,88 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等
       data: {"event": "tts_message_end", "conversation_id": "23dd85f3-1a41-4ea0-b7a9-062734ccfaf9", "message_id": "a8bdc41c-13b2-4c18-bfd9-054b9803038c", "created_at": 1721205487, "task_id": "3bf8a0bb-e73b-4690-9e66-4e429bad8ee7", "audio": ""}
     ```
     </CodeGroup>
+    <CodeGroup title="File upload sample code">
+      ```json {{ title: 'File upload sample code' }}
+      {
+        import requests
+        import json
+
+        def upload_file(file_path, user):
+            upload_url = "https://api.dify.ai/v1/files/upload"
+            headers = {
+                "Authorization": "Bearer app-xxxxxxxx",
+            }
+            
+            try:
+                print("上传文件中...")
+                with open(file_path, 'rb') as file:
+                    files = {
+                        'file': (file_path, file, 'text/plain')  # 确保文件以适当的MIME类型上传
+                    }
+                    data = {
+                        "user": user,
+                        "type": "TXT"  # 设置文件类型为TXT
+                    }
+                    
+                    response = requests.post(upload_url, headers=headers, files=files, data=data)
+                    if response.status_code == 201:  # 201 表示创建成功
+                        print("文件上传成功")
+                        return response.json().get("id")  # 获取上传的文件 ID
+                    else:
+                        print(f"文件上传失败,状态码: {response.status_code}")
+                        return None
+            except Exception as e:
+                print(f"发生错误: {str(e)}")
+                return None
+
+        def run_workflow(file_id, user, response_mode="blocking"):
+            workflow_url = "https://api.dify.ai/v1/workflows/run"
+            headers = {
+                "Authorization": "Bearer app-xxxxxxxxx",
+                "Content-Type": "application/json"
+            }
+
+            data = {
+                "inputs": {
+                    "orig_mail": {
+                        "transfer_method": "local_file",
+                        "upload_file_id": file_id,
+                        "type": "document"
+                    }
+                },
+                "response_mode": response_mode,
+                "user": user
+            }
 
+            try:
+                print("运行工作流...")
+                response = requests.post(workflow_url, headers=headers, json=data)
+                if response.status_code == 200:
+                    print("工作流执行成功")
+                    return response.json()
+                else:
+                    print(f"工作流执行失败,状态码: {response.status_code}")
+                    return {"status": "error", "message": f"Failed to execute workflow, status code: {response.status_code}"}
+            except Exception as e:
+                print(f"发生错误: {str(e)}")
+                return {"status": "error", "message": str(e)}
+
+        # 使用示例
+        file_path = "{your_file_path}"
+        user = "difyuser"
+
+        # 上传文件
+        file_id = upload_file(file_path, user)
+        if file_id:
+            # 文件上传成功,继续运行工作流
+            result = run_workflow(file_id, user)
+            print(result)
+        else:
+            print("文件上传失败,无法执行工作流")
+
+      }
+      ```
+    </CodeGroup>
   </Col>
 </Row>