TransformersTextRouter

TransformersTextRouter

텍스트 입력을 모델이 정한 분류 라벨에 따라 여러 출력 연결로 라우팅해 주는 컴포넌트예요. 같은 질문이라도 내용에 따라 서로 다른 모델로 보내고 싶을 때 딱 맞아요.

파이프라인에서 가장 흔한 위치: 유연함 (Flexible) 필수 init 변수: model — 텍스트 분류용 Hugging Face 모델의 이름 또는 경로 필수 run 변수: text — 분류된 라벨에 따라 지정된 출력 중 하나로 라우팅할 텍스트 출력 변수: <label> — 모델이 할당한 라벨 이름을 딴 출력 연결로 보내진 입력 텍스트. 라벨마다 출력이 하나씩 있어요. API 레퍼런스: Transformers GitHub 링크: https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/transformers 패키지 이름: transformers-haystack

출처: 문서

본문

개요 (Overview)

TransformersTextRouter는 텍스트 입력을 분류 라벨에 따라 여러 출력 연결로 라우팅해요. 파이프라인에서 쿼리를 분류 내용에 따라 서로 다른 모델로 보낼 때 유용해요. 예를 들어 영어 질문은 영어에 최적화된 모델로, 독일어 질문은 독일어에 최적화된 모델로 나눠 보내는 식이에요.

먼저 컴포넌트를 초기화할 때 model 파라미터로 선택한 모델을 설정해야 해요. 그 모델이 분류에 사용할 라벨 집합을 제공해 줘요.

labels 파라미터도 추가로 줄 수 있는데, 각 시퀀스를 분류할 가능한 클래스 라벨의 문자열 리스트예요. 이 값을 제공하지 않으면 컴포넌트는 transformers.AutoConfig.from_pretrained를 사용해 Hugging Face Hub에 호스팅된 모델 설정 파일에서 라벨을 가져와요.

Hugging Face API 토큰 인증은 비공개 모델이나 gated 모델에 접근할 때만 필요해요. 토큰은 초기화할 때 token으로 넘기거나, HF_API_TOKEN 또는 HF_TOKEN 환경 변수로 설정할 수 있어요.

전체 파라미터 목록은 API 레퍼런스에서 확인할 수 있어요.

사용법 (Usage)

TransformersTextRouter를 사용하려면 transformers-haystack 패키지를 설치해요:

pip install transformers-haystack

단독으로 사용하기 (On its own)

TransformersTextRouter는 단독으로는 효과가 크지 않아요. 이 컴포넌트의 진짜 강점은 파이프라인 안에서 살아나요. 파이프라인에 통합되면 텍스트를 가장 적절한 컴포넌트로 효율적으로 라우팅할 수 있거든요. 아래 다음 섹션에서 완전한 사용 예시를 볼 수 있어요.

파이프라인 안에서 사용하기 (In a pipeline)

아래는 영어 쿼리를 영어 텍스트에 최적화된 Text Generator로, 독일어 쿼리를 독일어 텍스트에 최적화된 Text Generator로 라우팅하는 간단한 파이프라인 예시예요.

from haystack import Pipeline
from haystack_integrations.components.routers.transformers import TransformersTextRouter
from haystack.components.builders.chat_prompt_builder import ChatPromptBuilder
from haystack_integrations.components.generators.transformers import (
    TransformersChatGenerator,
)
from haystack.dataclasses import ChatMessage

p = Pipeline()
p.add_component(
    instance=TransformersTextRouter(
        model="papluca/xlm-roberta-base-language-detection",
    ),
    name="text_router",
)
p.add_component(
    instance=ChatPromptBuilder(
        template=[ChatMessage.from_user("Answer the question: {{query}}\nAnswer:")],
        required_variables={"query"},
    ),
    name="english_prompt_builder",
)
p.add_component(
    instance=ChatPromptBuilder(
        template=[ChatMessage.from_user("Beantworte die Frage: {{query}}\nAntwort:")],
        required_variables={"query"},
    ),
    name="german_prompt_builder",
)
p.add_component(
    instance=TransformersChatGenerator(
        model="DiscoResearch/Llama3-DiscoLeo-Instruct-8B-v0.1",
    ),
    name="german_llm",
)
p.add_component(
    instance=TransformersChatGenerator(model="microsoft/Phi-3-mini-4k-instruct"),
    name="english_llm",
)

p.connect("text_router.en", "english_prompt_builder.query")
p.connect("text_router.de", "german_prompt_builder.query")
p.connect("english_prompt_builder.prompt", "english_llm.messages")
p.connect("german_prompt_builder.prompt", "german_llm.messages")

# English Example
print(p.run({"text_router": {"text": "What is the capital of Germany?"}}))
# German Example
print(p.run({"text_router": {"text": "Was ist die Hauptstadt von Deutschland?"}}))

추가 레퍼런스 (Additional References)

📓 튜토리얼: Query Classification with TransformersTextRouter and TransformersZeroShotTextRouter

더 알아보기 (Learn more)