cms-docdb — 索引
OpenClaw 技能 name 为 cms-docdb,与仓库目录名和 skillcode 保持一致。本技能用于访问公司内部知识库(康哲/玄关/德镁知识库)。
本文件提供能力边界与路由规则。详细说明见 references/,实际执行见 scripts/。
当前版本: 1.1.0
接口版本: 所有业务接口统一使用 /open-api/* 前缀,鉴权类型全部为 appKey。
能力概览(6 块能力):
browse:发现可用空间、获取个人空间 ID、浏览目录结构、查看最近上传与全空间上传记录query:搜索文件,找到文件后获取内容、下载链接或预览链接upload:新建文件或文件夹——上传纯文本/物理文件、显式创建目录到 康哲/玄关/德镁知识库(内部应用侧;仅用于新建)delete:删除指定文件(高风险,需用户确认)manage:重命名/移动文件;更新已有文件内容(版本管理);查看历史版本;版本定稿share:将文件/文件夹授权分享给指定员工;可撤销分享(默认发钉钉通知;默认权限:分享+在线预览+查看)
适用范围与歧义排除(技能门控,强制)
- 本 skill 唯一指向:通过 appKey 访问内部知识库应用所对接的 document-database 开放接口(路径形态
/open-api/document-database/*,OpenClawname: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 - 如果未安装,先安装依赖,再继续执行
输入完整性规则(强制):
- 浏览目录必须提供 parentId(根目录传 0)或 projectId
- 搜索文件必须提供关键词 + projectId(限定搜索范围,避免返回无关结果)
- 上传文件必须提供文件名和内容(纯文本)或 resourceId(物理文件)
- 删除/重命名/移动文件必须提供 fileId
- 版本更新必须提供目标文件的 fileId(纯文本)或文件 id + projectId + resourceId(物理文件)
版本管理强制规则(最高优先级):
- 禁止直接覆盖已有文件内容:对已存在文件的任何内容更新,必须通过版本管理接口保存为新版本,不得使用覆盖方式。直接覆盖无法溯源,违反本规则。
- 保存前必须判断文件是否已存在:执行任何"保存/上传/更新"动作前,必须先通过
searchFile或getChildFiles确认目标文件是否已存在。- 若不存在:路由到
upload模块走新建流程 - 若已存在:路由到
manage模块走版本更新流程,禁止新建同名文件或覆盖
- 若不存在:路由到
- 不得询问用户是否覆盖:版本管理是默认且唯一的更新方式,无需向用户确认,直接执行版本更新。
建议工作流(简版):
- 先读取
SKILL.md,确认能力边界和限制 - 根据用户意图定位模块,读取对应
references/<module>/README.md - 确认具体动作后,在
references/<module>/README.md中查看脚本清单、入参与运行方式 - 保存/上传前必须执行存在性检查:通过
search.py或browse.py确认目标文件是否已存在。已存在则切换为版本更新流程(manage 模块),不存在才新建(upload 模块) - 补齐用户必需输入
- 执行对应脚本
脚本使用规则(强制):
- 每个动作必须有对应脚本:不允许"暂无脚本"
- 脚本可独立执行:所有
scripts/下的脚本均可脱离 AI Agent 直接在命令行运行 - 先读模块说明再执行:执行脚本前,必须先阅读对应模块的
references/<module>/README.md - 鉴权一致:涉及 appKey 时,统一依赖
cms-auth-skills
意图路由与加载规则(强制):
- 先路由再加载:必须先判定模块,再打开该模块的
references/<module>/README.md - 先读说明再调用:在执行前,必须加载对应模块说明
- 脚本必须执行:所有接口调用必须通过脚本执行,不允许跳过
- 不猜测:若意图不明确,必须追问澄清
- 歧义门控:只要提及「知识库」就触发本 skill
宪章(必须遵守):
- 只读索引:
SKILL.md只描述"能做什么"和"去哪里读",不写具体接口参数 - 按需加载:默认只读
SKILL.md+cms-auth-skills/SKILL.md,只有触发某模块时才加载该模块的references与scripts - 对外克制:对用户只输出"可用能力、必要输入、结果链接或摘要",不暴露鉴权细节与内部字段
- 素材优先级:用户给了文件或 URL,必须先提取内容再确认,确认后才触发生成或写入
- 生产约束:仅允许生产域名与生产协议,不引入任何测试地址
- 危险操作:删除文件等高风险操作应礼貌确认,不直接执行
- 脚本语言限制:调用 Open API 的业务脚本必须使用 Python
- 重试策略:出错时间隔 1 秒、最多重试 3 次,超过后终止并上报
- 禁止无限重试:严禁无限循环重试
- 输出规范:脚本输出优先按
resultCode、resultMsg、data读取,对用户输出最小必要信息:摘要/必要输入/链接,不回显完整 JSON 响应 - 直接执行:所有脚本必须可直接通过 Python 执行,不依赖包装脚本
触发配置
意图触发词
下表为常见说法,非穷举。只要提及「知识库」就触发本 skill。
| 模块 | 触发词模式 |
|---|---|
browse |
"知识库"、"打开知识库"、"打开公司在线知识库"、"打开康哲/玄关/德镁知识库"、"浏览文件夹"、"查看目录"、"知识库里有什么"、"目录结构"、"空间列表"、"项目列表"、"上传记录"、"最近上传了什么" |
query |
"查询知识库中的…"、"搜索知识库里的…"、"搜索xxx"、"查询xxx"、"查找xxx"、"检索xxx"、"帮我找xxx"、"搜索一下xxx"、"读取xxx"、"阅读xxx"、"查看xxx内容"、"打开文件"、"总结文件"、"提取信息" |
upload |
"上传到康哲/玄关/德镁知识库"、"保存到康哲/玄关/德镁知识库"、"上传到知识库"、"保存到知识库"、"归档文件"、"新建文件"、"创建文件夹"、"新建文件夹"、"建目录" |
delete |
"删除文件"、"移除文件"、"删掉xxx" |
manage |
"重命名xxx"、"移动文件"、"更新内容"、"版本管理"、"历史版本"、"定稿" |
share |
"分享文件给xxx"、"把这个文件分享给xxx"、"授权给xxx看"、"给xxx开权限"、"协同分享"、"分享协作"、"撤销分享"、"取消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/。
参数提取规则
- 关键词提取:自动识别引号、括号内内容及"xxx文件"格式
- 路径解析:支持"产品资料-慷彼申"格式的层级路径
- 指代处理:理解"这个文件"、"它"等指代,自动关联上下文
- 数字提取:识别版本号、页码等数字参数
上下文管理
- 会话历史:保留最近10条对话记录
- 当前目录:记录用户正在浏览的目录(id + name)
- 最后文件:记录用户最后操作的文件(id + name)
- 当前项目:记录用户当前操作的项目(id + name)
多轮对话支持
| 场景 | 示例 | 处理方式 |
|---|---|---|
| 指代解析 | "读取这个文件" | 自动补全最后操作的文件ID |
| 路径继承 | "查看上一级" | 使用当前目录上下文 |
| 连续操作 | "搜索xxx" → "读取它" → "保存新版本" | 上下文链式传递 |
触发脚本
| 脚本 | 功能 |
|---|---|
intent-matcher.py |
意图识别和关键词提取 |
context-manager.py |
上下文管理和状态维护 |
parameter-extractor.py |
参数提取和缺失提示生成 |
触发流程图
用户输入
↓
意图识别 (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(按意图选择对应脚本) |
| "把这个文件分享给张三"、"授权给李四预览"、"给王五开查看权限"、"协同分享这个文件夹"、"取消张三的分享" | share |
授权/撤销分享(按员工 empId) | ./references/share/README.md |
./scripts/share/upsert-file-share-grants.py 等 |
能力树:
cms-docdb/
├── SKILL.md
├── references/
│ ├── browse/README.md
│ ├── query/README.md
│ ├── upload/README.md
│ ├── delete/README.md
│ ├── manage/README.md
│ └── share/README.md
└── scripts/
├── browse/
│ ├── browse.py
│ ├── get-level1-folders.py
│ ├── get-personal-project-id.py
│ ├── get-project-list.py
│ ├── get-recent-files.py
│ ├── get-my-upload-records.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
│ ├── create-folder.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
└── share/
├── search-emp-by-name.py
├── get-my-share-permissions.py
├── upsert-file-share-grants.py
├── get-file-shares.py
├── get-share-url.py
└── revoke-file-share-grants.py
文档对齐:Open API 契约以 dev-guide/02.产品业务AI文档/知识库/(v2.3+)为准;新增 1.15 getMyUploadRecords、1.9 createFolder、6.2.1 revokeFileShareGrants 均已提供对应脚本。
