byted-viking-aisearch-feishu

v2026.09.24

基于飞书开放平台 API 的云文档/电子表格/多维表格/知识库(Wiki)搜索与内容读取工具(只读)。 使用场景:在飞书中搜索文档/表格/多维表格/知识库空间或节点,并读取对应内容。 Also activates for: 飞书搜索、Feishu search docs sheets base wiki、Lark docs sheets base wiki search、搜索飞书文档 表格 多维表格 知识库

GitHub
Install command
npx skhub add bytedance/byted-viking-aisearch-feishu
Markdown
SKILL.md

Viking AISearch Feishu Skill

你是一个专注于飞书「云文档 / 电子表格 / 多维表格 / 知识库(Wiki)」的搜索与内容读取助手。你必须严格只读,不实现任何写操作。

🎯 核心功能

  • 搜索:聚合搜索云文档(doc/docx)、电子表格(sheet)、多维表格(bitable)、知识库空间与节点(wiki)
  • 读取:读取 doc/docx 原文;读取 sheet 预览区间数据;读取 bitable 表结构与记录样本;读取 wiki 节点(自动跳转到关联对象内容)与 wiki 空间子节点列表

🚦 场景路由

用户意图示例匹配场景主要方法产出
“搜一下飞书里关于‘Q4’的资料”聚合搜索search_items() / search_docs()返回条目列表(title/type/token/url/source…)
“读取这个 docx / sheet / base 的内容”内容读取fetch_raw_content()返回 content(纯文本/TSV/JSON 摘要)
“列出我有权限的知识库空间”知识库空间list_wiki_spaces() / search_wiki_spaces()返回空间列表
“列出某个知识库空间的子节点”空间子节点list_wiki_space_nodes()返回节点列表

📚 主要接口使用方法

1) 初始化

from scripts.feishu_search import FeishuDocSearch

# 方式一:使用环境变量(推荐)
# export LARK_USER_ACCESS_TOKEN="u-xxxxxxxxxxxxxxxxxxxxxxxx"
tool = FeishuDocSearch()

# 方式二:显式传入 access_token
tool = FeishuDocSearch(access_token="u-xxx")

2) 聚合搜索 - search_items()

功能:按关键词搜索云文档/电子表格/多维表格,并可选聚合知识库节点与知识库空间

参数:

参数名类型必填默认值说明
search_keystr是-搜索关键词
countint否10返回数量(分页后)
offsetint否0偏移量(分页后)
typesList[str]否["doc","docx","sheet","bitable","wiki","wiki_space"]搜索类型集合
owner_idsList[str]否None所有者 Open ID 过滤(仅 suite docs 搜索)
chat_idsList[str]否None群聊 ID 过滤(仅 suite docs 搜索)
space_idstr否None仅搜索该知识库空间内节点(wiki 节点搜索)

返回语义:

  • 只要至少一条搜索路径返回可用结果,search_items() 仍可返回 success=true
  • 若某一路径失败或降级,结果会在 data.warnings 中显式暴露,不再静默吞掉
  • 常见 warning 键包括:suite_error、suite_fallback_error、wiki_nodes_error、wiki_spaces_error、wiki_spaces_warning

典型部分成功返回:

{
  "success": true,
  "message": "搜索成功",
  "data": {
    "total": 3,
    "has_more": false,
    "items": [],
    "warnings": {
      "suite_error": {
        "message": "文档套件搜索失败",
        "error": {}
      }
    }
  }
}

3) 兼容接口 - search_docs()

search_docs() 为历史兼容接口,内部基于 search_items() 实现,默认包含 doc/docx/sheet/bitable/wiki。

使用示例:

# 基础搜索
result = tool.search_docs(search_key="项目计划")

# 指定类型搜索
result = tool.search_docs(
    search_key="季度报告",
    docs_types=["doc", "docx", "sheet", "bitable", "wiki"]
)

# 分页搜索
result = tool.search_docs(
    search_key="技术方案",
    count=20,
    offset=0
)

返回示例:

{
  "success": true,
  "message": "搜索成功",
  "data": {
    "total": 12,
    "has_more": false,
    "warnings": {
      "wiki_error": {
        "message": "权限不足,请为应用开通 wiki 搜索相关权限",
        "error": {
          "type": "permission_denied",
          "detail": "HTTP 403: ..."
        }
      }
    },
    "items": [
      {
        "docs_token": "your_docs_token_xxx",
        "docs_type": "docx",
        "owner_id": "ou_xxx",
        "title": "项目计划.docx",
        "url": "https://xxx.feishu.com/docx/xxx",
        "source": "suite_docs"
      },
      {
        "docs_token": "your_docs_token_xxx",
        "docs_type": "wiki",
        "title": "用户操作手册",
        "url": "https://xxx.feishu.com/wiki/xxx",
        "space_id": "your_space_id_xxx",
        "obj_type": "docx",
        "obj_token": "your_obj_token_xxx",
        "source": "wiki_nodes"
      }
    ]
  }
}

3.5) 搜索 wiki 节点 - search_wiki_nodes()

功能:按 wiki 节点标题/内容搜索知识库文档

参数:

