在系统中传递数据的核心类。
模块 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 对象。
