문서

워크플로우

DAG 기반 처리 파이프라인을 구성하고 실행합니다. YAML 또는 JSON으로 정의하고, SDK나 REST API로 관리하며, 한 번의 호출로 실행합니다.

포맷 선택 가이드

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개의 최상위 키로 구성됩니다: 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-kr"
      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텍스트 분할. 전략: recursive, semantic, sentence, fixed.
임베딩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_source인바운드 웹훅 -> 수집 파이프라인.
수집ingest_bridge중복제거 + 다운로드 + 문서 생성.
수집feed_poll주기적 RSS/API 폴링.
수집notify작업 완료 시 아웃바운드 웹훅.
출력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}외부 웹훅으로 트리거
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_KEY, ANTHROPIC_API_KEY, GOOGLE_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": "ko"}}'

# 실행 이력 조회
curl https://api.schift.io/v1/workflows/{id}/runs \
  -H "Authorization: Bearer $SCHIFT_API_KEY"

실행 응답에는 status, outputs, 블록별 block_states(소요 시간 포함), 실패 시 error가 포함됩니다.

웹훅 트리거

외부 시스템에서 워크플로우를 트리거할 수 있습니다. /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로 요약"}'