284 lines
7.3 KiB
Markdown
284 lines
7.3 KiB
Markdown
# 文档搜索API使用说明
|
||
|
||
## 概述
|
||
|
||
本文档介绍了文档搜索API接口,该接口提供文档检索、知识库列表查询和文档下载功能。
|
||
|
||
**基础URL**: `https://ai.ctc-zc.com:8100/api`
|
||
|
||
**认证方式**: Bearer Token(除健康检查接口外)
|
||
```
|
||
Authorization: Bearer <your-api-key>
|
||
```
|
||
|
||
## API端点
|
||
|
||
### 1. 搜索文档
|
||
|
||
**接口地址**: `POST /document_search/search`
|
||
|
||
**需要认证**: 是
|
||
|
||
**请求头**:
|
||
```
|
||
Content-Type: application/json
|
||
Authorization: Bearer <api-key>
|
||
```
|
||
|
||
**请求体参数**:
|
||
|
||
| 参数名 | 类型 | 必填 | 默认值 | 描述 |
|
||
|--------|------|------|--------|------|
|
||
| query | string | 是 | - | 搜索查询词 |
|
||
| classification_ids | array[int] | 否 | [] | 分类ID列表 |
|
||
| kb_names | array[string] | 否 | ["mu_34_1740625285897"] | 知识库名称列表,支持多个知识库 |
|
||
| max_documents | integer | 否 | 6 | 最大返回文档数 (1-20) |
|
||
|
||
**响应格式**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "success",
|
||
"data": {
|
||
"documents": [
|
||
{
|
||
"id": 371633,
|
||
"kb_name": "mu_34_1740625285897",
|
||
"file_name": "example.pdf",
|
||
"file_ext": ".pdf",
|
||
"file_version": 1,
|
||
"document_loader": "PyPDFLoader",
|
||
"text_splitter": "MarkdownHeaderTextSplitter",
|
||
"create_time": "2025-01-01T00:00:00",
|
||
"file_mtime": "2025-01-01T00:00:00",
|
||
"file_size": 1024000,
|
||
"custom_docs": false,
|
||
"docs_count": 50,
|
||
"character_count": 100000,
|
||
"md_filename": "example.md",
|
||
"md_content": "文档的Markdown内容...",
|
||
"classification_ids": [1, 2],
|
||
"url": "https://ai.ctc-zc.com:8100/api/document_search/download_doc?knowledge_base_name=mu_34_1740625285897&file_name=example.pdf"
|
||
}
|
||
],
|
||
"total_count": 15,
|
||
"query": "混凝土材料性能",
|
||
"classification_ids": [1, 2, 3],
|
||
"kb_names": ["mu_34_1740625285897", "mu_34_1740625318986"]
|
||
}
|
||
}
|
||
```
|
||
|
||
**响应字段说明**:
|
||
|
||
| 字段名 | 类型 | 描述 |
|
||
|--------|------|------|
|
||
| code | integer | 响应状态码 |
|
||
| msg | string | 响应消息 |
|
||
| data | object | 响应数据 |
|
||
| data.documents | array | 文档列表(直接返回 kb_file 对象) |
|
||
| data.total_count | integer | 文档总数 |
|
||
| data.query | string | 原始查询词 |
|
||
| data.classification_ids | array[int] | 使用的分类IDs |
|
||
| data.kb_names | array[string] | 使用的知识库名称列表 |
|
||
|
||
**Document (kb_file) 字段说明**:
|
||
|
||
| 字段名 | 类型 | 描述 |
|
||
|--------|------|------|
|
||
| id | integer | 文档ID |
|
||
| kb_name | string | 知识库名称 |
|
||
| file_name | string | 原始文件名 |
|
||
| file_ext | string | 文件扩展名 |
|
||
| file_version | integer | 文件版本 |
|
||
| document_loader | string | 文档加载器名称 |
|
||
| text_splitter | string | 文本分割器名称 |
|
||
| create_time | datetime | 创建时间 |
|
||
| file_mtime | datetime | 文件修改时间 |
|
||
| file_size | integer | 文件大小(字节) |
|
||
| custom_docs | boolean | 是否自定义文档 |
|
||
| docs_count | integer | 文档块数量 |
|
||
| character_count | integer | 字符总数 |
|
||
| md_filename | string | Markdown文件名 |
|
||
| md_content | string | Markdown内容 |
|
||
| classification_ids | array[int] | 分类ID列表 |
|
||
| url | string | 下载URL(自动拼接) |
|
||
|
||
---
|
||
|
||
### 2. 下载知识库文档
|
||
|
||
**接口地址**: `GET /document_search/download_doc`
|
||
|
||
**需要认证**: 是
|
||
|
||
**请求头**:
|
||
```
|
||
Authorization: Bearer <api-key>
|
||
```
|
||
|
||
**查询参数**:
|
||
|
||
| 参数名 | 类型 | 必填 | 默认值 | 描述 |
|
||
|--------|------|------|--------|------|
|
||
| knowledge_base_name | string | 是 | - | 知识库名称 |
|
||
| file_name | string | 是 | - | 文件名称(可以是原始文件名或Markdown文件名) |
|
||
| preview | boolean | 否 | false | 是否在线预览(true: 浏览器内预览;false: 下载) |
|
||
|
||
**功能说明**:
|
||
- 支持通过原始文件名(如 `example.pdf`)或 Markdown 文件名(如 `example.md`)下载
|
||
- 如果直接查找失败,系统会自动从数据库查询文件详情并尝试使用原始文件名
|
||
- 确保文件路径安全,防止目录遍历攻击
|
||
|
||
**请求示例**:
|
||
```
|
||
GET /document_search/download_doc?knowledge_base_name=mu_34_1740625285897&file_name=example.pdf&preview=false
|
||
```
|
||
|
||
**响应**:
|
||
- 成功: 返回文件流(FileResponse)
|
||
- 失败: 返回JSON错误信息
|
||
|
||
**错误响应示例**:
|
||
```json
|
||
{
|
||
"detail": "文件不存在: example.pdf"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 3. 获取知识库列表
|
||
|
||
**接口地址**: `GET /document_search/list_knowledge_bases`
|
||
|
||
**需要认证**: 是
|
||
|
||
**请求头**:
|
||
```
|
||
Authorization: Bearer <api-key>
|
||
```
|
||
|
||
**功能说明**:
|
||
- 只返回在ID映射关系中存在的知识库(分类ID 1-7对应的知识库)
|
||
- 过滤掉其他无效的知识库
|
||
- 返回有效的kb_name列表供参考
|
||
|
||
**响应格式**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "success",
|
||
"data": {
|
||
"knowledge_bases": [
|
||
{
|
||
"id": 1,
|
||
"kb_name": "mu_34_1740625285897",
|
||
"ch_name": "材料分类1",
|
||
"kb_info": "知识库描述",
|
||
"customer_id": 34,
|
||
"classification_type": 0,
|
||
"create_time": "2025-01-01T00:00:00",
|
||
"file_count": 100
|
||
}
|
||
],
|
||
"total_count": 7,
|
||
"valid_kb_names": [
|
||
"mu_34_1740625285897",
|
||
"mu_34_1740625318986",
|
||
"mu_34_1740625346474",
|
||
"mu_34_1740625303475",
|
||
"mu_34_1740625365079",
|
||
"mu_34_1740625355308",
|
||
"mu_34_1740625376621"
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**响应字段说明**:
|
||
|
||
| 字段名 | 类型 | 描述 |
|
||
|--------|------|------|
|
||
| code | integer | 响应状态码 |
|
||
| msg | string | 响应消息 |
|
||
| data | object | 响应数据 |
|
||
| data.knowledge_bases | array | 知识库列表 |
|
||
| data.total_count | integer | 知识库总数 |
|
||
| data.valid_kb_names | array[string] | 有效的知识库名称列表 |
|
||
|
||
**KnowledgeBase 字段说明**:
|
||
|
||
| 字段名 | 类型 | 描述 |
|
||
|--------|------|------|
|
||
| id | integer | 知识库ID |
|
||
| kb_name | string | 知识库名称 |
|
||
| ch_name | string | 中文名称 |
|
||
| kb_info | string | 知识库描述 |
|
||
| customer_id | integer | 客户ID |
|
||
| classification_type | integer | 分类类型 |
|
||
| create_time | string | 创建时间(ISO格式) |
|
||
| file_count | integer | 文件数量 |
|
||
|
||
---
|
||
|
||
### 4. 健康检查
|
||
|
||
**接口地址**: `GET /document_search/health`
|
||
|
||
**需要认证**: 否(公开访问)
|
||
|
||
**响应格式**:
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "success",
|
||
"data": {
|
||
"status": "healthy",
|
||
"service": "document_search_api"
|
||
}
|
||
}
|
||
```
|
||
```
|
||
|
||
## 错误处理
|
||
|
||
API可能返回以下错误:
|
||
|
||
### HTTP状态码
|
||
|
||
| 状态码 | 说明 |
|
||
|--------|------|
|
||
| 200 | 请求成功 |
|
||
| 400 | 请求参数格式错误 |
|
||
| 401 | 缺少认证信息或认证格式错误 |
|
||
| 403 | API密钥无效或非法访问 |
|
||
| 404 | 资源不存在(知识库或文件未找到) |
|
||
| 500 | 服务器内部错误 |
|
||
|
||
### 错误响应格式
|
||
|
||
```json
|
||
{
|
||
"detail": "错误描述信息"
|
||
}
|
||
```
|
||
|
||
### 常见错误信息
|
||
|
||
| 错误信息 | 说明 |
|
||
|---------|------|
|
||
| Missing authorization header | 缺少Authorization头 |
|
||
| Invalid authorization header format. Expected 'Bearer <api_key>' | Authorization头格式错误 |
|
||
| API key is required | API密钥为空 |
|
||
| Invalid API key for document search service | API密钥无效 |
|
||
| Don't attack me | 非法的知识库名称 |
|
||
| 未找到知识库 {name} | 知识库不存在 |
|
||
| 文件不存在: {filename} | 文件不存在 |
|
||
| 文档搜索失败: {error} | 搜索过程中发生错误 |
|
||
| 文件下载失败: {error} | 下载过程中发生错误 |
|
||
|