# 查询数据源列表

分页查询知识库中的数据源及其处理状态。返回的来源记录 ID 是后续详情、治理、分段和删除接口的入参。

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

## 调用前准备

先[查询知识库列表](list-knowledge-bases.md)取得知识库 ID。准备有目标工作区访问权限的个人访问令牌和目标工作区 ID。

下方示例使用：

- `$AI_STUDIO_API_KEY`：实际个人访问令牌，通过 `X-API-Key` Header 传递。
- `$WORKSPACE_ID`：目标工作区 ID，通过 `X-Workspace-ID` Header 传递。
- `$MODEL_ID`：要查询的知识库 ID。

## 路径参数

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `model_id` | integer | 知识库 ID。 |

## 查询参数

| 参数 | 类型 | 是否必填 | 说明 |
| --- | --- | --- | --- |
| `page` | integer | 否 | 页码，必须为正整数。 |
| `page_size` | integer | 否 | 单页条数，范围为 `1` 至 `100`。 |

## 请求示例

```bash
curl "https://moi.matrixorigin.cn/newmoi/semantic-models/$MODEL_ID/sources?page=1&page_size=20" \
  -H "X-API-Key: $AI_STUDIO_API_KEY" \
  -H "X-Workspace-ID: $WORKSPACE_ID"
```

## 成功响应

成功时返回 `200`。保存 `data.items[].row_id`；后续详情、治理、分段和删除接口均使用它。

```json
{
  "code": "OK",
  "msg": "OK",
  "data": {
    "items": [
      {
        "row_id": "src_01",
        "source_type": "file",
        "model_id": 401,
        "resource_id": "file_01",
        "display_name": "product-guide.pdf",
        "path": ["docs", "product-guide.pdf"],
        "ingest_status": "ready",
        "enabled": true,
        "effective_enabled": true,
        "segment_version_id": "ver_02",
        "index_version": 2,
        "governance_status": "managed"
      }
    ],
    "total": 1,
    "page": 1,
    "page_size": 20,
    "legacy_backfill_required": false
  }
}
```

响应字段如下。

本文中，类型后的 `[]` 表示数组，例如 `string[]` 是字符串数组；字段路径中的 `[]` 表示数组中的每一项，例如 `data.items[].row_id` 表示 `data.items` 数组中每一项的 `row_id` 字段。

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `code` | string | 成功时为 `OK`。 |
| `msg` | string | 成功时为 `OK`。 |
| `data.items` | object（对象数组） | 当前页来源记录。 |
| `data.items[].row_id` | string | 来源记录 ID。 |
| `data.items[].source_type` | string | 来源类型：`file`、`volume` 或 `table`。 |
| `data.items[].model_id` | integer | 所属知识库 ID。 |
| `data.items[].resource_id` | string | 来源资源 ID。 |
| `data.items[].display_name` | string | 显示名称。 |
| `data.items[].path` | string（字符串数组） | 来源路径。 |
| `data.items[].ingest_status` | string | 来源处理状态。 |
| `data.items[].enabled` | boolean | 配置的启用状态。 |
| `data.items[].effective_enabled` | boolean | 实际生效状态。 |
| `data.items[].segment_version_id` | string | 当前分段版本；未生成时可能为空。 |
| `data.items[].index_version` | integer | 当前索引版本；未生成时可能为空。 |
| `data.items[].error` | string | 处理错误摘要；无错误时可能为空。 |
| `data.items[].governance_status` | string | 来源治理状态。 |
| `data.total` | integer | 匹配条件的来源总数。 |
| `data.page` | integer | 当前页码。 |
| `data.page_size` | integer | 当前页大小。 |
| `data.legacy_backfill_required` | boolean | 是否需要补齐旧来源关系。 |

## 读取下一页

根据 `data.total` 和请求时的 `page_size` 计算最后一页，再依次增加 `page`。

## 错误响应

```json
{
  "code": "ErrParamInvalid",
  "msg": "page_size is invalid",
  "data": null
}
```

### 常见 HTTP 错误

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

* - HTTP 状态码
  - 错误代码
  - 常见原因
  - 建议操作
* - `400`
  - `ErrParamInvalid`
  - `model_id`、`page` 或 `page_size` 无效。
  - 修正分页参数后重试。
* - `401`
  - `ErrUnauthorized`
  - API Key 无效或已失效。
  - 检查 API Key。
* - `403`
  - `ErrForbidden`
  - 调用者没有读取来源的权限。
  - 检查工作区和对象授权。
* - `404`
  - `ErrNotFound`
  - 知识库不存在或不可见。
  - 重新确认 `model_id`。
* - `500`
  - `ErrServer`
  - 服务未能查询来源。
  - 保留脱敏后的响应信息后重试。
```

## 后续操作

`legacy_backfill_required` 标记为需要补齐时，先[补齐历史数据源关系](backfill-legacy-data-sources.md)；否则可[更新数据源治理设置](update-data-source-governance.md)或[删除数据源](delete-data-source.md)。
