概要

Jinbaモジュールは、抽出、解析、検証を含む強力なデータ処理機能を提供します。これらのツールは高度なAIと機械学習技術を使用して、高精度で柔軟な複雑なデータ変換タスクを処理します。

主な機能

JINBA_MODULES_EXTRACT

  • 様々なソースからのAI駆動データ抽出
  • 設定可能な抽出モード(FAST、BALANCED、QUALITY)
  • ユーザー定義JSONスキーマサポート
  • インテリジェントなコンテンツ認識と解析

JINBA_MODULES_PARSE

  • 高度なドキュメントとデータ解析
  • 構造認識と保持
  • マルチフォーマットサポート
  • コンテキスト対応コンテンツ解釈

JINBA_MODULES_CHECKER_V2

  • JSONルールを使用した強化されたデータ検証
  • 複数の検証タイプを含む複雑なルールエンジン
  • 詳細な検証レポート
  • パフォーマンスと精度の向上

認証

Jinbaモジュールツールに認証は必要ありません。

例: インテリジェント文書抽出

- id: extract_structured_data
  name: extract_structured_data
  tool: JINBA_MODULES_EXTRACT
  input:
    - name: task_name
      value: "請求書データ抽出"
    - name: file_url
      value: "{{steps.upload_document.result.file_url}}"
    - name: data_schema
      value: |
        {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "invoice_number": {
              "type": "string",
              "description": "請求書番号またはID"
            },
            "date": {
              "type": "string",
              "format": "date",
              "description": "請求書日付"
            },
            "vendor": {
              "type": "object",
              "properties": {
                "name": {"type": "string"},
                "address": {"type": "string"},
                "phone": {"type": "string"},
                "email": {"type": "string"}
              }
            },
            "items": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "description": {"type": "string"},
                  "quantity": {"type": "number"},
                  "unit_price": {"type": "number"},
                  "total": {"type": "number"}
                }
              }
            },
            "total_amount": {
              "type": "number",
              "description": "合計請求金額"
            },
            "tax_amount": {
              "type": "number",
              "description": "税額(存在する場合)"
            }
          },
          "required": ["invoice_number", "date", "total_amount"]
        }
    - name: extraction_mode
      value: "QUALITY"  # オプション: FAST、BALANCED、QUALITY

- id: validate_extracted_data
  name: validate_extracted_data
  tool: JINBA_MODULES_CHECKER_V2
  input:
    - name: file_url
      value: "{{steps.extract_structured_data.result.file_url}}"
    - name: rules_json
      value: |
        {
          "validation_rules": [
            {
              "field": "invoice_number",
              "type": "required",
              "error_message": "請求書番号は必須です"
            },
            {
              "field": "total_amount",
              "type": "number",
              "min": 0,
              "error_message": "合計金額は正の数である必要があります"
            },
            {
              "field": "date",
              "type": "date",
              "format": "YYYY-MM-DD",
              "error_message": "日付は有効な形式である必要があります"
            },
            {
              "field": "vendor.email",
              "type": "email",
              "required": false,
              "error_message": "提供された場合、メールは有効な形式である必要があります"
            }
          ]
        }

- id: process_extraction_results
  name: process_extraction_results
  tool: PYTHON_SANDBOX_RUN
  input:
    - name: code
      value: |
        import json
        
        # 抽出結果を処理
        extracted_data = json.loads('''{{steps.extract_structured_data.result.extracted_data}}''')
        validation_results = json.loads('''{{steps.validate_extracted_data.result.validation_results}}''')
        
        print("文書抽出結果")
        print("=" * 20)
        
        # 抽出されたデータを表示
        print("📄 抽出された情報:")
        print(f"請求書番号: {extracted_data.get('invoice_number', 'N/A')}")
        print(f"日付: {extracted_data.get('date', 'N/A')}")
        print(f"ベンダー: {extracted_data.get('vendor', {}).get('name', 'N/A')}")
        print(f"合計金額: ¥{extracted_data.get('total_amount', 0):,.2f}")
        
        if 'items' in extracted_data:
            print(f"アイテム数: {len(extracted_data['items'])}")
        
        print("\n🔍 検証結果:")
        valid_count = sum(1 for r in validation_results if r.get('status') == 'valid')
        total_rules = len(validation_results)
        print(f"有効: {valid_count}/{total_rules}")
        
        # 検証エラーを表示
        errors = [r for r in validation_results if r.get('status') == 'invalid']
        if errors:
            print("\n❌ 検証エラー:")
            for error in errors:
                print(f"  - {error.get('field', '不明')}: {error.get('message', '不明なエラー')}")
        else:
            print("✅ すべての検証に合格しました")

