---
last_reviewed: 2026-06-09
---

# LlamaIndex 多模态消息格式错误

## 错误现象

```
pydantic_core._pydantic_core.ValidationError: 2 validation errors for ChatMessage
blocks.0
  Unable to extract tag using discriminator 'block_type' [type=union_tag_not_found, ...
blocks.1
  Unable to extract tag using discriminator 'block_type' [type=union_tag_not_found, ...
```

## 触发条件

- llama-index-core >= 0.14.x
- 使用 `ChatMessage` 构造多模态消息（文本 + 图片）
- 传入 OpenAI 格式的 `content` 列表：`[{"type": "text", ...}, {"type": "image_url", ...}]`

## 原因

`llama-index-core 0.14.x` 重构了 `ChatMessage` 的内部结构：

| 版本 | 字段 | 多模态 content 格式 |
|------|------|-------------------|
| 0.14.x | `role`, `blocks`, `additional_kwargs` | `TextBlock` / `ImageBlock` 实例 |
| 旧版本 | `role`, `content` | OpenAI 风格字典列表 |

底层 Pydantic 模型使用 `block_type` 作为 union discriminator，OpenAI 格式的 `{"type": "text", ...}` 字典不包含该字段，导致验证失败。

## 修复方法

**正确写法（llama-index 原生 blocks 格式）：**

```python
from llama_index.core.llms import ChatMessage
from llama_index.core.base.llms.types import ImageBlock, TextBlock

messages = [
    ChatMessage(role="system", content=system_prompt),
    ChatMessage(
        role="user",
        blocks=[
            TextBlock(text="请分析这张图片"),
            ImageBlock(
                url=f"data:image/jpeg;base64,{image_b64}",
                detail="high",
            ),
        ],
    ),
]
```
## 适用版本

- llama-index-core: 0.14.22
- llama-index-llms-openai-like: 0.7.2