ドキュメント

ワークフロー

DAGベースの処理パイプラインを構築・実行します。YAMLまたはJSONで定義し、SDKやREST APIで管理し、1回の呼び出しで実行します。

フォーマット選択ガイド

SchiftワークフローはYAMLとJSONの両方をサポートします。用途に合わせて選んでください:

フォーマット最適な用途使い方
YAMLバージョン管理、手動編集、コードレビューSDK push_yaml() / importYaml() または REST POST /v1/workflows/import
JSONプログラマティック生成、API優先SDK create() または REST POST /v1/workflowsgraph を含める
テンプレートクイックスタートSDK create(template="BASIC_RAG") または REST に template フィールド

まとめ

手動でパイプラインを定義するならYAML。アプリが動的に生成するならJSON。どちらもサーバー上で同じワークフローを作成します。

YAMLスキーマリファレンス

ワークフローYAMLは4つのトップレベルキーで構成されます: versionnameblocksedges

yamlversion: 1                    # 必須。常に1。
name: "法律文書QA"             # 必須。表示名。
description: "リランキング付き法律文書RAGパイプライン"

blocks:
  - id: start                  # ユニークID(edgesで参照)
    type: start                # ブロックタイプ(下表参照)

  - id: retriever
    type: retriever
    title: "法律文書検索"    # オプションの表示名
    config:                     # ブロック固有のパラメータ
      collection: "legal-jp"
      top_k: 10
      rerank: true
      rerank_top_k: 3

  - id: prompt
    type: prompt_template
    config:
      template: |
        コンテキスト:
        {{results}}

        質問: {{query}}
        質問と同じ言語で回答してください。

  - id: llm
    type: llm
    config:
      model: "openai/gpt-4.1-nano"
      temperature: 0.3
      max_tokens: 1024

  - id: answer
    type: answer

  - id: end
    type: end

edges:
  - source: start
    target: retriever
  - source: retriever
    target: prompt
  - source: prompt
    target: llm
  - source: llm
    target: answer
  - source: answer
    target: end

ブロックタイプ

GET /v1/workflows/meta/block-typesで利用可能なタイプを取得できます。全リファレンス:

カテゴリタイプ説明
コントロールstartエントリポイント。すべての入力を下流ブロックに転送。
コントロールend終端ノード。ワークフロー完了を示す。
ドキュメントdocument_loaderPDF、DOCX、HWP、PPT、画像、URLをロード。
ドキュメントdocument_parserOCRおよび表/チャート抽出。
ドキュメントchunkerテキスト分割。戦略: recursivesemanticsentencefixed
エンベディングembedderSchift APIでエンベディング(自動canonical projection)。
エンベディングmodel_selectorタスクに最適なエンベディングモデルを自動選択。
ストレージvector_storeコレクションにベクターをupsert。
ストレージcollection既存コレクションを参照。
検索retrieverベクトル検索 + オプションのメタデータフィルターとリランキング。
検索rerankerCross-encoderリランキング。
LLMllmLLM生成。プレフィックスルーティング: openai/anthropic/google/
LLMprompt_templateJinja2テンプレートでプロンプト構築。
ロジックconditionIf/else分岐。
ロジックrouterマルチパスルーティング(質問分類器)。
ロジックai_routerLLMベースの動的ルーティング。
ロジックloopリストアイテムの反復。
変換codePythonサンドボックスでカスタムロジック。
変換merge複数ブランチの出力をマージ。
変換variableワークフロー変数の設定/取得。
変換field_selectorテーブルからカラム、JSONからパスを選択。
統合http_request外部API呼び出し。
統合webhookインバウンドWebhookトリガー。
収集webhook_sourceインバウンドWebhook -> 収集パイプライン。
収集ingest_bridge重複排除 + ダウンロード + ドキュメント作成。
収集feed_poll定期RSS/APIポーリング。
収集notifyジョブ完了時のアウトバウンドWebhook。
出力answerチャット形式の応答出力。
出力metadata_extractorテキストから構造化メタデータを抽出。

SDKクイックスタート

両SDKともフルライフサイクルをサポート: 作成、YAMLインポート/エクスポート、実行、管理。

pythonfrom schift import Schift

client = Schift(api_key="sch_xxx")

# 方法1: YAMLファイルから作成
wf = client.workflows.push_yaml("pipeline.yaml")

# 方法2: テンプレートから作成
wf = client.workflows.create("My RAG", template="BASIC_RAG")

# 方法3: ステップバイステップで構築
wf = client.workflows.create("カスタムパイプライン")
client.workflows.add_block(wf.id, "retriever", config={"collection": "docs", "top_k": 5})
client.workflows.add_block(wf.id, "llm", config={"model": "openai/gpt-4.1-nano"})
client.workflows.add_edge(wf.id, source="retriever", target="llm")

# 実行
result = client.workflows.run(wf.id, inputs={"query": "返品ポリシーは?"})
print(result.outputs)

# YAMLでエクスポート(バージョン管理用)
yaml_str = client.workflows.to_yaml(wf.id, path="pipeline.yaml")
typescriptimport { Schift } from "@schift-io/sdk";

const schift = new Schift({ apiKey: "sch_xxx" });

