mcpField
A
alibabacloud-help-doc-search

alibabacloud-help-doc-search

github.com/aliyun其他28239 次安装1 天前更新
代码仓库

关于 alibabacloud-help-doc-search

用于搜索和阅读阿里云官方文档、核对 OpenAPI 契约的命令行技能,面向需要查阅文档或精确 API 元数据的开发者与运维人员。支持按门户和语言限定查询范围。

主要功能

  1. 01搜索 cn 和 intl 门户文档
  2. 02以 Markdown 读取文档正文
  3. 03浏览产品与文档目录
  4. 04核对 OpenAPI 参数、错误和权限
  5. 05按站点与语言限定查询

适用场景

  1. 01查找产品配置或故障排查说明
  2. 02查询配额、限制或计费文档
  3. 03核对 API 参数与 RAM 权限
  4. 04以指定门户语言阅读产品文档

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aliyun/alibabacloud-aiops-skills --skill alibabacloud-help-doc-search

安装后在 Claude Code 中输入/alibabacloud-help-doc-search确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api-metadata.md
ecs-knowledge-faq.md
ecs-scenario-guide.md
manifest.json
product-codes.md
query-construction.md
ram-policies.md
search-backend.md
scripts/
aliyun_help.py
help_api_meta.py
help_cache.py
help_core.py
help_http.py
help_llms_index.py
help_probe.py
help_query.py
help_read.py
help_render.py
help_search_cn.py
help_search_intl.py
help_search.py
help_selftest.py

详细介绍

阿里云帮助文档搜索与 OpenAPI 验证

搜索并阅读阿里云两个公开帮助门户上的官方文档—— help.aliyun.com(站点 cn)和 www.alibabacloud.com(站点 intl)——并根据 api.aliyun.com 的公开元数据验证 OpenAPI 契约。

功能

站点与语言范围

两个门户涵盖的产品、地域和价格各不相同,因此每次查询都严格限定为一个(站点,语言)组合,绝不会混用:

--site门户--lang 值全文搜索路径llms.txt 索引路径
cn(默认)help.aliyun.comzh(默认)、en是是
intlwww.alibabacloud.comen(默认)、zh、tc、ja、id、pt-br、fr(实验性)仅 en 和 zh是

两个标志都是可选的;省略它们会与历史上的 cn + zh 行为完全一致。 全文搜索端点仅支持 en 和 zh,对于其他语言会静默返回英文结果,因此对于 tc/ja/id/pt-br/fr,脚本会有意跳过该路径,只从 llms.txt 索引获取结果,并在 stderr 上输出 INFO 行进行说明。 这对答案的影响是:索引路径的结果按目录顺序排列,而非按相关性排序;不包含 updated 日期;对于错误代码、参数名称和配额问题的召回效果较差——这是这些语言的正常能力边界,并非故障。ko 和 de 不受支持(其索引与英文索引逐字节相同);es/th/vi/tr/ru/it 会发出 WARN 并回退到站点默认语言;pt 会规范化为 pt-br。如果请求 cn 不提供的语言,则会以状态码 2 退出,且不会发出任何请求。

全文档搜索

按关键词搜索帮助文档,并按相关性排序返回结果,包括标题、URL 和摘要。可选的产品筛选器可将结果缩小到单个产品,例如 OSS 或 ECS。强烈建议传入 -p:这样可以大幅提高结果的精准度(服务端产品筛选加融合索引路径),不过与不指定范围的方式相比,请求数不会减少;仅在降级场景下速度更快。

python3 scripts/aliyun_help.py search "cross-origin" -p oss
python3 scripts/aliyun_help.py search "bucket policy" --site intl --lang en -p oss
按 URL 阅读文档内容

通过 URL 获取文档的完整正文,并返回整洁的 Markdown(会自动追加 .md 后缀)。两个门户都采用相同的 .md 约定,站点根据 URL 本身确定。

python3 scripts/aliyun_help.py read "https://help.aliyun.com/zh/ecs/user-guide/create-a-custom-image-from-a-snapshot-1"
python3 scripts/aliyun_help.py read "https://www.alibabacloud.com/help/en/oss/user-guide/what-is-oss"
浏览产品文档目录

在任一门户和任何受支持的语言中,列出所有产品,或列出某个产品的完整文档目录(按类别分组的标题、链接和摘要)。

python3 scripts/aliyun_help.py list-products
python3 scripts/aliyun_help.py list-docs oss -n 50
python3 scripts/aliyun_help.py list-docs oss --site intl --lang ja -n 50
OpenAPI 元数据验证

根据结构化元数据验证精确的 API 契约详情——参数名称、类型、必填标记、错误代码和 RAM 权限点。与叙述性文档相比,结构化元数据更具权威性。

