ドキュメント
ワークフロー
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/workflows に graph を含める |
| テンプレート | クイックスタート | SDK create(template="BASIC_RAG") または REST に template フィールド |
まとめ
手動でパイプラインを定義するならYAML。アプリが動的に生成するならJSON。どちらもサーバー上で同じワークフローを作成します。
YAMLスキーマリファレンス
ワークフローYAMLは4つのトップレベルキーで構成されます: version、name、blocks、edges。
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_loader | PDF、DOCX、HWP、PPT、画像、URLをロード。 |
| ドキュメント | document_parser | OCRおよび表/チャート抽出。 |
| ドキュメント | chunker | テキスト分割。戦略: recursive、semantic、sentence、fixed。 |
| エンベディング | embedder | Schift APIでエンベディング(自動canonical projection)。 |
| エンベディング | model_selector | タスクに最適なエンベディングモデルを自動選択。 |
| ストレージ | vector_store | コレクションにベクターをupsert。 |
| ストレージ | collection | 既存コレクションを参照。 |
| 検索 | retriever | ベクトル検索 + オプションのメタデータフィルターとリランキング。 |
| 検索 | reranker | Cross-encoderリランキング。 |
| LLM | llm | LLM生成。プレフィックスルーティング: openai/、anthropic/、google/。 |
| LLM | prompt_template | Jinja2テンプレートでプロンプト構築。 |
| ロジック | condition | If/else分岐。 |
| ロジック | router | マルチパスルーティング(質問分類器)。 |
| ロジック | ai_router | LLMベースの動的ルーティング。 |
| ロジック | loop | リストアイテムの反復。 |
| 変換 | code | Pythonサンドボックスでカスタムロジック。 |
| 変換 | 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/import | YAML文字列からインポート |
| GET | /v1/workflows/{id}/export?format=yaml | YAMLでエクスポート(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-name | OpenAI | openai/gpt-4.1-nano |
anthropic/model-name | Anthropic | anthropic/claude-sonnet-4-6 |
google/model-name または gemini-* | Google (Gemini) | gemini-2.5-flash |
APIキーは組織設定を優先確認し、なければ環境変数(OPENAI_API_KEY、ANTHROPIC_API_KEY、GOOGLE_API_KEY)を使用します。
テンプレート
GET /v1/workflows/meta/templatesで利用可能なテンプレートを取得できます。
| テンプレート | パイプライン |
|---|---|
BASIC_RAG | Start -> Retriever -> Reranker -> Prompt -> LLM -> Answer -> End |
DOCUMENT_QA | ドキュメントQA + ソース表示 |
CONVERSATIONAL_RAG | マルチターン会話型RAG |
CHAT_RAG | チャット最適化RAG |
IMAGE_OCR_INGEST | OCR -> 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"実行レスポンスにはstatus、outputs、ブロックごとのblock_states(所要時間含む)、失敗時のerrorが含まれます。
Webhookトリガー
外部システムからワークフローをトリガーできます。/v1/workflows/{id}/webhook/{path}にPOSTするとペイロードがワークフロー入力(body、headers、query_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で要約"}'