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

Data Classes (数据类)

在系统中传递数据的核心类。

模块 haystack_experimental.dataclasses.chat_message

ChatMessage

表示 LLM 聊天对话中的一条消息。

使用from_assistant, from_user, from_system使用 `from_tool` 类方法创建 ChatMessage。

ChatMessage.images

@property
def images() -> List[ImageContent]

返回消息中包含的所有图像的列表。

ChatMessage.image

@property
def image() -> Optional[ImageContent]

返回消息中包含的第一张图像。

ChatMessage.from_user

@classmethod
def from_user(
    cls,
    text: Optional[str] = None,
    meta: Optional[Dict[str, Any]] = None,
    name: Optional[str] = None,
    *,
    content_parts: Optional[Sequence[Union[TextContent, str,
                                           ImageContent]]] = None
) -> "ChatMessage"

从用户创建消息。

参数:

  • `text`: 消息的文本内容。指定此项或 `content_parts`。
  • `meta`: 与消息关联的附加元数据。
  • `name`: 参与者的可选名称。此字段仅由 OpenAI 支持。
  • `content_parts`: 要包含在消息中的内容部分列表。指定此项或 `text`。

返回值:

一个新的 ChatMessage 实例。

ChatMessage.to_dict

def to_dict() -> Dict[str, Any]

将 ChatMessage 转换为字典。

返回值:

对象的序列化版本。

ChatMessage.to_openai_dict_format

def to_openai_dict_format(
        require_tool_call_ids: bool = True) -> Dict[str, Any]

将 ChatMessage 转换为 OpenAI 的 Chat API 所期望的字典格式。

参数:

  • `require_tool_call_ids`: 如果为 True (默认),则强制每个 Tool Call 都包含一个非空的`id` 属性。设置为 False 以允许没有`id` 的 Tool Call,这可能适用于浅层 OpenAI 兼容 API。

引发:

  • `ValueError`: 如果消息格式无效,或者如果`require_tool_call_ids` 为 True 且任何 Tool Call 缺少`id` 属性。

返回值:

OpenAI 的 Chat API 所期望格式的 ChatMessage。

ChatMessage.from_system

@classmethod
def from_system(cls,
                text: str,
                meta: Optional[Dict[str, Any]] = None,
                name: Optional[str] = None) -> "ChatMessage"

从系统创建消息。

参数:

  • `text`: 消息的文本内容。
  • `meta`: 与消息关联的附加元数据。
  • `name`: 参与者的可选名称。此字段仅由 OpenAI 支持。

返回值:

一个新的 ChatMessage 实例。

ChatMessage.from_assistant

@classmethod
def from_assistant(
        cls,
        text: Optional[str] = None,
        meta: Optional[Dict[str, Any]] = None,
        name: Optional[str] = None,
        tool_calls: Optional[List[ToolCall]] = None) -> "ChatMessage"

从助手创建消息。

参数:

  • `text`: 消息的文本内容。
  • `meta`: 与消息关联的附加元数据。
  • `tool_calls`: 要包含在消息中的 Tool 调用。
  • `name`: 参与者的可选名称。此字段仅由 OpenAI 支持。

返回值:

一个新的 ChatMessage 实例。

ChatMessage.from_tool

@classmethod
def from_tool(cls,
              tool_result: str,
              origin: ToolCall,
              error: bool = False,
              meta: Optional[Dict[str, Any]] = None) -> "ChatMessage"

从 Tool 创建消息。

参数:

  • `tool_result`: Tool 调用返回的结果。
  • `origin`: 产生此结果的 Tool 调用。
  • `error`: Tool 调用是否导致了错误。
  • `meta`: 与消息关联的附加元数据。

返回值:

一个新的 ChatMessage 实例。

ChatMessage.from_dict

@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "ChatMessage"

从字典创建新的 ChatMessage 对象。

参数:

  • `data`: 用于构建 ChatMessage 对象的字典。

返回值:

创建的对象。

模块 haystack_experimental.dataclasses.image_content

ImageContent

聊天消息的图像内容。

参数:

  • `base64_image`: 表示图像的 base64 字符串。
  • `mime_type`: 图像的 MIME 类型 (例如,“image/png”、“image/jpeg”)。建议提供此值,因为大多数 LLM 提供商都需要它。如果未提供,则从 base64 字符串推断 MIME 类型,这可能很慢且不总是可靠。
  • `detail`: 图像的可选详细级别 (仅 OpenAI 支持)。可选值包括 "auto"、"high" 或 "low"。
  • `meta`: 图像的可选元数据。
  • `validate`: 如果为 True (默认),则执行验证过程
  • 检查 base64 字符串是否有效;
  • 如果未提供 MIME 类型,则推断 MIME 类型;
  • 检查 MIME 类型是否是有效的图像 MIME 类型。设置为 False 可跳过验证并加快初始化速度。

ImageContent.__repr__

def __repr__() -> str

返回 ImageContent 的字符串表示形式,将 base64_image 截断为 100 字节。

ImageContent.show

def show() -> None

显示图像。

ImageContent.from_file_path

@classmethod
def from_file_path(cls,
                   file_path: Union[str, Path],
                   *,
                   size: Optional[Tuple[int, int]] = None,
                   detail: Optional[Literal["auto", "high", "low"]] = None,
                   meta: Optional[Dict[str, Any]] = None) -> "ImageContent"

从文件路径创建 ImageContent 对象。

它提供了与`ImageFileToImageContent` 组件类似的功能。对于 PDF 到 ImageContent 的转换,请使用`PDFToImageContent` 组件。

参数:

  • `file_path`: 图像文件的路径。不支持 PDF 文件。对于 PDF 到 ImageContent 的转换,请使用`PDFToImageContent` 组件。
  • size: 如果提供,则将图像调整为适合指定的尺寸(宽度,高度),同时保持纵横比。这可以减小文件大小、内存使用量和处理时间,这在处理具有分辨率限制的模型或向远程服务传输图像时非常有用。
  • `detail`: 图像的可选详细级别 (仅 OpenAI 支持)。可选值包括 "auto"、"high" 或 "low"。
  • `meta`: 图像的附加元数据。

返回值:

一个 ImageContent 对象。

ImageContent.from_url

@classmethod
def from_url(cls,
             url: str,
             *,
             retry_attempts: int = 2,
             timeout: int = 10,
             size: Optional[Tuple[int, int]] = None,
             detail: Optional[Literal["auto", "high", "low"]] = None,
             meta: Optional[Dict[str, Any]] = None) -> "ImageContent"

从 URL 创建 ImageContent 对象。图像将被下载并转换为 base64 字符串。

对于 PDF 到 ImageContent 的转换,请使用`PDFToImageContent` 组件。

参数:

  • `url`: 图像的 URL。不支持 PDF 文件。对于 PDF 到 ImageContent 的转换,请使用`PDFToImageContent` 组件。
  • retry_attempts: 重试获取 URL 内容的次数。
  • timeout: 请求的超时时间(秒)。
  • size: 如果提供,则将图像调整为适合指定的尺寸(宽度,高度),同时保持纵横比。这可以减小文件大小、内存使用量和处理时间,这在处理具有分辨率限制的模型或向远程服务传输图像时非常有用。
  • `detail`: 图像的可选详细级别 (仅 OpenAI 支持)。可选值包括 "auto"、"high" 或 "low"。
  • `meta`: 图像的附加元数据。

引发:

  • `ValueError`: 如果 URL 不指向图像或指向 PDF 文件。

返回值:

一个 ImageContent 对象。