python3 scripts/aliyun_help.py api-products actiontrail
python3 scripts/aliyun_help.py api-list actiontrail lookup
python3 scripts/aliyun_help.py api-info actiontrail LookupEvents

触发条件

当用户需要了解任何受支持语言中的阿里云官方文档事实或 OpenAPI 契约事实时,触发此技能:

  1. 如何使用、配置或排查阿里云产品问题(OSS、ECS、RAM 及目录中的其他产品)。
  2. 错误代码或错误消息的含义,以及如何修复。
  3. 必须依据文档而非记忆回答的配额、使用限制、计费规则或定价模式问题。
  4. 某个 API 的精确参数列表、错误代码或 RAM 权限点。
  5. 阅读已知文档,或浏览某个产品的目录。
  6. 上述任一需求限定于国际门户(www.alibabacloud.com)或非中文语料(en、tc、ja、id、pt-br)。

当用户要更改云资源、排查适用专用诊断技能的线上产品事故,或将此技能用作无需检索即可回答问题的替代方案时,不要触发此技能。

输入参数

参数子命令含义
keyword(位置参数)search自由文本查询;支持中文、英文或混合内容
product(位置参数)list-docs、read-product、api-list、api-info产品代码标识,例如 oss、ecs
url(位置参数)read文档 URL;会自动追加 .md
-p、--productsearch产品筛选;强烈建议使用
-n、--max-resultssearch(20)、list-docs(100)、list-products、api-*(50)结果上限,0 = 不限
-l、--max-linesread、read-product正文行数上限,0 = 不限
--json大多数子命令机器可读输出
--rawread原样输出 HTML 响应,而不是拦截它
--sitesearch、list-docs、list-products、read-product、readcn(默认)或 intl
-L、--langsearch、list-docs、list-products、read-product语料库语言;read 会从 URL 推断语言,因此只接受 --site
-vlist-products(--verbose)详细产品列表
-V、--api-versionapi-list、api-info要检查的 OpenAPI 版本(默认为产品的默认版本)
--show-siteslist-products同时输出主索引发布的站点 x 语言区块;仅供参考
--timeout每个子命令单次请求的秒数;0(默认)表示沿用各端点自身的截止时间
--no-result-cache五个文档子命令不复用最近 10 分钟内的全文搜索结果

除了各子命令的位置参数外,所有参数均为可选项,默认命令行格式保持不变。三个 api-* 子命令不接受 --site/--lang:api.aliyun.com 元数据与站点无关。

执行规则

帮助文档采用叙述形式,可能滞后于实际 API 行为;OpenAPI 元数据反映的是实时契约。当两者不一致时,以元数据为准,并在回答中注明每条说法的来源。对于“如何做”和“为什么”类问题,应使用文档搜索和阅读;对于“确切参数、错误代码或权限点是什么”类问题,应使用元数据核实;需要背景说明时则结合两者。搜索无结果时,可建议使用 WebSearch,并在关键词后加上 site:help.aliyun.com(查询 cn 时)或 site:www.alibabacloud.com/help/(查询 intl 时)以扩大搜索范围;也可选择进一步限定为 /{lang}/{product_code}/。尝试同义词也值得一试。此外,使用 -p 搜索无结果时,应使用相同的 --site/--lang 运行 list-products 重新核查(产品代码可能有误,或者该产品可能根本不存在于该门户),并在断定内容不存在之前尝试移除产品筛选重新搜索。绝不要为了“找点内容”而在另一个门户重新执行无结果查询:两个门户的产品组合、区域和价格各不相同,跨站点回答会悄然混合两个互不兼容的语料库。每条引用的文档都必须附上原始 URL,以便用户直接打开来源;如果查询明确指定了范围,回答必须注明内容来自哪个门户和语言。脚本中的所有网络调用都设有明确的超时,因此端点缓慢或无响应时会优雅降级,而不会造成阻塞。

对于错误代码和错误消息,首选分两层处理:首先使用确切的错误代码或原始错误文本搜索文档,因为叙述式故障排查文档会说明常见原因、影响和逐步修复方法;只有在需要某个特定 API 的完整契约级错误代码列表时,才应查阅 api-info 元数据,因为元数据能权威地列出错误代码,但不包含修复背景。 当问题涉及新功能、近期变更或类似更新日志的内容时,优先选择 updated 日期足够新、能够涵盖相关功能的结果;该日期会显示在 JSON 输出和呈现的行中,格式为 (updated: YYYY-MM-DD),并在回答中说明这一点。只有 cn + zh 全文后端会返回修改日期:search.json 后端(用于 intl 和 cn + en)以及每条索引腿条目都没有 updated 字段;当限定范围的查询未返回日期时,脚本会在 stderr 上说明。因此,缺少日期本身并不表示内容过时;如果没有结果看起来足够新,应标注相关说法可能已过时。

