> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jinba.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Jinbaモジュール

> Jinbaモジュールを使用した高度なデータ抽出、解析、検証

## 概要

Jinbaモジュールは、抽出・解析・ルールベースのチェックを含む、LLMを活用した強力なデータ処理機能を提供します。これらのツールはLLMでファイルを解析し、複雑なデータ変換・検証タスクを高精度かつ柔軟に処理します。

## 主な機能

### JINBA\_MODULES\_EXTRACT

ユーザーが定義したJSON Schemaに基づき、LLMがファイルを解析して構造化データを抽出します。

| パラメータ            | 型      | 必須  | 説明                                                                                                   |
| ---------------- | ------ | --- | ---------------------------------------------------------------------------------------------------- |
| `name`           | string | はい  | タスク名                                                                                                 |
| `fileUrl`        | string | はい  | データを抽出するファイルのURL                                                                                     |
| `dataSchema`     | object | いいえ | 抽出するデータのスキーマ。有効な[JSON Schema](https://json-schema.org/understanding-json-schema/reference)である必要があります |
| `extractionMode` | string | いいえ | `FAST`、`BALANCED`（デフォルト）、`QUALITY` のいずれか                                                             |

出力: `result` — `dataSchema` に沿って抽出されたデータ。

### JINBA\_MODULES\_PARSE

ファイル形式に応じてLLMが解析方法を自動調整し、内容を抽出する動的パーサーです。

| パラメータ            | 型      | 必須  | 説明                                          |
| ---------------- | ------ | --- | ------------------------------------------- |
| `fileUrl`        | string | はい  | 解析するファイルのURL                                |
| `outputFormat`   | string | いいえ | `MARKDOWN`（デフォルト）、`TEXT`、`STRUCTURED` のいずれか |
| `extractionMode` | string | いいえ | `FAST`、`BALANCED`（デフォルト）、`QUALITY` のいずれか    |

出力: `result` — 解析結果の文字列。

### JINBA\_MODULES\_CHECKER\_V2

JSONで定義したルールをもとに対象ファイルを検証する、強化版のLLMチェッカーです。v2では柔軟なルール構造、高精度な判定、判定ごとの詳細な理由提示に対応しています。

| パラメータ                  | 型      | 必須  | 説明                                                       |
| ---------------------- | ------ | --- | -------------------------------------------------------- |
| `target_file`          | string | はい  | チェック対象のファイル（PDF、テキスト、JSON、XML、CSV、DOCX）                  |
| `task`                 | string | はい  | タスク名                                                     |
| `description`          | string | いいえ | タスクの説明。特定のタスクに特化した指示を追加したい場合に使用します                       |
| `rules`                | array  | いいえ | ルールオブジェクトのJSON配列（[ルール形式](#ルール形式)を参照）                     |
| `references`           | array  | いいえ | 参照ファイルのURL（最大10件）。ハルシネーション抑制のため、社内規程・法的文書・RAG検索結果などを渡せます |
| `additionalDataSchema` | object | いいえ | 各チェック結果に付加して返すデータを定義するJSON Schema                        |

出力: `result` — ルールごとのチェック結果の配列。各要素は `uniqueId`、`rule`、`status`（`accepted` / `rejected` / `pending`）、`range`、`reason`、および任意の `additionalData` を持ちます。

## 認証

認証やツール設定は不要です。Jinbaモジュール APIの認証情報はサーバー側で管理されています。

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

```yaml theme={null}
- id: upload_document
  name: upload_document
  tool: INPUT_FILE
  input:
    - name: description
      value: "抽出対象の文書をアップロードしてください"

- id: extract_structured_data
  name: extract_structured_data
  tool: JINBA_MODULES_EXTRACT
  input:
    - name: name
      value: "請求書データ抽出"
    - name: fileUrl
      value: "{{steps.upload_document.result}}"
    - name: dataSchema
      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: extractionMode
      value: "QUALITY"  # オプション: FAST、BALANCED、QUALITY

- id: validate_document
  name: validate_document
  tool: JINBA_MODULES_CHECKER_V2
  input:
    - name: target_file
      value: "{{steps.upload_document.result}}"
    - name: task
      value: "請求書チェック"
    - name: description
      value: "アップロードされた請求書が以下のルールを満たしているか確認してください。"
    - name: rules
      value: |
        [
          {
            "uniqueId": "invoice-001",
            "name": "請求書番号の存在",
            "description": "文書には請求書番号またはIDが含まれている必要があります。"
          },
          {
            "uniqueId": "invoice-002",
            "name": "合計金額が正の数",
            "description": "合計金額は正の数である必要があります。"
          },
          {
            "uniqueId": "invoice-003",
            "name": "有効な請求書日付",
            "description": "請求書日付が存在し、有効な日付形式である必要があります。"
          },
          {
            "uniqueId": "invoice-004",
            "name": "有効なベンダーメールアドレス",
            "description": "ベンダーのメールアドレスが記載されている場合、有効なメール形式である必要があります。"
          }
        ]

- 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}}''')
        check_results = json.loads('''{{steps.validate_document.result}}''')
        
        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チェック結果:")
        accepted_count = sum(1 for r in check_results if r.get('status') == 'accepted')
        total_rules = len(check_results)
        print(f"合格: {accepted_count}/{total_rules}")
        
        # 不合格のルールを表示
        rejected = [r for r in check_results if r.get('status') == 'rejected']
        if rejected:
            print("\n不合格のルール:")
            for r in rejected:
                print(f"  - {r.get('rule', '不明')}: {r.get('reason', '理由なし')}")
        else:
            print("すべてのルールに合格しました")

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

## 例: バッチ文書処理

```yaml theme={null}
- id: process_document_batch
  name: process_document_batch
  tool: JINBA_MODULES_EXTRACT
  input:
    - name: name
      value: "バッチ文書処理"
    - name: fileUrl
      value: "{{input.batch_file_url}}"
    - name: dataSchema
      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: extractionMode
      value: "BALANCED"

- id: parse_document_content
  name: parse_document_content
  tool: JINBA_MODULES_PARSE
  input:
    - name: fileUrl
      value: "{{input.batch_file_url}}"
    - name: outputFormat
      value: "MARKDOWN"  # オプション: MARKDOWN、TEXT、STRUCTURED
    - name: extractionMode
      value: "BALANCED"

- id: comprehensive_validation
  name: comprehensive_validation
  tool: JINBA_MODULES_CHECKER_V2
  input:
    - name: target_file
      value: "{{input.batch_file_url}}"
    - name: task
      value: "バッチ文書チェック"
    - name: rules
      value: |
        [
          {
            "uniqueId": "doc-001",
            "name": "文書タイプの限定",
            "description": "すべての文書は請求書（invoice）、領収書（receipt）、契約書（contract）のいずれかである必要があります。"
          },
          {
            "uniqueId": "doc-002",
            "name": "金額の範囲",
            "description": "すべての文書の金額は0から1,000,000の間である必要があります。"
          },
          {
            "uniqueId": "doc-003",
            "name": "日付の範囲",
            "description": "すべての文書の日付は2020-01-01から2025-12-31の間である必要があります。"
          },
          {
            "uniqueId": "doc-004",
            "name": "ベンダー名の長さ",
            "description": "すべてのベンダー名は2文字以上200文字以下である必要があります。"
          }
        ]
    - name: additionalDataSchema
      value: |
        {
          "type": "object",
          "properties": {
            "documentType": {
              "type": "string",
              "description": "ルールの評価対象となった文書のタイプ"
            }
          }
        }

- 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}}''')
        parsed = '''{{steps.parse_document_content.result}}'''
        check_results = json.loads('''{{steps.comprehensive_validation.result}}''')
        
        report = {
            "processing_summary": {
                "timestamp": datetime.now().isoformat(),
                "total_documents": len(extracted.get('documents', [])),
                "extraction_mode": "BALANCED",
                "parsed_characters": len(parsed),
                "all_rules_accepted": all(r.get('status') == 'accepted' for r in check_results)
            },
            "document_breakdown": {},
            "check_summary": {
                "total_rules": len(check_results),
                "accepted": sum(1 for r in check_results if r.get('status') == 'accepted'),
                "rejected": sum(1 for r in check_results if r.get('status') == 'rejected'),
                "pending": sum(1 for r in check_results if r.get('status') == 'pending')
            },
            "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['check_summary']['rejected'] > 0:
            report['recommendations'].append("不合格のルールを確認し、データの問題を修正してください")
        
        if report['check_summary']['pending'] > 0:
            report['recommendations'].append("保留（pending）のルールを手動で確認してください")
        
        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"
```

## 抽出モード

`extractionMode` パラメータは `JINBA_MODULES_EXTRACT` と `JINBA_MODULES_PARSE` の両方で使用できます。

* **FAST**: 高速にデータを抽出します。シンプルな文書の大量処理に最適です
* **BALANCED**（デフォルト）: 速度と精度のバランスを取って抽出します。汎用的な選択肢です
* **QUALITY**: 最高精度で抽出します。重要文書や複雑なレイアウトに最適です

## 出力フォーマット

`JINBA_MODULES_PARSE` の `outputFormat` パラメータで解析結果の形式を指定できます。

* **MARKDOWN**（デフォルト）: 見出し・表・リストを保持したMarkdown形式で出力します
* **TEXT**: プレーンテキストで出力します
* **STRUCTURED**: 構造化された形式で出力します

## データスキーマ設計

`JINBA_MODULES_EXTRACT` の `dataSchema` パラメータには、有効な任意のJSON Schemaを指定できます。

### 基本スキーマ構造

```json theme={null}
{
  "$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フォーマット

## ルール形式

`JINBA_MODULES_CHECKER_V2` の `rules` パラメータは、ルールオブジェクトのJSON配列です。各ルールはLLMによって対象ファイルに対して評価されます。

| フィールド         | 型      | 必須  | 説明                                                                         |
| ------------- | ------ | --- | -------------------------------------------------------------------------- |
| `uniqueId`    | string | はい  | 対応するチェック結果にそのまま返される識別子                                                     |
| `name`        | string | はい  | 短いルール名                                                                     |
| `description` | string | はい  | ルールがチェックする内容（自然言語で記述）                                                      |
| `references`  | array  | いいえ | ルール固有の参照情報。`type`（`text` または `url`）と、対応する `text` / `url` フィールドを持つオブジェクトの配列 |
| `examples`    | array  | いいえ | 判定の指針となる判定例                                                                |

### チェック結果

出力 `result` の各要素は1つのルールに対応します。

* **`uniqueId`**: ルールの識別子
* **`rule`**: 評価されたルール
* **`status`**: `accepted`（合格）、`rejected`（不合格）、`pending`（保留）のいずれか
* **`range`**: 判定が参照する対象内の位置
* **`reason`**: 判定の詳細な理由
* **`additionalData`**: `additionalDataSchema` を指定した場合に返される追加データ

## 使用例

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

## ベストプラクティス

### スキーマ設計

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

### 抽出最適化

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

### チェック戦略

* ルールの `description` は明確で曖昧さのない自然言語で記述する
* 結果を長期的に追跡できるよう、各ルールに安定した `uniqueId` を付与する
* ハルシネーション抑制のため、`references` に規程・法的文書・RAG検索結果などを添付する
* `pending` の結果は手動で確認し、`reason` の内容をもとにルールを改善する

### パフォーマンス考慮事項

* 類似の文書をまとめてバッチ処理
* シンプルで大量の処理にはFASTモードを使用
* 精度が重要な場合にのみQUALITYモードを使用
* 抽出失敗時のエラーハンドリングを実装