- id: export_processed_data
  name: export_processed_data
  tool: OUTPUT_FILE
  input:
    - name: content
      value: "{{steps.extract_structured_data.result.extracted_data}}"
    - name: filename
      value: "extracted_invoice_data_{{date | format('YYYY-MM-DD')}}.json"
    - name: fileType
      value: "json"

例: バッチ文書処理

- id: setup_batch_processing
  name: setup_batch_processing
  tool: PYTHON_SANDBOX_RUN
  input:
    - name: code
      value: |
        # バッチ処理設定を定義
        batch_config = {
            "document_types": ["invoice", "receipt", "contract"],
            "extraction_schema": {
                "common_fields": ["date", "amount", "vendor", "document_type"],
                "invoice_fields": ["invoice_number", "line_items", "tax_amount"],
                "receipt_fields": ["merchant", "payment_method", "receipt_number"],
                "contract_fields": ["parties", "terms", "effective_date", "expiration_date"]
            },
            "validation_rules": {
                "amount_validation": {"type": "number", "min": 0},
                "date_validation": {"type": "date", "format": "flexible"},
                "email_validation": {"type": "email", "required": false}
            }
        }
        
        print("バッチ処理設定が完了しました。文書タイプ:")
        for doc_type in batch_config["document_types"]:
            print(f"  - {doc_type.title()}")

- id: process_document_batch
  name: process_document_batch
  tool: JINBA_MODULES_EXTRACT
  input:
    - name: task_name
      value: "バッチ文書処理"
    - name: file_url
      value: "{{input.batch_file_url}}"
    - name: data_schema
      value: |
        {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "documents": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "document_type": {"type": "string"},
                  "date": {"type": "string"},
                  "amount": {"type": "number"},
                  "vendor": {"type": "string"},
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": ["document_type", "date", "amount"]
              }
            }
          }
        }
    - name: extraction_mode
      value: "BALANCED"

- id: parse_complex_structures
  name: parse_complex_structures
  tool: JINBA_MODULES_PARSE
  input:
    - name: input_data
      value: "{{steps.process_document_batch.result.extracted_data}}"
    - name: parsing_options
      value: |
        {
          "preserve_structure": true,
          "normalize_dates": true,
          "standardize_amounts": true,
          "extract_entities": true,
          "group_by_type": true
        }

- id: comprehensive_validation
  name: comprehensive_validation
  tool: JINBA_MODULES_CHECKER_V2
  input:
    - name: data_content
      value: "{{steps.parse_complex_structures.result.parsed_data}}"
    - name: rules_json
      value: |
        {
          "validation_rules": [
            {
              "field": "documents[*].document_type",
              "type": "enum",
              "values": ["invoice", "receipt", "contract"],
              "error_message": "文書タイプは invoice、receipt、contract のいずれかである必要があります"
            },
            {
              "field": "documents[*].amount",
              "type": "number",
              "min": 0,
              "max": 1000000,
              "error_message": "金額は0から1,000,000の間である必要があります"
            },
            {
              "field": "documents[*].date",
              "type": "date",
              "min_date": "2020-01-01",
              "max_date": "2025-12-31",
              "error_message": "日付は2020年から2025年の間である必要があります"
            },
            {
              "field": "documents[*].vendor",
              "type": "string",
              "min_length": 2,
              "max_length": 200,
              "error_message": "ベンダー名は2-200文字である必要があります"
            }
          ],
          "summary_rules": [
            {
              "rule": "document_count_check",
              "expression": "documents.length > 0",
              "error_message": "少なくとも1つの文書が処理される必要があります"
            },
            {
              "rule": "total_amount_check", 
              "expression": "sum(documents[*].amount) > 0",
              "error_message": "合計金額はゼロより大きい必要があります"
            }
          ]
        }

