Data Classes (数据类)
在 Haystack 中,有一些核心类经常在许多不同的地方使用。这些类通过系统传输数据,您很可能会以管道的输入或输出形式与它们交互。
Haystack 使用数据类来帮助组件以简单模块化的方式相互通信。通过这样做,数据可以无缝地流经 Haystack 管道。本页将介绍 Haystack 中可用的数据类:ByteStream、Answer(及其变体 ExtractedAnswer 和 GeneratedAnswer)、ChatMessage、Document 和 StreamingChunk,解释它们如何为 Haystack 生态系统做出贡献。
您可以在我们的数据类 API 参考中查看详细参数。
Answer
概述
该Answer
类作为 Haystack 中生成的响应的基础,包含答案的数据、原始查询和附加元数据。
主要特点
- 适应性数据处理,可容纳任何数据类型 (
数据
). - 用于上下文相关性的查询跟踪 (
查询
). - 广泛的元数据支持,用于详细的答案描述。
属性
@dataclass(frozen=True)
class Answer:
data: Any
query: str
meta: Dict[str, Any]
ExtractedAnswer
概述
ExtractedAnswer
是 Answer
的子类,专门处理从文档中提取的答案,提供更详细的属性。包括对原始文档的引用,并提供量化答案置信水平的评分属性。
主要特点
- 包括对原始文档的引用
Document
. - 评分属性用于量化答案的置信水平。
- 可选的开始和结束索引,用于精确指出答案在来源中的位置。
属性
@dataclass
class ExtractedAnswer:
query: str
score: float
data: Optional[str] = None
document: Optional[Document] = None
context: Optional[str] = None
document_offset: Optional["Span"] = None
context_offset: Optional["Span"] = None
meta: Dict[str, Any] = field(default_factory=dict)
GeneratedAnswer
概述
GeneratedAnswer
扩展了 Answer
类,以适应从多个文档生成的答案。Answer
类以适应从多个文档生成的答案。
主要特点
- 处理字符串类型的数据。
- 链接到
Document
对象的列表,增强答案可追溯性。Document
对象的列表,增强答案可追溯性。
属性
@dataclass
class GeneratedAnswer:
data: str
query: str
documents: List[Document]
meta: Dict[str, Any] = field(default_factory=dict)
ByteStream
概述
ByteStream
代表 Haystack 框架中的二进制对象抽象,对于处理各种二进制数据格式至关重要。
主要特点
- 保存二进制数据和相关元数据。
- 可选的 MIME 类型规范,具有灵活性。
- 文件交互方法 (
to_file
,from_file_path
,from_string
) 便于数据操作。
属性
@dataclass(frozen=True)
class ByteStream:
data: bytes
metadata: Dict[str, Any] = field(default_factory=dict, hash=False)
mime_type: Optional[str] = field(default=None)
示例
from haystack.dataclasses.byte_stream import ByteStream
image = ByteStream.from_file_path("dog.jpg")
ChatMessage
ChatMessage
是表示 LLM 消息的中心抽象。它包含角色、元数据和多种类型的内容,包括文本、工具调用和工具调用结果。
请阅读ChatMessage 专用页面上关于 ChatMessage
数据类的详细文档。ChatMessage
数据类的详细文档。
Document
概述
Document
代表 Haystack 中的中心数据抽象,能够保存文本、表格和二进制数据。
主要特点
- 每个文档的唯一 ID。
- 支持多种内容类型:文本、二进制 (
blob
). - 自定义元数据和评分,用于高级文档管理。
- 可选的 AI 应用嵌入。
属性
@dataclass
class Document(metaclass=_BackwardCompatible):
id: str = field(default="")
content: Optional[str] = field(default=None)
blob: Optional[ByteStream] = field(default=None)
meta: Dict[str, Any] = field(default_factory=dict)
score: Optional[float] = field(default=None)
embedding: Optional[List[float]] = field(default=None)
sparse_embedding: Optional[SparseEmbedding] = field(default=None)
示例
from haystack import Document
documents = Document(content="Here are the contents of your document", embedding=[0.1]*768)
StreamingChunk
概述
StreamingChunk
代表部分流式传输的 LLM 响应,实现实时 LLM 响应处理。它封装了一段流式传输内容以及相关元数据,并提供有关流式传输状态的全面信息。
主要特点
- 文本块的基于字符串的内容表示
- 支持工具调用和工具调用结果
- 组件跟踪和元数据管理
- 流式传输状态指示器(开始、结束原因)
- 多部分响应的内容块索引
属性
@dataclass
class StreamingChunk:
content: str
meta: dict[str, Any] = field(default_factory=dict, hash=False)
component_info: Optional[ComponentInfo] = field(default=None)
index: Optional[int] = field(default=None)
tool_calls: Optional[list[ToolCallDelta]] = field(default=None)
tool_call_result: Optional[ToolCallResult] = field(default=None)
start: bool = field(default=False)
finish_reason: Optional[FinishReason] = field(default=None)
示例
from haystack.dataclasses.streaming_chunk import StreamingChunk, ComponentInfo
# Basic text chunk
chunk = StreamingChunk(
content="Hello world",
start=True,
meta={"model": "gpt-3.5-turbo"}
)
# Tool call chunk
tool_chunk = StreamingChunk(
tool_calls=[ToolCallDelta(index=0, tool_name="calculator", arguments='{"operation": "add", "a": 2, "b": 3}')],
index=0,
start=False,
finish_reason="tool_calls"
)
ToolCallDelta
概述
ToolCallDelta
表示模型准备的工具调用,通常包含在流式传输期间的助手消息中。
属性
@dataclass
class ToolCallDelta:
index: int
tool_name: Optional[str] = field(default=None)
arguments: Optional[str] = field(default=None)
id: Optional[str] = field(default=None)
ComponentInfo
概述
该ComponentInfo
类表示 Haystack 管道中组件的信息。它用于跟踪生成或处理数据的组件的类型和名称,有助于整个管道的调试、跟踪和元数据管理。
主要特点
- 存储组件的类型(包括模块和类名)。
- 可选地存储分配给管道中组件的名称。
- 提供方便的类方法来从
Component
对象创建ComponentInfo
实例。ComponentInfo
实例。Component
对象。
属性
@dataclass
class ComponentInfo:
type: str
name: Optional[str] = field(default=None)
@classmethod
def from_component(cls, component: Component) -> "ComponentInfo":
...
示例
from haystack.dataclasses.streaming_chunk import ComponentInfo
from haystack.core.component import Component
class MyComponent(Component):
...
component = MyComponent()
info = ComponentInfo.from_component(component)
print(info.type) # e.g., 'my_module.MyComponent'
print(info.name) # Name assigned in the pipeline, if any
SparseEmbedding
概述
该SparseEmbedding
类表示稀疏嵌入:一个大部分值为零的向量。
属性
indices
:嵌入中非零元素的索引列表。values
:嵌入中非零元素的值列表。
Tool
Tool
是一个数据类,表示语言模型可以准备调用的工具。
请阅读ChatMessage 专用页面上关于 ChatMessage
数据类的详细文档。Tool 专用页面上的 Tool
数据类。
更新于 2 个月前