feat: 入库改为独立页面,更新 API 说明文档与 Agent skill
- 新增 Ingest.vue 独立入库页(文本/文件/批量 + 任务进度列表),移除入库 Drawer - 导航栏去掉「入库进度」,新增「文档入库」入口;知识库页「入库」跳转独立页 - API 说明页接口清单与后端对齐(补齐用户管理/上传批量/任务重试删除/reingest 等,修正鉴权标注) - 更新 qmdsearch-agent skill 与 api-examples(鉴权说明、会话 token、新端点示例)
This commit is contained in:
@@ -36,11 +36,32 @@ curl -s -X POST {BASE}/api/v1/documents/upload \
|
||||
curl -s {BASE}/api/v1/documents/tasks/<task_id>
|
||||
```
|
||||
|
||||
### 检索
|
||||
### 批量文件上传(202,逐文件建任务)
|
||||
|
||||
```bash
|
||||
curl -s -X POST {BASE}/api/v1/documents/upload-batch \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-F "files=@a.pdf" -F "files=@b.md"
|
||||
```
|
||||
|
||||
### 列出入库任务 / 重试 / 删除任务
|
||||
|
||||
```bash
|
||||
curl -s -H "Authorization: Bearer <token>" "{BASE}/api/v1/documents/tasks?limit=20"
|
||||
curl -s -X POST -H "Authorization: Bearer <token>" {BASE}/api/v1/documents/tasks/<task_id>/retry
|
||||
curl -s -X DELETE -H "Authorization: Bearer <token>" {BASE}/api/v1/documents/tasks/<task_id>
|
||||
```
|
||||
|
||||
### 重新摘要入库(读原文件 → 删旧 → 重跑)
|
||||
|
||||
```bash
|
||||
curl -s -X POST -H "Authorization: Bearer <token>" {BASE}/api/v1/documents/<doc_id>/reingest
|
||||
```
|
||||
|
||||
### 检索(免登录)
|
||||
|
||||
```bash
|
||||
curl -s -X POST {BASE}/api/v1/search \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"query":"如何配置 Redis 缓存","top_k":5,"summarize":false}'
|
||||
```
|
||||
@@ -120,6 +141,13 @@ class QMDSearchClient:
|
||||
headers=self._headers(), files=files, data=data, timeout=60)
|
||||
return self._ok(resp)["task_id"]
|
||||
|
||||
def upload_batch(self, paths: list[str]) -> dict:
|
||||
"""批量上传多个文件:返回 {tasks:[{filename,task_id}], failed:[{filename,error}]}"""
|
||||
files = [("files", open(p, "rb")) for p in paths]
|
||||
resp = requests.post(f"{self.base}/api/v1/documents/upload-batch",
|
||||
headers=self._headers(), files=files, timeout=60)
|
||||
return self._ok(resp)
|
||||
|
||||
# ---- 轮询 ----
|
||||
def wait_task(self, task_id: str) -> dict:
|
||||
deadline = time.time() + self.poll_timeout
|
||||
@@ -165,6 +193,6 @@ if __name__ == "__main__":
|
||||
|
||||
## 三、响应结构速记
|
||||
|
||||
- 文本 / 文件入库 `202` → `data = {task_id, status:"pending"[, saved_path]}`
|
||||
- 文本 / 文件 / 批量入库 `202` → `data = {task_id, status:"pending"[, saved_path]}`;批量返回 `{tasks, failed}`
|
||||
- 任务 `done` → `data.result = {document_id, summary:{l1_summary,l2_outline,l3_content_outline,level}, category, chunks_count, tags, category_confidence, deduplicated}`
|
||||
- 检索 → `data = {query, hits:[{text,doc_id,title,section_path,score,doc_summary}], routed_categories, fallback, extracted_info, summary?}`
|
||||
|
||||
Reference in New Issue
Block a user