# 创建分段

在来源当前分段版本中创建一个分段。可按来源内容提供一个新的文本、OCR 或图片描述分段。

```text
POST https://moi.matrixorigin.cn/newmoi/semantic-models/{model_id}/sources/{source_row_id}/segments
```

## 调用前准备

先[查询文档详情](get-document.md)，取得当前分段版本 ID 和索引版本作为基线。准备有目标工作区访问权限的个人访问令牌和目标工作区 ID。

下方示例使用：

- `$AI_STUDIO_API_KEY`：实际个人访问令牌，通过 `X-API-Key` Header 传递。
- `$WORKSPACE_ID`：目标工作区 ID，通过 `X-Workspace-ID` Header 传递。
- `$MODEL_ID`：知识库 ID。
- `$SOURCE_ROW_ID`：来源记录 ID。

## 路径参数

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `model_id` | integer | 知识库 ID。 |
| `source_row_id` | string | 来源记录 ID。 |

## 请求体

提交来源当前的版本基线和分段内容。

| 字段 | 类型 | 是否必填 | 说明 |
| --- | --- | --- | --- |
| `base_segment_version_id` | string | 是 | 调用前读取到的当前分段版本 ID。 |
| `base_index_version` | integer | 是 | 调用前读取到的当前索引版本。 |
| `level` | string | 否 | 分段层级。 |
| `content` | string | 否 | 文本分段内容。 |
| `ocr_text` | string | 否 | OCR 识别出的文本。 |
| `image_description` | string | 否 | 图片内容说明。 |
| `image_file_id` | string | 否 | 关联图片文件 ID。 |
| `page_image_file_id` | string | 否 | 关联页面图片文件 ID。 |
| `bbox` | JSON | 否 | 分段在原始内容中的边界信息。 |
| `metadata` | JSON | 否 | 附加元数据。 |

## 请求示例

```bash
curl -X POST "https://moi.matrixorigin.cn/newmoi/semantic-models/$MODEL_ID/sources/$SOURCE_ROW_ID/segments" \
  -H "X-API-Key: $AI_STUDIO_API_KEY" \
  -H "X-Workspace-ID: $WORKSPACE_ID" \
  -H 'Content-Type: application/json' \
  -d '{
    "base_segment_version_id": "<SEGMENT_VERSION_ID>",
    "base_index_version": <INDEX_VERSION>,
    "level": "chunk",
    "content": "<SEGMENT_CONTENT>"
  }'
```

## 成功响应

成功时返回 `200` 和更新后的来源文档快照。

```json
{
  "code": "OK",
  "msg": "OK",
  "data": {
    "document": {
      "source": {
        "row_id": "src_01",
        "model_id": 401
      },
      "segment_status": {
        "available": true,
        "total": 3
      },
      "segment_versions": [
        {
          "version_id": "ver_03",
          "current": true,
          "chunk_count": 3
        }
      ],
      "segments": [
        {
          "segment_id": "seg_03",
          "segment_type": "text",
          "level": "chunk",
          "content": "新增分段",
          "enabled": true
        }
      ]
    }
  }
}
```

响应字段如下。

字段路径中的 `[]` 表示数组中的每一项。例如，`data.document.segment_versions[].version_id` 表示 `data.document.segment_versions` 数组中每一项的 `version_id` 字段。

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `code` | string | 成功时为 `OK`。 |
| `msg` | string | 成功时为 `OK`。 |
| `data.document` | object | 写入后的来源文档快照。 |
| `data.document.source.row_id` | string | 来源记录 ID。 |
| `data.document.segment_status` | object | 当前分段可用状态和总数。 |
| `data.document.segment_versions[].version_id` | string | 新建或更新后的分段版本 ID。 |
| `data.document.segment_versions[].current` | boolean | 是否为当前分段版本。 |
| `data.document.segments[].segment_id` | string | 新分段 ID。 |
| `data.document.segments[].level` | string | 分段层级。 |
| `data.document.segments[].content` | string | 分段文本；内容未返回时可能省略。 |
| `data.document.segments[].enabled` | boolean | 分段是否参与检索。 |

## 错误响应

```json
{
  "code": "ErrParamInvalid",
  "msg": "invalid segment version baseline",
  "data": null
}
```

### 常见 HTTP 错误

```{list-table}
:header-rows: 1
:widths: 12 22 32 34

* - HTTP 状态码
  - 错误代码
  - 常见原因
  - 建议操作
* - `400`
  - `ErrParamInvalid`
  - 路径 ID、请求体或分段版本基线无效。
  - 重新读取文档后使用当前版本信息提交。
* - `401`
  - `ErrUnauthorized`
  - API Key 无效或已失效。
  - 检查 API Key。
* - `403`
  - `ErrForbidden`
  - 调用者没有更新该来源的权限。
  - 检查工作区和对象授权。
* - `404`
  - `ErrNotFound`
  - 知识库或来源不存在，或当前调用者不可见。
  - 重新读取来源列表确认 ID。
* - `409`
  - `ErrConflict`
  - 当前版本已变化，服务拒绝写入。
  - 读取最新文档后合并修改并重试。
* - `500`
  - `ErrServer`
  - 服务未能创建分段。
  - 保留脱敏后的响应信息后重试。
```

## 后续操作

[查询文档详情](get-document.md)确认新分段已生效。
