FileTypeRouter
FileTypeRouter
인덱싱 파이프라인에서 파일 경로나 바이트 스트림을 유형에 따라 서로 다른 출력으로 라우팅할 때 사용하는 Router 구성 요소예요.
출처: 문서
본문
FileTypeRouter는 파일 경로나 바이트 스트림을 유형(예: 일반 텍스트, jpeg 이미지, 오디오 wave)에 기반해서 라우팅해요. 파일 경로의 경우 확장자에서 MIME 타입을 추론하고, 바이트 스트림의 경우 제공된 메타데이터를 바탕으로 MIME 타입을 결정해요.
컴포넌트를 초기화할 때 별도의 출력으로 라우팅할 MIME 타입 집합을 지정해요. mime_types 파라미터를 타입 리스트로 설정하면 되죠, 예: ["text/plain", "audio/x-wav", "image/jpeg"]. 목록에 없는 타입은 unclassified라는 출력으로 라우팅돼요.
- 대표적인 파이프라인 위치: 데이터 전처리의 첫 번째 컴포넌트(이어서 Converter)
- 필수 init 변수:
mime_types— 분류에 쓰는 MIME 타입 또는 정규식 패턴의 리스트 - 필수 run 변수:
sources— 분류할 파일 경로 또는 바이트 스트림의 리스트 - 출력 변수:
unclassified(분류되지 않은 파일 경로/바이트 스트림),failed(처리 실패한 소스, 예: 존재하지 않는 파일 경로),mime_types(분류된 파일 경로/바이트 스트림) - API reference: Routers
- 패키지명:
haystack-ai
Usage
On its own
두 개의 파일 경로를 라우팅하는 FileTypeRouter 예시예요:
from haystack import Document
from haystack.components.routers import FileTypeRouter
router = FileTypeRouter(mime_types=["text/plain"])
router.run(sources=["text-file-will-be-added.txt", "pdf-will-not-ne-added.pdf"])
In a pipeline
FileTypeRouter를 사용해 일반 텍스트 파일만 DocumentSplitter와 DocumentWriter로 전달하는 파이프라인 예시예요. 일반 텍스트 파일의 콘텐츠만 InMemoryDocumentStore에 추가되고, 다른 유형의 파일 콘텐츠는 추가되지 않아요. 대안으로 PyPDFToDocument Converter를 파이프라인에 추가하고 FileTypeRouter로 PDF를 그쪽으로 라우팅해 문서로 변환할 수도 있어요.
from haystack import Pipeline
from haystack.components.routers import FileTypeRouter
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.converters import TextFileToDocument
from haystack.components.preprocessors import DocumentSplitter
from haystack.components.writers import DocumentWriter
document_store = InMemoryDocumentStore()
p = Pipeline()
p.add_component(
instance=FileTypeRouter(mime_types=["text/plain"]),
name="file_type_router",
)
p.add_component(instance=TextFileToDocument(), name="text_file_converter")
p.add_component(instance=DocumentSplitter(), name="splitter")
p.add_component(instance=DocumentWriter(document_store=document_store), name="writer")
p.connect("file_type_router.text/plain", "text_file_converter.sources")
p.connect("text_file_converter.documents", "splitter.documents")
p.connect("splitter.documents", "writer.documents")
p.run(
{
"file_type_router": {
"sources": ["text-file-will-be-added.txt", "pdf-will-not-be-added.pdf"],
},
},
)
더 알아보기 (Learn more)
- Routers API reference를 확인하세요.