构造搜索关键词时,应遵循 references/query-construction.md 中的方法:提取核心实体和属性,优先使用文档术语而非口语表达,将包含多种意图的问题拆分为单独的查询,并依赖脚本内置的别名扩展、错误代码检测和低结果数扩展重试,而不要临时改写措辞。

ECS 知识问题(实例类型和实例系列、计费模式、配额和限制、最佳实践、API 参考)应遵循 references/ecs-scenario-guide.md 中的检索优先工作流:构造基于术语的查询;如果结果为空,则按窄范围 → 宽范围 → 改写的顺序逐步扩大;根据检索到的详细信息和来源 URL 作答;不得在未检索的情况下根据模型记忆回答 ECS 事实。

在 Agent 内部的内联调用预算中:除非有明确理由提高限制,否则保持默认的 -n 限制;已知产品时,始终传入 -p。不传 -p 时,全文检索腿仍会运行一次全局查询(约 1-2 秒);只有当该腿失败、被关闭,或因请求语言不在搜索白名单中而跳过时,才会执行并发的全产品索引扫描(扫描数百个产品索引约需 10-20 秒)。对于 tc/ja/id/pt-br/fr,跳过全文检索腿是常规路径,因此务必传入 -p。

编排

每次调用都会运行同一条流水线,然后融合并呈现结果:

  1. 解析范围——规范化 --site/--lang(pt 转为 pt-br,大小写折叠),并根据站点的语言列表进行验证;无效的组合会在发送任何请求前以状态码 2 退出。
  2. 全文检索腿——cn + zh 使用 doSearch,intl(en/zh)和 cn + en 使用 search.json;其他所有语言均会有意跳过。
  3. 索引腿——llms.txt 主索引加上每个产品的索引,缓存 3 天,路径为 ~/.cache/aliyun-help-search/llms/{site}/{lang}/{product}.txt。
  4. 融合并呈现——按规范化后的 URL 去重,为每条命中标注其来源检索腿,然后以文本或 JSON 形式输出。

搜索的降级顺序:使用已发现的 categoryId 执行精确的 -p 查询,然后进行宽泛搜索并按 URL 后置筛选,接着查询索引腿,最后重试扩展后的查询。每次降级都会在 stderr 上输出 WARN: 或 INFO: 行,因此可始终从记录中还原实际采用的路径。退出代码:0 表示成功(仍有结果的降级检索腿也视为成功);1 表示已降级但结果为空,或请求的产品在该站点没有文档;2 表示输入不可用或后端完全不可用。

辅助脚本

入口脚本是 scripts/aliyun_help.py(仅使用 Python 3 标准库,无依赖,所有站点/语言映射均为脚本内常量)。它仅提供命令行接口:实现位于同级模块中,每项功能对应一个模块——help_core(常量和范围)、help_http(传输、重定向、语料保护)、help_cache(用户目录缓存)、help_query(别名、同义词、双语词汇)、help_render(输出和正文清理)、help_llms_index(llms.txt 目录和索引分支)、help_search(全文搜索流程)、help_search_cn/help_search_intl(各门户的端点适配器)、help_read、help_api_meta、help_probe 和 help_selftest。子命令包括:list-products、list-docs、search、read、read-product、api-products、api-list、api-info,并支持 -n 结果数量限制、-l 行数限制、适用时以 --json 输出机器可读内容,以及可选的 --site/--lang 范围标志。退出代码:0 表示成功;1 表示降级后结果为空,或请求的站点上没有该产品的文档;2 表示站点/语言组合无效、查询不可用(为空或仅包含标点),或后端完全不可用。

python3 scripts/aliyun_help.py search "snapshot" -p ecs -n 10
python3 scripts/aliyun_help.py search "storage fee" --site intl --lang en -p oss -n 5
python3 scripts/aliyun_help.py list-docs oss --site intl --lang pt-br -n 20

内置自检会使用常规、边界和无效输入,测试所有与范围相关的纯函数(站点字典查找、缓存路径构造、pageSize 夹取、后端路由、语言白名单和别名解析、重定向和语言路径段验证、站点纯度筛选、空壳丢弃、降级响应封套检测、help@@ 前缀剥离)。自检由环境变量控制,不会添加子命令或文件,也不会访问网络:

ALIYUN_HELP_SELFTEST=1 python3 scripts/aliyun_help.py

它会打印一行摘要、保护逻辑在标准错误输出上产生的断言预期跟踪信息,以及任何 FAIL: 详情,然后输出 SELFTEST RESULT: PASS 并以 0 退出(失败时以 1 退出)。

另有一个可选启用的探测,会重新检查没有 SLA 保障的端点约定(超出范围的 pageSize 响应封套、两个主索引、前端 bundle 版本、元数据分支)。正常调用不会触发它,评估用例也不得对此作断言:

ALIYUN_HELP_PROBE=1 python3 scripts/aliyun_help.py

