概要

高度な入力ツールは、Webhook、Slackイベント、画像ファイル、テキストファイルなど、さまざまなタイプのデータソースを処理するための特別な入力機能を提供します。これらのツールは、外部システムと統合する包括的なワークフローを構築するために不可欠です。

主な機能

INPUT_WEBHOOK

  • 各種サービスからのWebhookリクエストを受信
  • 公開可能URLへのHTTP POSTリクエストを処理
  • JSONとフォームデータを自動解析
  • API統合に不可欠

INPUT_SLACK_EVENT

  • Slack Appイベントサブスクリプションを受信
  • リアルタイムSlackワークスペースイベントを処理
  • メッセージ、リアクション、ユーザーインタラクションを処理
  • Slack App設定が必要

INPUT_IMAGE_FILE

  • 直接ダウンロードURLから画像ファイルを入力
  • 画像をbase64エンコード文字列に変換
  • 各種画像フォーマットをサポート
  • AI処理ワークフロー用に最適化

INPUT_FILE_AS_TEXT

  • URLからテキストファイルを入力
  • 複数のテキストフォーマット(CSV、JSON、XML、YAML、HTML)をサポート
  • ファイルアクセス用の事前署名URLを返す
  • 自動エンコーディング検出

セットアップ手順

注意: INPUT_ツールは、MCP(Model Context Protocol)とAPI統合にとって重要です。それらのIDは、MCP設定とAPIエンドポイントで正確に一致する必要があります。

例: Webhook処理ワークフロー

- id: receive_webhook
  name: receive_webhook
  tool: INPUT_WEBHOOK
  input:
    - name: description
      value: "Eコマースプラットフォームからの注文通知を受信"
    - name: use_as_input
      value: true

- id: process_order
  name: process_order
  tool: OPENAI_INVOKE
  config:
    - name: version
      value: gpt-4
  input:
    - name: prompt
      value: |
        この注文データを処理し、重要な情報を抽出してください:
        {{steps.receive_webhook.result.body}}
        
        抽出する項目: 顧客情報、注文アイテム、合計金額、配送詳細

例: Slackイベント処理

- id: slack_listener
  name: slack_listener
  tool: INPUT_SLACK_EVENT
  input:
    - name: description
      value: "Slackでのメンションイベントをリッスン"
    - name: use_as_input
      value: true

- id: respond_to_mention
  name: respond_to_mention
  tool: SLACK_POST_MESSAGE
  input:
    - name: channel
      value: "{{steps.slack_listener.result.channel}}"
    - name: text
      value: "メンションありがとうございます!リクエストを処理します。"

例: 画像分析パイプライン

- id: input_image
  name: input_image
  tool: INPUT_IMAGE_FILE
  input:
    - name: file_url
      value: "https://example.com/image.jpg"
    - name: description
      value: "分析用製品画像"

- id: analyze_image
  name: analyze_image
  tool: GEMINI_INVOKE_WITH_IMAGE
  config:
    - name: version
      value: gemini-1.5-flash
  input:
    - name: prompt
      value: "この製品画像を分析し、その特徴を説明してください"
    - name: base64_image
      value: "{{steps.input_image.result.base64_content}}"

例: テキストファイル処理

- id: input_config_file
  name: input_config_file
  tool: INPUT_FILE_AS_TEXT
  input:
    - name: value
      value: "https://example.com/config.json"
    - name: description
      value: "処理用設定ファイル"
    - name: use_as_input
      value: true

- id: parse_configuration
  name: parse_configuration
  tool: PYTHON_SANDBOX_RUN
  input:
    - name: code
      value: |
        import json
        import requests
        
        # 設定ファイルをダウンロードして解析
        file_url = "{{steps.input_config_file.result}}"
        response = requests.get(file_url)
        config = json.loads(response.text)
        
        print("設定が読み込まれました:")
        for key, value in config.items():
            print(f"  {key}: {value}")
        
        # 特定の設定を抽出
        database_url = config.get('database_url', '見つかりません')
        api_key = config.get('api_key', '見つかりません')
        
        print(f"\nデータベースURL: {database_url}")
        print(f"APIキー: {'*' * len(api_key) if api_key != '見つかりません' else '見つかりません'}")

- id: validate_config
  name: validate_config
  tool: CHECKER_CHECK_BY_JSON
  input:
    - name: text
      value: "{{steps.parse_configuration.result.stdout | join(' ')}}"
    - name: task_name
      value: "設定検証"
    - name: rules
      value: |
        [
          {
            "rule": "データベースURLの存在",
            "pattern": "database_url.*://",
            "required": true
          },
          {
            "rule": "APIキーの設定",
            "pattern": "api_key.*\\*+",
            "required": true
          }
        ]

例: CSVデータインポート

- id: import_csv_data
  name: import_csv_data
  tool: INPUT_FILE_AS_TEXT
  input:
    - name: value
      value: "https://example.com/sales_data.csv"
    - name: description
      value: "月次売上データCSVファイル"

- id: process_csv
  name: process_csv
  tool: PYTHON_SANDBOX_RUN
  input:
    - name: code
      value: |
        import csv
        import requests
        from io import StringIO
        
        # CSVファイルをダウンロード
        file_url = "{{steps.import_csv_data.result}}"
        response = requests.get(file_url)
        csv_content = response.text
        
        # CSVを解析
        csv_reader = csv.DictReader(StringIO(csv_content))
        rows = list(csv_reader)
        
        print(f"CSVから{len(rows)}行を読み込みました")
        print(f"カラム: {', '.join(csv_reader.fieldnames)}")
        
        # 要約統計を計算
        if 'amount' in csv_reader.fieldnames:
            amounts = [float(row['amount']) for row in rows if row['amount']]
            total = sum(amounts)
            average = total / len(amounts) if amounts else 0
            
            print(f"\n売上サマリー:")
            print(f"  総売上: ¥{total:,.2f}")
            print(f"  平均売上: ¥{average:,.2f}")
            print(f"  売上件数: {len(amounts)}")

- id: generate_report
  name: generate_report
  tool: OPENAI_INVOKE
  config:
    - name: version
      value: gpt-4
  input:
    - name: prompt
      value: |
        以下のCSV処理結果に基づいて売上レポートを生成してください:
        
        {{steps.process_csv.result.stdout | join('\n')}}
        
        以下を含むマークダウンレポートを作成してください:
        1. エグゼクティブサマリー
        2. 主要指標
        3. トレンドとインサイト
        4. 推奨事項

ファイル形式サポート

INPUT_FILE_AS_TEXTがサポートする形式:

  • text/plain: プレーンテキストファイル (.txt)
  • text/csv: カンマ区切り値 (.csv)
  • text/html: HTMLドキュメント (.html)
  • text/xml: XMLドキュメント (.xml)
  • text/json: JSONファイル (.json)
  • text/yaml: YAML設定ファイル (.yml, .yaml)

使用例

  • API統合: Webhookを介して外部サービスからデータを受信
  • リアルタイム処理: Slackイベントと通知を処理
  • 画像処理: AIモデルで画像を分析
  • 文書処理: テキストファイルと文書を処理
  • イベント駆動ワークフロー: 外部イベントに基づいてワークフローをトリガー