マニフェストの記述方法
サイトにおけるマニフェストは、ツールやスクリプトの実行フローを定義し、依存関係やデータ変換を指定します。このドキュメントでは、システムで使用される形式に従って、マニフェストの構成と記述方法を説明します。
独自のマニフェストを作成する
マニフェストを作成するには、以下の手順に従ってください:
- 各ステップに
id
と name
を定義します。
INPUT_JSON
や PYTHON_SANDBOX
など、適切な tool
を選択します。
input
に 入力値を指定 します。
needs
を使って 依存関係を記述 し、実行順序を明示します。
この構成に従えば、データ処理のための明確でモジュール化されたワークフローを作成できます。
ステップの構成要素
Jinbaflow のマニフェストにおける各ステップは、動作と他のステップとの関係を定義するいくつかの主要な構成要素で構成されています。以下はその詳細です。
1. 基本的なステップ構造
- id: step_id
tool: TOOL_NAME
input:
- name: parameter_name
value: parameter_value
config:
- name: config_name
value: config_value
needs:
- step_id1
- step_id2
when: "condition"
forEach: "items"
各フィールドの説明:
id
: ステップを一意に識別するための必須フィールド
tool
: 実行するツールの名前(必須)
input
: ツールに必要な入力値のリスト(必須)
config
: ツール固有の設定(例:APIトークン、LLMの温度設定など)(任意)
needs
: 実行前に完了している必要のあるステップID(任意)
when
: 実行条件(任意)
forEach
: コレクション内の各要素に対してステップを繰り返すための指定(任意)
2. 設定 (config)
ツール固有の設定を指定します:
config:
- name: config_name
value: config_value
例:
config:
- name: temperature
value: 0.7
- name: token
value: "{{secrets.API_TOKEN}}"
3. 依存関係 (needs)
ステップの実行前に完了している必要のあるステップを指定します:
needs:
- step_id1
- step_id2
例:
- id: summarize
tool: LLM
needs:
- fetch_content
- analyze_sentiment
4. 条件付き実行
条件に基づいてステップを実行するかどうかを制御します:
when: "<condition_expression>"
例:
when: "'{{steps.check_genre.result.content}}' == 'General'"
when: "{{steps.count_items.result}} > 5"
5. ループ処理
コレクション内の各アイテムに対してステップを繰り返し実行します:
forEach: "{{steps.input_list.result}}"
例:
- id: process_items
tool: PYTHON_SANDBOX_RUN
forEach: "{{steps.get_items.result}}"
input:
- name: code
value: "process_item('{{item}}')"
- name: data_type
value: "STRING"
6. 結果の参照
以前のステップの結果を参照します:
value: "{{steps.step_id.result}}"
value: "{{steps.step_id.result.content}}"
注意事項
- ステップID はワークフロー内で一意である必要があります。
- 依存関係 によって暗黙の実行順序が決定されます。
- 複雑なグラフ構造(例:ダイヤモンド型)も可能
- 循環依存は許可されません
- 条件文 は実行前に評価され、論理演算や比較、過去ステップの結果参照が可能です。
- 変数参照:
{{steps.step_id.result}}
で過去の結果にアクセス
{{secrets.SECRET_NAME}}
でシークレットにアクセス
{{item}}
はループ内の現在のアイテム
- YAML構文:
Jinja2 テンプレート構文
Jinbaflow は、マニフェスト内での動的な値生成や複雑なロジックに Jinja2 テンプレートをサポートしています。
利用可能な変数:
steps
: 過去ステップの結果
item
: forEach ループ内の現在の要素
secrets
: 設定されたシークレット
- その他、
zip()
、range()
などの組み込み関数も使用可能
{%-
や -%}
を使用することで、出力に含まれる空白を制御できます。
基本構文
- 変数の挿入
- 制御構文
# 繰り返し
{%- for item in items %}
{{ item }}
{%- endfor %}
# 条件分岐
{%- if condition %}
{{ value }}
{%- endif %}
- ステップ結果の参照
value: "{{ steps.step_id.result }}"
value: "{{ steps.step_id.result.content }}"
よくあるユースケース
- リストの処理
- id: process_items
tool: PYTHON_SANDBOX_RUN
input:
- name: code
value: |-
items = []
{%- for item in steps.input_list.result %}
items.append({
"id": "{{item.id}}",
"value": "{{item.value}}"
})
{%- endfor %}
- name: data_type
value: "STRING"
- 条件分岐のロジック
- id: conditional_step
tool: PYTHON_SANDBOX_RUN
input:
- name: code
value: |-
{%- if steps.check.result.status == 'success' %}
print("Processing successful case")
{%- else %}
print("Handling error case")
{%- endif %}
- name: data_type
value: "STRING"
- 複数リストの組み合わせ
- id: combine_data
tool: PYTHON_SANDBOX_RUN
input:
- name: code
value: |-
results = []
{%- for item1, item2 in zip(list1, list2) %}
results.append(f"{item1}: {item2}")
{%- endfor %}
- name: data_type
value: "STRING"
パターン例
- リストのフィルタリング
{%- for item in items if item.status == 'active' %}
{{ item.name }}
{%- endfor %}
- デフォルト値の設定
{{ variable | default('default_value') }}
- 文字列操作
{{ variable | upper }}
{{ variable | trim }}
{{ variable | replace('old', 'new') }}
マニフェストの例
以下は、数値データを複数のステップで処理する例です:
- id: input_data
name: input_data
tool: INPUT_JSON
config: []
input:
- name: value
value: "[1, 2, 3, 4, 5]"
- id: branch_a1
name: branch_a1
tool: PYTHON_SANDBOX
config: []
input:
- name: code
value: |
data = {{steps.input_data.result}}
result = sum([x for x in data if x % 2 == 0])
result # 偶数の合計
needs:
- input_data
- id: branch_a2
name: branch_a2
tool: PYTHON_SANDBOX
config: []
input:
- name: code
value: |
result = {{steps.branch_a1.result.text}} * 2
result # 合計を2倍
needs:
- branch_a1
各ステップの説明
- 数値配列
[1, 2, 3, 4, 5]
を INPUT_JSON
ツールで入力します。
2. Branch A1 (branch_a1
)
PYTHON_SANDBOX
を使用して、偶数の合計を計算します。
input_data
に依存しています。
3. Branch A2 (branch_a2
)
branch_a1
の結果を2倍します。
branch_a1
に依存しています。
4. Branch B1 (branch_b1
)
input_data
の奇数の合計を計算します。
input_data
に依存しています。