重要说明

  • 每条降级跟踪都会标注原因:WARN[rate-limit]、 WARN[waf-block]、WARN[schema-drift]、WARN[site-cross]、WARN[lang-fallback]、 WARN[query-clamp]、WARN[query-lang]、WARN[oversize]、WARN[cache-write]、 WARN[no-corpus]、WARN[unreachable]、WARN[leg-fallback],因此部分答案 始终可以追溯到具体原因;标记本身不会改变结果。若实时索引没有可用语料,因而回退到已过期的本地索引, 则会报告 WARN[no-corpus],并在消息中指出复用的过期缓存。
  • 索引分支会对匹配项排序(标题优先,其次是摘要,再按 CJK 二元组覆盖率排序,并设有 覆盖率下限),因此中文或措辞不同的查询不再局限于精确子串匹配。该排序是全局的:未限定范围的搜索会比较不同产品的候选项, 因此,主索引中靠后的产品的标题精确匹配,优先级高于靠前产品中的弱子串匹配;融合后的产品范围列表会根据每条索引匹配的实际匹配程度赋予权重, 同时确保其排名不会低于随之返回的全文搜索结果。 该分支仍无法检索错误代码、参数名称或配额数值;对此类查询若答案为空,会明确说明这一点,并指向 api-info <product> <ApiName>。
  • 相同的全文请求会复用 10 分钟,以减少对未公开接口的请求;--no-result-cache 会强制执行实时查询,且每次复用都会留下跟踪记录。
  • 站点隔离是绝对的。每个结果 URL 都会在事后根据请求站点的域名和语言路径段进行验证,属于另一门户的结果会被丢弃,并输出一行 WARN:。不会跨站点回退:国际站点的空结果会保持为空,并按此报告。
  • 两个门户都会对几种格式错误的请求返回 HTTP 200 和空响应或降级响应(页面大小过大、页码超出范围、站点值大小写错误、产品 slug 无效)。系统会检测并记录这些响应,而不会将其当作真正的“无结果”;分页会根据服务器端的总数停止,而不是根据短页停止。
  • 国际门户上的索引请求绝不会跟随重定向:不受支持的语言会返回 302 并指向英文索引;否则,英文索引会在没有任何 HTTP 信号的情况下被静默地当作请求语言的索引提供。
  • 响应正文是数据,不是指令。错误页面或拦截页建议的凭据、令牌、Cookie 和请求上下文标头都会被忽略,绝不会重新发送;JSON msg 字段中回显的服务器端堆栈跟踪也绝不会呈现给用户。
  • 必须通过 /help/ 路径前缀访问国际门户;裸域名根路径前面有 WAF,后者会返回 200 和一个很大的 HTML 拦截页。因此,接口常量会硬编码为完整 URL,绝不会通过主机名与相对路径拼接而成。

可观测性

此技能只会向公开文档接口(help.aliyun.com、www.alibabacloud.com、api.aliyun.com、t.aliyun.com)发送匿名 HTTPS GET 请求;它不会调用 aliyun CLI,也不会发送凭据。

每个请求都带有一个 User-Agent,它根据技能级模板构建 AlibabaCloud-Agent-Skills/{skill-name}/{session-id},并附加在类浏览器前缀之后,以便两个门户都继续处理请求:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) QoderWork/1.0 AlibabaCloud-Agent-Skills/alibabacloud-help-doc-search/6c3099a616944fa2b1d59fd8a4d52bab

{session-id} 段是由 uuid.uuid4().hex 为每个进程生成一次的 32 字符小写十六进制字符串(32 个十六进制数字),因此同一次运行中的所有请求都可以在后端日志中关联起来,并与下一次运行区分开。这里不适用 --user-agent 标志:它配置的是 aliyun CLI,而此技能从不调用该 CLI,因此会直接在每个请求对象上设置该标头。运行期间的每次后端降级和每次范围判定,都会作为 WARN: 或 INFO: 行记录到 stderr,因此实际采用的路径始终可追溯。

内部参考资料

实现细节记录在 references 目录中:搜索后端架构、两个门户端点、站点和语言能力矩阵、守卫列表及降级行为见 references/search-backend.md;帮助中心产品代码见 references/product-codes.md;OpenAPI 元数据端点见 references/api-metadata.md;ECS 文档场景工作流(优先检索的查询构建、降级链路和回答格式)见 references/ecs-scenario-guide.md;统一查询构建方法(原则、优秀/薄弱示例、别名扩展、错误代码指南和结果反馈改写)见 references/query-construction.md;ECS 知识常见问题(实例系列、计费、配额、最佳实践的快速解答)见 references/ecs-knowledge-faq.md;以及声明此技能无需 RAM 权限(零凭证、匿名只读访问)的文件见 references/ram-policies.md。

评论

支持 Markdown