ListJoiner

ListJoiner

여러 리스트를 하나의 평평한 리스트로 합쳐주는 컴포넌트예요. 인덱싱·쿼리 파이프라인에서 문서 리스트를 반환하는 컴포넌트(여러 Retriever나 여러 Converter) 뒤에 두면 돼요.

출처: ListJoiner

본문

개요

ListJoiner 컴포넌트는 여러 리스트를 하나의 리스트로 합쳐요. 서로 다른 파이프라인 컴포넌트의 리스트를 결합하거나, LLM 응답을 병합하거나, 다단계 데이터 처리를 다루거나, 여러 소스의 데이터를 한 리스트로 모을 때 유용해요.

항목들은 각 입력 리스트가 파이프라인에서 처리된 순서대로 정렬돼요.

선택적으로 list_type_ 파라미터로 합칠 리스트의 예상 타입(예: List[ChatMessage])을 지정할 수 있어요. 설정하지 않으면 ListJoiner는 혼합 데이터 타입이 들어 있는 리스트도 받아들여요.

사용법

단독 사용:

from haystack.components.joiners import ListJoiner

list1 = ["Hello", "world"]
list2 = ["This", "is", "Haystack"]
list3 = ["ListJoiner", "Example"]

joiner = ListJoiner()

result = joiner.run(values=[list1, list2, list3])

print(result["values"])

파이프라인 안에서:

from haystack.components.builders import ChatPromptBuilder
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.dataclasses import ChatMessage
from haystack import Pipeline
from haystack.components.joiners import ListJoiner
from typing import List

user_message = [
    ChatMessage.from_user("Give a brief answer the following question: {{query}}"),
]

feedback_prompt = """
 You are given a question and an answer.
 Your task is to provide a score and a brief feedback on the answer.
 Question: {{query}}
 Answer: {{response}}
 """
feedback_message = [ChatMessage.from_system(feedback_prompt)]

prompt_builder = ChatPromptBuilder(template=user_message)
feedback_prompt_builder = ChatPromptBuilder(template=feedback_message)
llm = OpenAIChatGenerator(model="gpt-4o-mini")
feedback_llm = OpenAIChatGenerator(model="gpt-4o-mini")

pipe = Pipeline()
pipe.add_component("prompt_builder", prompt_builder)
pipe.add_component("llm", llm)
pipe.add_component("feedback_prompt_builder", feedback_prompt_builder)
pipe.add_component("feedback_llm", feedback_llm)
pipe.add_component("list_joiner", ListJoiner(List[ChatMessage]))

pipe.connect("prompt_builder.prompt", "llm.messages")
pipe.connect("prompt_builder.prompt", "list_joiner")
pipe.connect("llm.replies", "list_joiner")
pipe.connect("llm.replies", "feedback_prompt_builder.response")
pipe.connect("feedback_prompt_builder.prompt", "feedback_llm.messages")
pipe.connect("feedback_llm.replies", "list_joiner")

query = "What is nuclear physics?"
ans = pipe.run(
    data={
        "prompt_builder": {"template_variables": {"query": query}},
        "feedback_prompt_builder": {"template_variables": {"query": query}},
    },
)

print(ans["list_joiner"]["values"])

더 알아보기 (Learn more)