- id: generate_processing_report
  name: generate_processing_report
  tool: PYTHON_SANDBOX_RUN
  input:
    - name: code
      value: |
        import json
        from datetime import datetime
        
        # 処理レポートをコンパイル
        extracted = json.loads('''{{steps.process_document_batch.result.extracted_data}}''')
        parsed = json.loads('''{{steps.parse_complex_structures.result.parsed_data}}''')
        validation = json.loads('''{{steps.comprehensive_validation.result.validation_results}}''')
        
        report = {
            "processing_summary": {
                "timestamp": datetime.now().isoformat(),
                "total_documents": len(extracted.get('documents', [])),
                "extraction_mode": "BALANCED",
                "validation_passed": all(r.get('status') == 'valid' for r in validation)
            },
            "document_breakdown": {},
            "validation_summary": {
                "total_rules": len(validation),
                "passed": sum(1 for r in validation if r.get('status') == 'valid'),
                "failed": sum(1 for r in validation if r.get('status') == 'invalid')
            },
            "recommendations": []
        }
        
        # 文書タイプ別内訳
        if 'documents' in extracted:
            doc_types = {}
            total_amount = 0
            for doc in extracted['documents']:
                doc_type = doc.get('document_type', 'unknown')
                doc_types[doc_type] = doc_types.get(doc_type, 0) + 1
                total_amount += doc.get('amount', 0)
            
            report['document_breakdown'] = doc_types
            report['processing_summary']['total_amount'] = total_amount
        
        # 推奨事項を追加
        if report['validation_summary']['failed'] > 0:
            report['recommendations'].append("失敗した検証を確認し、データの問題を修正してください")
        
        if report['processing_summary']['total_documents'] > 100:
            report['recommendations'].append("パフォーマンス向上のため、より小さなバッチでの処理を検討してください")
        
        print(json.dumps(report, indent=2, ensure_ascii=False))

- id: save_processing_report
  name: save_processing_report
  tool: OUTPUT_FILE
  input:
    - name: content
      value: "{{steps.generate_processing_report.result.stdout}}"
    - name: filename
      value: "batch_processing_report_{{date | format('YYYY-MM-DD-HHmm')}}.json"
    - name: fileType
      value: "json"

抽出モード

FASTモード

  • 速度: 最速処理
  • 精度: シンプルな文書に適している
  • 使用例: 大量のシンプルな文書処理
  • 処理時間: 文書あたり約1-3秒

BALANCEDモード(推奨)

  • 速度: 中程度の処理速度
  • 精度: ほとんどの文書で高精度
  • 使用例: 汎用的な文書処理
  • 処理時間: 文書あたり約3-8秒

QUALITYモード

  • 速度: 遅いが徹底的な処理
  • 精度: 複雑な文書で最高精度
  • 使用例: 重要文書、複雑なレイアウト
  • 処理時間: 文書あたり約8-15秒

データスキーマ設計

基本スキーマ構造

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "field_name": {
      "type": "string|number|object|array",
      "description": "フィールドの明確な説明",
      "format": "date|email|uri|etc",
      "pattern": "必要に応じて正規表現パターン"
    }
  },
  "required": ["必須フィールドのリスト"]
}

高度なスキーマ機能

  • ネストされたオブジェクト: 複雑なデータ構造
  • 配列: 同じタイプの複数項目
  • 条件付きフィールド: 他の値に依存するフィールド
  • パターンマッチング: 正規表現による検証
  • フォーマット検証: 日付、メール、URLフォーマット

検証ルール

フィールドレベル検証

  • 型チェック: 文字列、数値、ブール、配列、オブジェクト
  • 範囲検証: 数値の最小/最大値
  • 長さ検証: 文字列の最小/最大長
  • フォーマット検証: メール、日付、URLパターン
  • 列挙検証: リストからの許可された値

文書レベル検証

  • 必須フィールド: 必須データの存在
  • クロスフィールド検証: 複数フィールドにまたがるルール
  • ビジネスロジック: カスタム検証ルール
  • 一貫性チェック: データの一貫性検証

使用例

  • 請求書処理: 自動請求書データ抽出と検証
  • 文書デジタル化: 紙文書を構造化データに変換
  • データ移行: レガシーシステムからのデータ抽出
  • コンプライアンスチェック: 規制に対する文書検証
  • 研究データ: 研究文書からの構造化データ抽出
  • フォーム処理: フォームデータの自動抽出
  • 契約分析: 契約から重要条項を抽出
  • 財務処理: 財務諸表と報告書の処理

ベストプラクティス

スキーマ設計

  • スキーマをシンプルで焦点を絞ったものにする
  • 明確で説明的なフィールド名を使用
  • 包括的な説明を含める
  • サンプルデータでスキーマをテスト
  • 一貫性のためにスキーマをバージョン管理

抽出最適化

  • 使用例に適した抽出モードを選択
  • 高品質な入力文書を提供
  • 可能な場合は一貫した文書フォーマットを使用
  • 抽出精度を監視し、必要に応じて調整

検証戦略

  • 階層化検証を実装(フィールド → 文書 → ビジネス)
  • 明確なエラーメッセージを提供
  • 分析のために検証結果をログ
  • 結果に基づいて検証ルールを継続的に改善

パフォーマンス考慮事項

  • 類似の文書をまとめてバッチ処理
  • シンプルで大量の処理にはFASTモードを使用
  • 処理時間を監視し、抽出モードを調整
  • 抽出失敗時のエラーハンドリングを実装