# NER API 接口文档 Base URL: `http://localhost:4000` --- ## GET /health 健康检查。 **响应** ```json {"status": "ok"} ``` --- ## POST /extract 从文本中抽取命名实体。 **请求体** | 字段 | 类型 | 必填 | 默认值 | 说明 | |-------------|----------------|------|--------|------------------------------| | `text` | string | 是 | — | 待抽取的文本 | | `labels` | array[string] | 是 | — | 期望识别的实体类型列表 | | `threshold` | float [0, 1] | 否 | `0.5` | 置信度阈值,低于此值的结果过滤掉 | **请求示例** ```json { "text": "Elon Musk founded SpaceX in Hawthorne, California.", "labels": ["person", "organization", "location"], "threshold": 0.5 } ``` **响应体** | 字段 | 类型 | 说明 | |--------------------|---------------|------------------------------| | `entities` | array[Entity] | 抽取到的实体列表 | | `entities[].text` | string | 实体原文 | | `entities[].label` | string | 实体类型(与请求 labels 对应)| | `entities[].score` | float | 置信度分数,范围 [0, 1] | | `entities[].start` | int | 实体在原文中的起始字符偏移 | | `entities[].end` | int | 实体在原文中的结束字符偏移 | **响应示例** ```json { "entities": [ {"text": "Elon Musk", "label": "person", "score": 0.98, "start": 0, "end": 9 }, {"text": "SpaceX", "label": "organization", "score": 0.97, "start": 18, "end": 24}, {"text": "Hawthorne", "label": "location", "score": 0.91, "start": 28, "end": 37}, {"text": "California", "label": "location", "score": 0.95, "start": 39, "end": 49} ] } ``` **错误码** | HTTP 状态码 | 说明 | |-------------|-------------------------------------------| | `200` | 成功,`entities` 为空列表表示未抽取到结果 | | `422` | 请求参数校验失败(如 threshold 超出范围) | --- ## 说明 - 模型支持 **zero-shot** 识别,`labels` 可传入任意自定义类型,无需预定义。 - 服务启动时加载一次模型,所有请求复用同一实例。 - 在线文档(服务运行时可访问): - Swagger UI:`http://localhost:4000/docs` - ReDoc:`http://localhost:4000/redoc`