参数名类型必填默认值说明
keywordstr是-搜索关键词
countint否None返回数量
offsetint否None偏移量
space_idstr否None指定 wiki 知识空间

使用示例:

result = tool.search_wiki_nodes(
    keyword="用户操作手册",
    space_id="your_space_id_xxx"
)

返回示例:

{
  "success": true,
  "message": "搜索成功",
  "data": {
    "total": 1,
    "has_more": false,
    "items": [
      {
        "docs_token": "your_docs_token_xxx",
        "docs_type": "wiki",
        "title": "用户操作手册",
        "url": "https://xxx.feishu.com/wiki/xxx",
        "space_id": "your_space_id_xxx",
        "obj_type": "docx",
        "obj_token": "your_obj_token_xxx",
        "source": "wiki_nodes"
      }
    ]
  }
}

4) 内容读取 - fetch_raw_content()

支持的 docs_type:

  • doc / docx:读取原文(raw_content)
  • sheet:读取表格预览区间数据(默认首个工作表 A1:Z100,可传 range_a1/max_rows/max_cols)
  • bitable:读取多维表格的数据表列表,并读取一个数据表的记录样本(可传 table_id/page_size/page_token)
  • wiki:读取知识库节点;若节点关联对象为 doc/docx/sheet/bitable,会自动读取关联对象内容
  • wiki_space:读取知识库空间的子节点列表(可分页)

补充说明:

  • search_wiki_spaces() 命中分页上限时,会返回 data.has_more=true,并在 data.warnings.pagination_truncated 中说明结果可能不完整
  • fetch_sheet_content() 在 metainfo 端点失败但 query 端点成功时,仍返回 success=true,并在 data.warnings.metainfo_error 中保留降级信息
  • fetch_bitable_content() 在“表列表获取成功但记录样本读取失败”时,返回 success=true 和 message=部分成功:已获取数据表列表,但记录样本读取失败,同时在 data.warnings.records_error 中暴露失败详情

使用示例:

# 读取 docx
result = tool.fetch_raw_content(
    docs_type="docx",
    docs_token="your_docs_token_xxx"
)

# 读取 sheet(可指定范围)
sheet_result = tool.fetch_raw_content(
    docs_type="sheet",
    docs_token="your_sheet_token_xxx",
    range_a1="Sheet1!A1:D50"
)

# 读取 bitable(可指定表与分页)
base_result = tool.fetch_raw_content(
    docs_type="bitable",
    docs_token="your_app_token_xxx",
    table_id="tbl_xxx",
    page_size=50
)

返回示例(docx):

{
  "success": true,
  "message": "获取成功",
  "data": {
    "content": "Q4项目计划\n一、项目背景..."
  }
}

🔑 鉴权

  • 使用 Authorization: Bearer <LARK_USER_ACCESS_TOKEN>(用户访问令牌)
  • 访问令牌通过 viking_feishu_oauth_provider 注入到环境变量 LARK_USER_ACCESS_TOKEN,实现动态获取

📝 使用流程建议

典型流程:搜索并读取内容

# 1. 搜索
search_result = tool.search_docs(search_key="项目计划")
if not search_result.get("success"):
    print(search_result.get("message"))
    raise SystemExit

items = search_result.get("data", {}).get("items", [])
if not items:
    print("未找到相关文档")
    raise SystemExit

# 2. 获取第一个文档的 token 和类型
first_item = items[0]
docs_token = first_item["docs_token"]
docs_type = first_item["docs_type"]

# 3. 读取内容
content_result = tool.fetch_raw_content(docs_type=docs_type, docs_token=docs_token)
print(content_result)

📋 文档类型枚举

docs_type说明
doc旧版飞书文档
docx新版飞书文档
sheet电子表格
bitable多维表格
wiki飞书 wiki 节点(可自动读取关联对象内容)
wiki_space知识库空间(可读取子节点列表)

获取 wiki 节点信息 - get_wiki_node()

功能:获取 wiki 节点的详细信息,包括标题、关联对象类型等

使用示例:

result = tool.get_wiki_node(node_token="your_node_token_xxx")

返回示例:

{
  "success": true,
  "message": "获取成功",
  "data": {
    "node_token": "your_node_token_xxx",
    "title": "文档标题",
    "obj_type": "docx",
    "obj_token": "your_obj_token_xxx",
    "node_type": "origin",
    "space_id": "your_space_id_xxx",
    "creator": "ou_xxx",
    "owner": "ou_xxx"
  }
}

🚨 错误处理

错误类型识别方式返回提示
认证失败401/Unauthorized"认证失败,请检查 access_token 是否有效或已过期"
权限不足403/Forbidden"权限不足,请为应用开通搜索相关权限"
请求超时包含 timeout"请求超时,请稍后重试"
搜索参数错误search_key 为空"search_key 不能为空"
不支持的文档类型未知的 docs_type"不支持的 docs_type,仅支持 doc/docx/sheet/bitable/wiki/wiki_space"
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

Apache-2.0

Source path

skills/byted-viking-aisearch-feishu

Default branch

main

Latest commit

db8aaa9

Tree SHA

f2e4656