// 方法1: YAML文字列からインポート(js-yamlが必要)
const wf = await schift.workflows.importYaml(yamlString);

// 方法2: テンプレートから作成
const wf2 = await schift.workflows.create({ name: "My RAG", template: "BASIC_RAG" });

// 方法3: ステップバイステップで構築
const wf3 = await schift.workflows.create({ name: "カスタム" });
await schift.workflows.addBlock(wf3.id, { type: "retriever", config: { collection: "docs" } });
await schift.workflows.addBlock(wf3.id, { type: "llm", config: { model: "openai/gpt-4.1-nano" } });
await schift.workflows.addEdge(wf3.id, { source: "retriever", target: "llm" });

// 実行
const run = await schift.workflows.run(wf3.id, { query: "返品ポリシーは?" });

// YAMLでエクスポート
const yaml = await schift.workflows.exportYaml(wf3.id);

REST APIリファレンス

メソッドエンドポイント説明
POST/v1/workflowsワークフロー作成(空、テンプレート、またはフルグラフ)
GET/v1/workflows全ワークフロー一覧
GET/v1/workflows/{id}単件ワークフロー + フルグラフ
PATCH/v1/workflows/{id}名前、説明、ステータス、グラフの更新
DELETE/v1/workflows/{id}ワークフロー削除
POST/v1/workflows/importYAML文字列からインポート
GET/v1/workflows/{id}/export?format=yamlYAMLでエクスポート(format=jsonも可)
POST/v1/workflows/{id}/blocksブロック追加
DELETE/v1/workflows/{id}/blocks/{block_id}ブロック削除
POST/v1/workflows/{id}/edgesエッジ追加
DELETE/v1/workflows/{id}/edges/{edge_id}エッジ削除
POST/v1/workflows/{id}/validateグラフ検証(循環、接続欠落)
POST/v1/workflows/{id}/run入力値で実行
GET/v1/workflows/{id}/runs実行履歴一覧
GET/v1/workflows/{id}/runs/{run_id}特定の実行結果
POST/v1/workflows/{id}/webhook/{path}外部Webhookでトリガー
POST/v1/workflows/generate自然言語でAI生成(有料)
bash# YAMLファイルをRESTでインポート
curl -X POST https://api.schift.io/v1/workflows/import \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $SCHIFT_API_KEY" \
  -d '{"yaml": "version: 1\nname: My Pipeline\nblocks:\n  - id: start\n    type: start\n  - id: end\n    type: end\nedges:\n  - source: start\n    target: end"}'

# YAMLでエクスポート
curl https://api.schift.io/v1/workflows/{id}/export?format=yaml \
  -H "Authorization: Bearer $SCHIFT_API_KEY"

# JSONでエクスポート
curl https://api.schift.io/v1/workflows/{id}/export?format=json \
  -H "Authorization: Bearer $SCHIFT_API_KEY"

LLMプロバイダールーティング

llmブロックはモデルプレフィックスでプロバイダーを自動ルーティングします:

モデル形式プロバイダー
openai/model-nameOpenAIopenai/gpt-4.1-nano
anthropic/model-nameAnthropicanthropic/claude-sonnet-4-6
google/model-name または gemini-*Google (Gemini)gemini-2.5-flash

APIキーは組織設定を優先確認し、なければ環境変数(OPENAI_API_KEYANTHROPIC_API_KEYGOOGLE_API_KEY)を使用します。

テンプレート

GET /v1/workflows/meta/templatesで利用可能なテンプレートを取得できます。

テンプレートパイプライン
BASIC_RAGStart -> Retriever -> Reranker -> Prompt -> LLM -> Answer -> End
DOCUMENT_QAドキュメントQA + ソース表示
CONVERSATIONAL_RAGマルチターン会話型RAG
CHAT_RAGチャット最適化RAG
IMAGE_OCR_INGESTOCR -> Chunk -> Embed収集パイプライン

実行

複数の入力変数を渡せます。Startノードがすべての変数を下流ブロックに転送します。

bash# 実行前に検証
curl -X POST https://api.schift.io/v1/workflows/{id}/validate \
  -H "Authorization: Bearer $SCHIFT_API_KEY"

# 入力値で実行
curl -X POST https://api.schift.io/v1/workflows/{id}/run \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $SCHIFT_API_KEY" \
  -d '{"inputs": {"query": "産休制度", "language": "ja"}}'

# 実行履歴
curl https://api.schift.io/v1/workflows/{id}/runs \
  -H "Authorization: Bearer $SCHIFT_API_KEY"

実行レスポンスにはstatusoutputs、ブロックごとのblock_states(所要時間含む)、失敗時のerrorが含まれます。

Webhookトリガー

外部システムからワークフローをトリガーできます。/v1/workflows/{id}/webhook/{path}にPOSTするとペイロードがワークフロー入力(bodyheadersquery_params)として渡されます。

AI生成(有料)

POST /v1/workflows/generateは自然言語の説明からワークフローグラフを生成します。生成されたグラフはレビュー用に返され、自動保存されません。

bashcurl -X POST https://api.schift.io/v1/workflows/generate \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $SCHIFT_API_KEY" \
  -d '{"prompt": "ドキュメントを検索してリランキングし、GPT-4oで要約"}'