Skill 清单
架构总览
Skill / Tool 汇总
| 层级 | 名称 | 描述 | 状态 |
|---|---|---|---|
| A | feishu_wiki Skill | 飞书知识库 AI 对话技能 | 🔲 待开发 |
| B | search_wiki | 语义检索知识库内容(本地向量 + 飞书搜索) | 🔲 待开发 |
| B | list_wiki_nodes | 浏览知识空间和节点目录 | 🔲 待开发 |
| B | create_wiki_page | 在知识库中创建新页面 | 🔲 待开发 |
| B | get_wiki_node_info | 获取节点详细信息 | 🔲 待开发 |
A 层 — Skill
feishu_wiki
AI 对话入口,通过 SKILL.md 场景化组织,将用户自然语言意图路由到 B 层 Tool。
典型意图:
| 用户意图 | 路由 Tool |
|---|---|
| "帮我查下知识库里关于 XX 的内容" | search_wiki |
| "看看产品知识库的目录结构" | list_wiki_nodes |
| "在运营空间下创建一篇 XX 文档" | create_wiki_page |
| "这个文档在哪个空间?" | get_wiki_node_info |
B 层 — Python Tool 清单
公共行为
- 飞书
tenant_access_token/user_access_token鉴权 - 权限过滤:返回前过滤无权访问的空间/节点
space_id/node_token支持从飞书链接中解析- 错误时返回可读错误说明,不抛异常
- 分页自动处理(page_size 上限 50)
1. search_wiki — 语义检索
| 参数 | 必填 | 说明 |
|---|---|---|
query | 是 | 用户的自然语言查询(最多 50 字符) |
space_id | 否 | 限定在某个知识空间内检索 |
scope | 否 | company(公开空间)/ department(本部门)/ all(老板全量) |
检索策略: 优先走 Qdrant 语义检索(知识库定期同步到向量索引),兜底走飞书原生搜索 API。
返回内容: 匹配的 Wiki 页面列表(标题、相关段落摘要、链接)
底层 API:
| 方法 | 路径 | 权限 Scope |
|---|---|---|
| POST | /wiki/v2/nodes/search | wiki:wiki:readonly |
限制:仅支持
user_access_token;query最多 50 字符;page_size范围 1–50,默认 20。
2. list_wiki_nodes — 目录浏览
| 参数 | 必填 | 说明 |
|---|---|---|
space_id | 否 | 知识空间 ID,不填则列出所有空间 |
parent_node_token | 否 | 父节点 token,不填则列出空间根节点 |
max_depth | 否(默认 1) | 展示深度,最大 3 |
返回内容: 节点列表(标题、类型、链接、子节点数)
底层 API:
| 方法 | 路径 | 权限 Scope |
|---|---|---|
| GET | /wiki/v2/spaces | wiki:space:retrieve / wiki:wiki:readonly |
| GET | /wiki/v2/spaces/:space_id | wiki:space:read / wiki:wiki:readonly |
| GET | /wiki/v2/spaces/:space_id/nodes | wiki:node:retrieve / wiki:wiki:readonly |
个人知识库的
space_id可传"my_library";page_size最大 50。
3. create_wiki_page — 创建页面
| 参数 | 必填 | 说明 |
|---|---|---|
space_id | 是 | 目标知识空间 ID |
parent_node_token | 否 | 父节点 token,不填则创建在空间根目录 |
title | 是 | 页面标题 |
content | 是 | 页面内容(Markdown,内部转为 docx block) |
写入前确认: Tool 返回预览(标题 + 目标位置),AI 展示给用户确认后执行。
返回内容: Wiki 页面链接 + node_token
底层 API:
| 方法 | 路径 | 权限 Scope |
|---|---|---|
| POST | /wiki/v2/spaces/:space_id/nodes | wiki:node:create / wiki:wiki |
obj_type支持:docx、sheet、mindnote、bitable、slides(不支持file);node_type:origin(原始)/shortcut(快捷方式)。
4. get_wiki_node_info — 获取节点详情
| 参数 | 必填 | 说明 |
|---|---|---|
token | 是 | 节点 token 或飞书文档链接 |
obj_type | 否 | 文档类型(doc/docx/sheet/mindnote/bitable/file/slides/wiki) |
返回内容: 节点所属空间、父节点、标题、文档类型、创建/编辑时间
底层 API:
| 方法 | 路径 | 权限 Scope |
|---|---|---|
| GET | /wiki/v2/spaces/get_node | wiki:node:read / wiki:wiki:readonly |
响应字段:
space_id、node_token、obj_token、obj_type、parent_node_token、node_type(origin/shortcut)、has_child、title、时间戳。
C 层 — 系统能力
| 能力 | 说明 | 状态 |
|---|---|---|
| 权限过滤 | 角色 × 知识空间可见范围,按 scope 裁剪结果 | 🔲 待开发 |
| 向量索引维护 | 知识库内容定期同步到 Qdrant(复用 Embedder) | 🔲 待开发 |
| 写入确认 | 创建页面操作二次确认,防止误写 | 🔲 待开发 |
| Token 自动刷新 | 复用飞书 HTTP 客户端,自动续期 | ✅ 复用现有 |
复用的现有能力
| 能力 | 本场景用途 | 来源模块 | 状态 |
|---|---|---|---|
| Qdrant 向量库 | 知识库语义检索 | scripts/memory/searcher.py | ✅ 已实现 |
| Embedder | 知识库内容向量化 | scripts/memory/embedder.py | ✅ 已实现 |
| 飞书 HTTP 客户端 | API 鉴权 + Token 刷新 | scripts/feishu_bot.py | ✅ 已实现 |
| PersonIndex | open_id → 中文姓名映射 | scripts/memory/entity_manager.py | ✅ 已实现 |
飞书 API 权限速查
按 Scope 分类
| Scope | 说明 | 涉及 API |
|---|---|---|
wiki:wiki | 知识库全能权限(读写) | 创建空间、创建/移动/复制节点、成员管理 |
wiki:wiki:readonly | 知识库只读 | 空间列表/信息、子节点列表、搜索、任务结果 |
wiki:space:retrieve | 获取空间列表 | GET /wiki/v2/spaces |
wiki:space:read | 获取空间信息 | GET /wiki/v2/spaces/:space_id、获取任务结果 |
wiki:space:write_only | 创建空间 | POST /wiki/v2/spaces |
wiki:node:read | 获取节点信息 | GET /wiki/v2/spaces/get_node |
wiki:node:retrieve | 获取子节点列表 | GET /wiki/v2/spaces/:space_id/nodes |
wiki:node:create | 创建节点 | POST /wiki/v2/spaces/:space_id/nodes |
wiki:node:move | 移动节点 | POST .../nodes/:node_token/move |
wiki:node:copy | 复制节点 | POST .../nodes/:node_token/copy |
wiki:member:create | 添加成员 | POST .../members |
wiki:member:update | 删除成员 | DELETE .../members/:member_id |
按 Token 类型
| API | tenant_access_token | user_access_token |
|---|---|---|
| 获取空间列表/信息 | ✅ | ✅ |
| 创建空间 | ❌ | ✅ |
| 成员管理 | ✅ | ✅ |
| 节点 CRUD | ✅ | ✅ |
| 搜索节点 | ❌ | ✅ |
| 异步任务 | ✅ | ✅ |
关键限制
速率限制
| API 类别 | 限制 |
|---|---|
| 大多数读/写 API | 100 次/分钟 |
| 创建空间 | 10 次/分钟 |
| 搜索节点 | 未公开(建议保守调用) |
功能限制
| 限制项 | 详情 |
|---|---|
| 分页大小 | 所有列表接口 page_size 最大 50 |
| 搜索 query 长度 | 最多 50 字符 |
| 搜索 Token 类型 | 仅 user_access_token,不支持 tenant_access_token |
| 创建空间 Token 类型 | 仅 user_access_token |
| 创建节点 obj_type | 支持 docx/sheet/mindnote/bitable/slides,不支持 file |
| 移动节点 | 支持跨空间移动(需指定 target_space_id) |
| 异步任务 | 移动云文档到 Wiki 为异步,需轮询 task_id 获取结果 |
| 成员角色 | admin(管理员)/ member(成员) |
| 成员类型 | openchat / userid / email / opendepartmentid / openid / unionid |
飞书 Wiki-v2 API 全量索引
| 方法 | 路径 | 说明 | 限流 |
|---|---|---|---|
| GET | /wiki/v2/spaces | 获取空间列表 | 100/min |
| GET | /wiki/v2/spaces/:space_id | 获取空间信息 | 100/min |
| POST | /wiki/v2/spaces | 创建空间 | 10/min |
| POST | /wiki/v2/spaces/:space_id/members | 添加成员 | 100/min |
| DELETE | /wiki/v2/spaces/:space_id/members/:member_id | 删除成员 | 100/min |
| GET | /wiki/v2/spaces/get_node | 获取节点信息 | 100/min |
| GET | /wiki/v2/spaces/:space_id/nodes | 获取子节点列表 | 100/min |
| POST | /wiki/v2/spaces/:space_id/nodes | 创建节点 | 100/min |
| POST | .../nodes/:node_token/move | 移动节点 | 100/min |
| POST | .../nodes/:node_token/copy | 复制节点 | 100/min |
| POST | /wiki/v2/nodes/search | 搜索节点 | — |
| POST | .../nodes/move_docs_to_wiki | 移动云文档到 Wiki(异步) | — |
| GET | /wiki/v2/tasks/:task_id | 获取异步任务结果 | 100/min |