app:
  description: 社員からのITヘルプデスク問い合わせを受け取り、カテゴリ分類・緊急度判定・対応窓口振分・初期診断・依頼者向け一次返信ドラフトを生成するワークフロー
  icon: 🛠️
  icon_background: '#FFEAD5'
  mode: workflow
  name: ITヘルプデスク分類・優先度判定
  use_icon_as_answer_icon: false
kind: app
version: 0.6.0
workflow:
  conversation_variables: []
  environment_variables: []
  features:
    file_upload:
      image:
        enabled: false
    opening_statement: ''
    suggested_questions: []
    suggested_questions_after_answer:
      enabled: false
    text_to_speech:
      enabled: false
  graph:
    edges:
    - data:
        sourceType: start
        targetType: parameter-extractor
      id: start-to-extractor1
      source: start
      target: extractor1
    - data:
        sourceType: parameter-extractor
        targetType: code
      id: extractor1-to-formatter
      source: extractor1
      target: formatter1
    - data:
        sourceType: code
        targetType: end
      id: formatter1-to-end
      source: formatter1
      target: end
    nodes:
    - data:
        title: 開始
        type: start
        variables:
        - label: query
          max_length: 2048
          options: []
          required: true
          type: paragraph
          variable: query
      height: 90
      id: start
      position:
        x: 80
        y: 282
      type: custom
      width: 244
    - data:
        title: 情報抽出 (カテゴリ・緊急度等)
        type: parameter-extractor
        model:
          provider: openai
          name: gpt-5-mini
          mode: chat
          completion_params:
            temperature: 0.2
        query:
        - start
        - query
        parameters:
        - name: category
          type: string
          description: '分類カテゴリ（例: ソフトウェア, ハードウェア, ネットワーク, アクセス権, その他）'
          required: true
        - name: urgency
          type: string
          description: 緊急度（高, 中, 低）
          required: true
        - name: routing_team
          type: string
          description: '対応窓口（例: ヘルプデスク, ネットワーク, システム管理, セキュリティ）'
          required: true
        - name: initial_diagnosis
          type: string
          description: 初期診断・考えられる原因（簡潔）
          required: true
        - name: reply_draft
          type: string
          description: 依頼者向け一次返信ドラフト（丁寧な日本語）
          required: true
        reasoning_mode: prompt
        instruction: '以下のユーザー問い合わせテキストから、指定した項目を抽出してください。

          出力は各項目に対して「簡潔かつ現場ですぐ使える形式」で答えてください。

          1) category: 問題の最も適切なカテゴリ名（例: ソフトウェア, ハードウェア, ネットワーク, アクセス権, その他）

          2) urgency: 緊急度（高 / 中 / 低）のいずれか

          3) routing_team: 推奨される対応窓口（例: ヘルプデスク, ネットワーク, システム管理, セキュリティ）

          4) initial_diagnosis: 初期診断・考えられる原因（1〜2行）

          5) reply_draft: 依頼者へ送る一次返信（丁寧な日本語、対応方針と次のアクションを含める）

          各項目は必ず応答し、余分な説明は加えず、項目ごとに値のみを返してください。

          '
      height: 90
      id: extractor1
      position:
        x: 380
        y: 282
      type: custom
      width: 244
    - data:
        title: 出力フォーマット作成
        type: code
        code_language: python3
        code: "def _safe_str(v):\n    \"\"\"Convert any value to string safely.\"\"\
          \"\n    if v is None:\n        return \"\"\n    if isinstance(v, list):\n\
          \        return \"\\n\".join(str(i) for i in v)\n    return str(v)\n\ndef\
          \ _safe_list(v):\n    \"\"\"Ensure value is a list.\"\"\"\n    if v is None:\n\
          \        return []\n    if isinstance(v, str):\n        return [v]\n   \
          \ if isinstance(v, list):\n        return v\n    return [v]\n\ndef main(**kwargs)\
          \ -> dict:\n    inputs = kwargs\n    category = str(inputs.get(\"category\"\
          , \"\"))\n    urgency = str(inputs.get(\"urgency\", \"\"))\n    routing_team\
          \ = str(inputs.get(\"routing_team\", \"\"))\n    initial_diagnosis = str(inputs.get(\"\
          initial_diagnosis\", \"\"))\n    reply_draft = str(inputs.get(\"reply_draft\"\
          , \"\"))\n    text = \"【自動分類結果】\\n\" + \"カテゴリ: \" + category + \"\\n\" +\
          \ \"緊急度: \" + urgency + \"\\n\" + \"対応窓口: \" + routing_team + \"\\n\\n\"\
          \n    text = text + \"【初期診断】\\n\" + initial_diagnosis + \"\\n\\n\"\n   \
          \ text = text + \"【依頼者向け一次返信ドラフト】\\n\" + reply_draft + \"\\n\"\n    return\
          \ dict(final=text)\n"
        variables:
        - value_selector:
          - extractor1
          - category
          variable: category
        - value_selector:
          - extractor1
          - urgency
          variable: urgency
        - value_selector:
          - extractor1
          - routing_team
          variable: routing_team
        - value_selector:
          - extractor1
          - initial_diagnosis
          variable: initial_diagnosis
        - value_selector:
          - extractor1
          - reply_draft
          variable: reply_draft
        outputs:
          final:
            type: string
            children: null
      height: 90
      id: formatter1
      position:
        x: 680
        y: 282
      type: custom
      width: 244
    - data:
        title: 終了
        type: end
        outputs:
        - value_selector:
          - formatter1
          - final
          variable: result
      height: 90
      id: end
      position:
        x: 980
        y: 282
      type: custom
      width: 244
  hash: null
