# 删除分段

从来源当前版本中删除指定分段。删除后无法恢复。

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

## 调用前准备

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

下方示例使用：

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

## 路径参数

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `model_id` | integer | 知识库 ID。 |
| `source_row_id` | string | 来源记录 ID。 |
| `segment_id` | string | 要删除的分段 ID。 |

## 请求体

提交来源当前的版本基线，避免删除已被其他调用者修改的版本。

| 字段 | 类型 | 是否必填 | 说明 |
| --- | --- | --- | --- |
| `base_segment_version_id` | string | 是 | 调用前读取到的当前分段版本 ID。 |
| `base_index_version` | integer | 是 | 调用前读取到的当前索引版本。 |

## 请求示例

```bash
curl -X DELETE "https://moi.matrixorigin.cn/newmoi/semantic-models/$MODEL_ID/sources/$SOURCE_ROW_ID/segments/$SEGMENT_ID" \
  -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>
  }'
```

## 成功响应

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

```json
{
  "code": "OK",
  "msg": "OK",
  "data": {
    "document": {
      "source": {
        "row_id": "src_01",
        "model_id": 401
      },
      "segment_status": {
        "available": true,
        "total": 1
      },
      "segment_versions": [
        {
          "version_id": "ver_03",
          "current": true,
          "chunk_count": 1
        }
      ],
      "segments": [
        {
          "segment_id": "seg_02",
          "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.total` | integer | 删除后的当前分段数。 |
| `data.document.segment_versions[].version_id` | string | 删除后生成或切换到的分段版本 ID。 |
| `data.document.segments` | object（对象数组） | 当前版本剩余的分段。 |
| `data.document.segments[].segment_id` | string | 剩余分段 ID。 |

## 错误响应

```json
{
  "code": "ErrConflict",
  "msg": "segment version conflict",
  "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)确认分段已删除。
