back
loading skill details...
公司内部知识库—目录浏览与搜索,读全文或下载/预览;上传与归档;已存在文件用新版本与定稿更新(禁止覆盖),删除须确认;Open API 仅允许通过本仓库脚本执行。
---
name: cms-docdb
description: 公司内部知识库—目录浏览与搜索,读全文或下载/预览;上传与归档;已存在文件用新版本与定稿更新(禁止覆盖),删除须确认;Open API 仅允许通过本仓库脚本执行。
metadata:
skillcode: cms-docdb
github: https://github.com/liuyanhua1222/cms-docdb
dependencies:
- cms-auth-skills
openclaw:
requires:
bins:
- python3
- python
---
# cms-docdb — 索引
OpenClaw 技能 **`name`** 为 `cms-docdb`,与仓库目录名和 **`skillcode`** 保持一致。本技能用于访问公司内部知识库(康哲/玄关/德镁知识库)。
本文件提供能力边界与路由规则。详细说明见 `references/`,实际执行见 `scripts/`。
**当前版本**: 1.0.7
**接口版本**: 所有业务接口统一使用 `/open-api/*` 前缀,鉴权类型全部为 `appKey`。
**能力概览(5 块能力)**:
- `browse`:发现可用空间、获取个人空间 ID、浏览目录结构、查看最近上传
- `query`:搜索文件,找到文件后获取内容、下载链接或预览链接
- `upload`:新建文件——上传纯文本或物理文件到 **康哲/玄关/德镁知识库**(内部应用侧;仅用于新建)
- `delete`:删除指定文件(高风险,需用户确认)
- `manage`:重命名/移动文件;更新已有文件内容(版本管理);查看历史版本;版本定稿
## 适用范围与歧义排除(技能门控,强制)
- **本 skill 唯一指向**:通过 **appKey** 访问内部知识库应用所对接的 **document-database** 开放接口(路径形态 **`/open-api/document-database/*`**,OpenClaw **`name`:`cms-docdb`**;**`skillcode` / 技术代号**:**cms-docdb** / **document-database**)。**对用户与内部沟通常用说法**:**知识库**、**康哲知识库**、**玄关知识库**、**德镁知识库**、**在线知识库**及 **公司知识库**(同一类内部知识库应用的不同称呼/环境)。
- **明确不使用本 skill 的典型场景**(应改走对应产品能力或追问用户):**钉钉知识库/钉盘**、**企业微信微盘**、**飞书知识库/云文档**、**语雀**、**Notion**、**Confluence**、**SharePoint**、**石墨** 等。
- **OpenClaw 路由建议**:**只要提及「知识库」就触发本 skill**。
- **典型有效问法(内部真实话术)**:如「打开知识库」「打开公司在线知识库」「请查询知识库中某政策标题并总结」「请阅读知识库中某文件夹内的文件」「能读产品资料-慷彼申里的内容吗」等,均在本 skill 能力范围内(具体模块依动作是浏览、搜索还是读全文而定)。
统一规范:
- 鉴权依赖:`cms-auth-skills/SKILL.md`
- 运行日志:`.cms-log/log/cms-docdb/`
- 运行时状态:`.cms-log/state/cms-docdb/`
授权依赖:
- 需要鉴权时先读取 `cms-auth-skills/SKILL.md`
- 如果未安装,先安装依赖,再继续执行
输入完整性规则(强制):
1. 浏览目录必须提供 parentId(根目录传 0)或 projectId
2. 搜索文件必须提供关键词 + projectId(限定搜索范围,避免返回无关结果)
3. 上传文件必须提供文件名和内容(纯文本)或 resourceId(物理文件)
4. 删除/重命名/移动文件必须提供 fileId
5. 版本更新必须提供目标文件的 fileId(纯文本)或文件 id + projectId + resourceId(物理文件)
版本管理强制规则(最高优先级):
- **禁止直接覆盖已有文件内容**:对已存在文件的任何内容更新,必须通过版本管理接口保存为新版本,不得使用覆盖方式。直接覆盖无法溯源,违反本规则。
- **保存前必须判断文件是否已存在**:执行任何"保存/上传/更新"动作前,必须先通过 `searchFile` 或 `getChildFiles` 确认目标文件是否已存在。
- 若**不存在**:路由到 `upload` 模块走新建流程
- 若**已存在**:路由到 `manage` 模块走版本更新流程,禁止新建同名文件或覆盖
- **不得询问用户是否覆盖**:版本管理是默认且唯一的更新方式,无需向用户确认,直接执行版本更新。
建议工作流(简版):
1. 先读取 `SKILL.md`,确认能力边界和限制
2. 根据用户意图定位模块,读取对应 `references/<module>/README.md`
3. 确认具体动作后,在 `references/<module>/README.md` 中查看脚本清单、入参与运行方式
4. **保存/上传前必须执行存在性检查**:通过 `search.py` 或 `browse.py` 确认目标文件是否已存在。已存在则切换为版本更新流程(manage 模块),不存在才新建(upload 模块)
5. 补齐用户必需输入
6. 执行对应脚本
脚本使用规则(强制):
1. **每个动作必须有对应脚本**:不允许"暂无脚本"
2. **脚本可独立执行**:所有 `scripts/` 下的脚本均可脱离 AI Agent 直接在命令行运行
3. **先读模块说明再执行**:执行脚本前,必须先阅读对应模块的 `references/<module>/README.md`
4. **鉴权一致**:涉及 appKey 时,统一依赖 `cms-auth-skills`
意图路由与加载规则(强制):
1. **先路由再加载**:必须先判定模块,再打开该模块的 `references/<module>/README.md`
2. **先读说明再调用**:在执行前,必须加载对应模块说明
3. **脚本必须执行**:所有接口调用必须通过脚本执行,不允许跳过
4. **不猜测**:若意图不明确,必须追问澄清
5. **歧义门控**:**只要提及「知识库」就触发本 skill**
宪章(必须遵守):
1. **只读索引**:`SKILL.md` 只描述"能做什么"和"去哪里读",不写具体接口参数
2. **按需加载**:默认只读 `SKILL.md` + `cms-auth-skills/SKILL.md`,只有触发某模块时才加载该模块的 `references` 与 `scripts`
3. **对外克制**:对用户只输出"可用能力、必要输入、结果链接或摘要",不暴露鉴权细节与内部字段
4. **素材优先级**:用户给了文件或 URL,必须先提取内容再确认,确认后才触发生成或写入
5. **生产约束**:仅允许生产域名与生产协议,不引入任何测试地址
6. **危险操作**:删除文件等高风险操作应礼貌确认,不直接执行
7. **脚本语言限制**:调用 Open API 的业务脚本必须使用 Python
8. **重试策略**:出错时间隔 1 秒、最多重试 3 次,超过后终止并上报
9. **禁止无限重试**:严禁无限循环重试
10. **输出规范**:脚本输出优先按 `resultCode`、`resultMsg`、`data` 读取,对用户输出最小必要信息:摘要/必要输入/链接,不回显完整 JSON 响应
11. **直接执行**:所有脚本必须可直接通过 Python 执行,不依赖包装脚本
## 触发配置
### 意图触发词
下表为**常见**说法,**非穷举**。**只要提及「知识库」就触发本 skill**。
| 模块 | 触发词模式 |
|-----|-----------|
| `browse` | "知识库"、"打开知识库"、"打开公司在线知识库"、"打开康哲/玄关/德镁知识库"、"浏览文件夹"、"查看目录"、"知识库里有什么"、"目录结构"、"空间列表"、"项目列表" |
| `query` | "查询知识库中的…"、"搜索知识库里的…"、"搜索xxx"、"查询xxx"、"查找xxx"、"检索xxx"、"帮我找xxx"、"搜索一下xxx"、"读取xxx"、"阅读xxx"、"查看xxx内容"、"打开文件"、"总结文件"、"提取信息" |
| `upload` | "上传到康哲/玄关/德镁知识库"、"保存到康哲/玄关/德镁知识库"、"上传到知识库"、"保存到知识库"、"归档文件"、"新建文件" |
| `delete` | "删除文件"、"移除文件"、"删掉xxx" |
| `manage` | "重命名xxx"、"移动文件"、"更新内容"、"版本管理"、"历史版本"、"定稿" |
**意图标签与模块目录(强制)**:`intent-matcher.py` 输出的 `data.intent` 中,`browse`、`query`、`upload`、`delete`、`manage` 与同名 `references/<module>/`、`scripts/<module>/` 一致。`read` 仅为意图分类标签(匹配「读取/总结文件」等话术),**不存在** `references/read/`;一旦 `intent` 为 `read`,路由与加载必须与 **`query`** 相同,使用 `references/query/` 与 `scripts/query/`。
### 参数提取规则
1. **关键词提取**:自动识别引号、括号内内容及"xxx文件"格式
2. **路径解析**:支持"产品资料-慷彼申"格式的层级路径
3. **指代处理**:理解"这个文件"、"它"等指代,自动关联上下文
4. **数字提取**:识别版本号、页码等数字参数
### 上下文管理
- **会话历史**:保留最近10条对话记录
- **当前目录**:记录用户正在浏览的目录(id + name)
- **最后文件**:记录用户最后操作的文件(id + name)
- **当前项目**:记录用户当前操作的项目(id + name)
### 多轮对话支持
| 场景 | 示例 | 处理方式 |
|-----|------|---------|
| 指代解析 | "读取这个文件" | 自动补全最后操作的文件ID |
| 路径继承 | "查看上一级" | 使用当前目录上下文 |
| 连续操作 | "搜索xxx" → "读取它" → "保存新版本" | 上下文链式传递 |
### 触发脚本
| 脚本 | 功能 |
|-----|------|
| `intent-matcher.py` | 意图识别和关键词提取 |
| `context-manager.py` | 上下文管理和状态维护 |
| `parameter-extractor.py` | 参数提取和缺失提示生成 |
### 触发流程图
```text
用户输入
↓
意图识别 (intent-matcher.py)
↓
参数提取 (parameter-extractor.py)
↓
上下文补全 (context-manager.py)
↓
┌──────────────────────┐
│ 参数是否完整? │
└──────────────────────┘
↓
├─ 是 → 路由到对应模块
│ ↓
│ 执行脚本
│ ↓
│ 更新上下文
│ ↓
│ 返回结果
│
└─ 否 → 生成追问提示
↓
返回追问
```
模块路由与能力索引:
| 用户意图 | 模块 | 能力摘要 | 模块说明 | 脚本 |
|---|---|---|---|---|
| "打开公司在线知识库"、"打开康哲/玄关/德镁知识库"、"浏览一下xxx文件夹"、"知识库里有什么"、"查看某个目录的内容"、"目录结构" | `browse` | 发现空间、浏览目录结构、查看最近上传 | `./references/browse/README.md` | `./scripts/browse/browse.py` |
| "查询知识库中的…"、"搜索知识库里的…"、"搜索xxx"、"查询xxx"、"查找xxx"、"看看这个文件的内容"、"帮我读取xxx文件"、"帮我总结一下xxx文件" | `query` | 搜索文件并读取内容、下载链接或预览链接 | `./references/query/README.md` | `./scripts/query/search.py` |
| "存到康哲/玄关/德镁知识库"、"上传到知识库"、"上传xxx到知识库"、"把这份文档归档"、"帮我保存这个文件" | `upload` | 新建文件到内部知识库(仅用于新建,已存在则路由到 manage 走版本更新) | `./references/upload/README.md` | `./scripts/upload/upload-content.py` |
| "帮我把xxx删了"、"删除xxx文件"、"把xxx文件移除" | `delete` | 删除指定文件(高风险,需确认) | `./references/delete/README.md` | `./scripts/delete/delete-file.py` |
| "帮我把xxx重命名"、"把xxx改名为yyy"、"把这个文件移到xxx文件夹"、"更新一下知识库里的xxx"、"把最新内容存进去"、"这个文档有更新,存一下"、"查看xxx文件的历史版本"、"把这个版本定稿" | `manage` | 重命名/移动文件;更新已有文件内容(版本管理);查看历史版本;版本定稿 | `./references/manage/README.md` | 见 `./references/manage/README.md`(按意图选择对应脚本) |
能力树:
```text
cms-docdb/
├── SKILL.md
├── references/
│ ├── browse/README.md
│ ├── query/README.md
│ ├── upload/README.md
│ ├── delete/README.md
│ └── manage/README.md
└── scripts/
├── browse/
│ ├── browse.py
│ ├── get-level1-folders.py
│ ├── get-personal-project-id.py
│ ├── get-project-list.py
│ ├── get-recent-files.py
│ └── get-uploadable-list.py
├── query/
│ ├── search.py
│ ├── get-full-content.py
│ ├── get-download-info.py
│ ├── download-file.py
│ ├── get-file-content.py
│ └── batch-get-content.py
├── upload/
│ ├── upload-content.py
│ ├── save-file-by-path.py
│ ├── save-file-by-parent-id.py
│ ├── upload-whole-file.py
│ ├── check-slice.py
│ ├── register-slice.py
│ ├── merge-resource.py
│ └── get-file-download-info.py
├── delete/
│ └── delete-file.py
└── manage/
├── update-file-name.py
├── move-file.py
├── update-file-property.py
├── update-file-version.py
├── get-version-list.py
├── get-last-version.py
└── finalize-version.py
```
don't have the plugin yet? install it then click "run inline in claude" again.