자유 함수로 워크플로 만들기 — 클래스 밖에서 스텝 정의하기

자유 함수로 워크플로 만들기 — 클래스 밖에서 스텝 정의하기

지금까지 예시들은 워크플로 서브클래스의 메서드로 스텝을 정의했어요. 그런데 @step(workflow=...)을 쓰면 독립된 함수를 워크플로 클래스에 붙일 수도 있어요. 재사용 가능한 함수들로 워크플로를 조립할 때, 또는 통합 쪽에서 워크플로를 서브클래싱하지 않고 스텝을 추가하고 싶을 때 유용해요.

출처: 공식문서

먼저 스텝을 담을 빈 클래스를 만들어요.

from llama_index.core.workflow import Workflow

class TestWorkflow(Workflow):
    pass

이제 함수를 정의하고 @step() 데코레이터로 꾸미면 그 함수가 워크플로의 스텝으로 등록돼요.

from llama_index.core.workflow import step
from llama_index.core.workflow.events import StartEvent, StopEvent

@step(workflow=TestWorkflow)
async def some_step(ev: StartEvent) -> StopEvent:
    return StopEvent()

이 예시에서 데코레이터는 some_stepTestWorkflow 클래스에 등록해요. 함수 시그니처는 메서드 스텝과 같지만, self 파라미터가 없다는 점만 달라요.

등록은 import 시점에 일어나요. 그래서 워크플로를 인스턴스화하거나 검증하기 전에, 그 함수를 정의한 모듈이 import되어 있어야 합니다. 또 스텝 이름은 여전히 유일해야 해요. 기존 메서드나 자유 함수 스텝과 같은 이름의 자유 함수를 등록하면 검증 오류가 나요.

더 알아보기