From 83eb8d0dd0fce60458c7991493631ff7e152e8a7 Mon Sep 17 00:00:00 2001 From: kplam Date: Sat, 1 Aug 2026 00:11:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20QMDSearch=20Agent?= =?UTF-8?q?=20Skill=20=E5=8C=85=E4=B8=8E=E4=B8=8B=E8=BD=BD=E5=85=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 skills/qmdsearch-agent(SKILL.md + references/api-examples.md),文档化 AI Agent 鉴权、文本/文件上传入库(异步轮询)与分层检索调用方式 - 打包 QMDSearch-Agent-Skill.zip 至 app/static/agent-skill/ - 后端新增 GET /agent-skill 免登录下载路由(随 ./app 卷挂载,restart 即生效) - 前端 API 说明页新增「AI Agent Skill 下载」卡片,链接至 /agent-skill --- app/main.py | 18 ++ .../agent-skill/QMDSearch-Agent-Skill.zip | Bin 0 -> 5892 bytes frontend/src/views/ApiDocs.vue | 28 ++- skills/qmdsearch-agent/SKILL.md | 145 +++++++++++++++ .../references/api-examples.md | 170 ++++++++++++++++++ 5 files changed, 360 insertions(+), 1 deletion(-) create mode 100644 app/static/agent-skill/QMDSearch-Agent-Skill.zip create mode 100644 skills/qmdsearch-agent/SKILL.md create mode 100644 skills/qmdsearch-agent/references/api-examples.md diff --git a/app/main.py b/app/main.py index e58ddce..749c7e7 100644 --- a/app/main.py +++ b/app/main.py @@ -144,3 +144,21 @@ async def admin_spa(rest: str): return FileResponse(file_path) # SPA 客户端路由兜底 return FileResponse(spa_dir / "index.html", media_type="text/html") + + +# AI Agent Skill 压缩包(用于 Agent 上传文档与检索),随 ./app 卷挂载,restart 即生效 +_AGENT_SKILL_ZIP = _STATIC_DIR / "agent-skill" / "QMDSearch-Agent-Skill.zip" + + +@app.get("/agent-skill", include_in_schema=False) +async def agent_skill_download() -> FileResponse | JSONResponse: + """下载 AI Agent Skill 压缩包(qmdsearch-agent skill,含 SKILL.md 与示例)""" + if not _AGENT_SKILL_ZIP.is_file(): + return JSONResponse( + status_code=404, content={"code": 1002, "message": "Skill 包不存在"} + ) + return FileResponse( + _AGENT_SKILL_ZIP, + media_type="application/zip", + filename="QMDSearch-Agent-Skill.zip", + ) diff --git a/app/static/agent-skill/QMDSearch-Agent-Skill.zip b/app/static/agent-skill/QMDSearch-Agent-Skill.zip new file mode 100644 index 0000000000000000000000000000000000000000..d3e2ba3aa7b209a3a3241992b9cf3dfee6e0618d GIT binary patch literal 5892 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 literal 0 HcmV?d00001 diff --git a/frontend/src/views/ApiDocs.vue b/frontend/src/views/ApiDocs.vue index cb625bd..b94948c 100644 --- a/frontend/src/views/ApiDocs.vue +++ b/frontend/src/views/ApiDocs.vue @@ -1,6 +1,6 @@