app:
  description: 農協の営農支援業務ワークフロー（営農計画作成、圃場・生育管理、資材/在庫、農機管理、現地巡回、助成金申請支援などの一連の業務をサポートするワークフロー）
  icon: 🌾
  icon_background: '#FFEAD5'
  mode: workflow
  name: 営農支援ワークフロー
  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: code
      id: start-to-code1
      source: start
      target: code1
    - data:
        sourceType: code
        targetType: llm
      id: code1-to-llm_plan
      source: code1
      target: llm_plan
    - data:
        sourceType: llm
        targetType: if-else
      id: llm_plan-to-if1
      source: llm_plan
      target: if1
    - data:
        sourceType: if-else
        targetType: llm
      id: if1-true-to-llm_subsidy
      source: if1
      sourceHandle: 'true'
      target: llm_subsidy
    - data:
        sourceType: if-else
        targetType: llm
      id: if1-false-to-llm_ops
      source: if1
      sourceHandle: 'false'
      target: llm_ops
    - data:
        sourceType: llm
        targetType: code
      id: llm_subsidy-to-code_finalize
      source: llm_subsidy
      target: code_finalize
    - data:
        sourceType: llm
        targetType: code
      id: llm_ops-to-code_finalize
      source: llm_ops
      target: code_finalize
    - data:
        sourceType: code
        targetType: end
      id: code_finalize-to-end
      source: code_finalize
      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: 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    # ユーザー入力を正規化して前処理する\n    q = inputs.get(\"\
          query\", \"\")\n    q = str(q).strip()\n    # 連続空白を単一空白に\n    q = \" \"\
          .join(q.split())\n    # 簡易ラベリングを追加（必要なら拡張）\n    result = \"normalized: \"\
          \ + q\n    return dict(output=result)\n"
        variables:
        - value_selector:
          - start
          - query
          variable: query
        outputs:
          output:
            type: string
            children: null
      height: 90
      id: code1
      position:
        x: 380
        y: 282
      type: custom
      width: 244
    - data:
        title: 営農計画作成（AI）
        type: llm
        model:
          provider: openai
          name: gpt-5-mini
          mode: chat
          completion_params:
            temperature: 0.6
        prompt_template:
        - role: system
          text: あなたは農業協同組合の営農支援専門AIアシスタントです。営農計画作成、圃場管理、資材管理、農機管理、現地巡回、助成金申請支援などに関する助言を出力してください。出力には必ず「助成金」という語を含めるかどうかで助成金支援が必要か判断できるような指示を含めてください。出力は読みやすい日本語で。
        - role: user
          text: 'ユーザー入力: {{#start.query#}}


            前処理結果: {{#code1.output#}}


            上記を元に、1) 短いタスク要約、2) 推奨アクション（圃場/資材/農機/巡回/技術指導/助成金申請の有無を含む）を記載してください。'
        vision:
          enabled: false
        memory: null
        context:
          enabled: false
      height: 90
      id: llm_plan
      position:
        x: 680
        y: 282
      type: custom
      width: 244
    - data:
        title: 助成金判定
        type: if-else
        conditions:
        - comparison_operator: contains
          id: cond1
          value: 助成金
          variable_selector:
          - llm_plan
          - text
        logical_operator: and
      height: 90
      id: if1
      position:
        x: 980
        y: 282
      type: custom
      width: 244
    - data:
        title: 助成金申請支援（AI）
        type: llm
        model:
          provider: openai
          name: gpt-5-mini
          mode: chat
          completion_params:
            temperature: 0.5
        prompt_template:
        - role: system
          text: 'あなたは助成金・補助金申請支援に詳しい農業支援AIです。申請に必要な手順、必要書類、担当窓口、スケジュール案などをわかりやすく提示してください。


            ---


            【最終出力フォーマット (この指示が最優先)】

            最終出力は **読みやすい日本語の Markdown** で返してください。JSON

            配列・オブジェクトをそのまま出力してはいけません。

            - 見出し (## / ###) でセクションを区切る

            - リスト (- / 1.) や表 (| ... |) で構造化

            - 各項目の意図や根拠が分かるよう短い説明文を添える

            - 営業デモで顧客に直接見せられる体裁にする


            (構造化されたデータ項目を内部で扱うのは構いませんが、出力時に Markdown

            に変換してください。)'
        - role: user
          text: '入力: {{#start.query#}}


            営農計画案: {{#llm_plan.text#}}


            上記をもとに、助成金申請の支援手順とチェックリストを作成してください。'
        vision:
          enabled: false
        memory: null
        context:
          enabled: false
      height: 90
      id: llm_subsidy
      position:
        x: 1280
        y: 282
      type: custom
      width: 244
    - data:
        title: 現場運用支援（AI）
        type: llm
        model:
          provider: openai
          name: gpt-5-mini
          mode: chat
          completion_params:
            temperature: 0.6
        prompt_template:
        - role: system
          text: 'あなたは営農現場の運用支援に詳しいAIです。圃場管理、資材供給、農機貸出と整備、現地巡回や技術指導に関する実行可能なアクションプランを作成してください。


            ---


            【最終出力フォーマット (この指示が最優先)】

            最終出力は **読みやすい日本語の Markdown** で返してください。JSON

            配列・オブジェクトをそのまま出力してはいけません。

            - 見出し (## / ###) でセクションを区切る

            - リスト (- / 1.) や表 (| ... |) で構造化

            - 各項目の意図や根拠が分かるよう短い説明文を添える

            - 営業デモで顧客に直接見せられる体裁にする


            (構造化されたデータ項目を内部で扱うのは構いませんが、出力時に Markdown

            に変換してください。)'
        - role: user
          text: '入力: {{#start.query#}}


            営農計画案: {{#llm_plan.text#}}


            上記をもとに、日程、担当、優先度、在庫や農機管理の注意点を含む実行プランを提示してください（助成金申請は不要な前提）。'
        vision:
          enabled: false
        memory: null
        context:
          enabled: false
      height: 90
      id: llm_ops
      position:
        x: 1580
        y: 282
      type: custom
      width: 244
    - data:
        title: 最終整形（マージ）
        type: code
        code_language: python3
        code: "def main(**kwargs) -> dict:\n    candidates = ['llm_text_0', 'llm_text_1']\n\
          \    text = ''\n    for name in candidates:\n        v = kwargs.get(name)\n\
          \        if v:\n            text = str(v)\n            break\n    return\
          \ {\n        'output': text,\n    }\n"
        variables:
        - value_selector:
          - llm_subsidy
          - text
          variable: llm_text_0
        - value_selector:
          - llm_ops
          - text
          variable: llm_text_1
        outputs:
          output:
            type: string
            children: null
      height: 90
      id: code_finalize
      position:
        x: 1880
        y: 282
      type: custom
      width: 244
    - data:
        title: 終了
        type: end
        outputs:
        - value_selector:
          - code_finalize
          - output
          variable: result
      height: 90
      id: end
      position:
        x: 2180
        y: 282
      type: custom
      width: 244
  hash: null
