文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

ListJoiner

一个将多个列表合并成一个扁平列表的组件。

pipeline 中的最常见位置在索引和查询管道中,在返回文档列表的组件(如多个Retrievers或多个Converters)之后。
强制运行变量“values”:要合并的列表字典。
输出变量“values”:一个包含带有已合并列表的“values”键。
API 参考Joiners (连接器)
GitHub 链接https://github.com/deepset-ai/haystack/blob/main/haystack/components/joiners/list_joiner.py

概述

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"])

在 pipeline 中

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"])