原始内容
name: ht-skills description: 管理灏天文库文集和文档,支持新建文集、新建文档、查询文集/文档、更新文档、修改文档归属、管理文档层级、查询个人花园限制与用量;支持文档片段 RAG 检索、图片上传到 COS、图片分组、查询图片列表/详情与图片额度。适用于 OpenClaw 自主写文章并上传、文集创建、文档入库、知识检索、文档移动、插图上传与外链等场景。 allowed-tools: [bash] environment-variables:
- HT_SKILL_SERVER_URL
- HT_SKILL_TOKEN config-files:
- config.json
ht-skills 灏天文库管理(客户端)
通过服务端 API 调用,需配置 config.json 中的token(个人 API Token)。
客户端注意事项(必须遵守)
- 个人花园范围:
list_collections/get_collection/ 新建与修改文档等读写操作仅针对个人花园;用户在灏天文库网页上的精品文集等非花园文集不会出现在列表中,也无法通过 ht-skills 操作。若接口返回「已晋升为精品文集」,请引导用户前往 灏天文库 网页编辑。 - 查询文集列表:无
--limit、--offset;仅返回当前用户的个人花园文集。 - 查询文档列表:必须带
--collection-id(文集 ID);若没有文集 ID,需先list_collections.py --name "文集名称"查询,或向用户询问目标文集名称。 - 查询文档列表:无
--limit、--offset。 - 更新文档:
author字段不可更新,只能更新 name、content、sort、parent。 - 修改文档归属:需有目标文集权限;一篇文档只属于一个文集,使用
move_document.py --id <文档ID> --collection-id <目标文集ID>即可。 - 文档归属:一篇文档只属于一个文集(产品约束)。
- 图片上传:需本地可读图片路径;大文件上传耗时较长。上传成功后响应中的
file_url可直接用于正文插图。 - 图片分组:使用
--group-id前可用list_image_groups.py查询分组 ID;分组必须属于当前用户。 - RAG 文档片段检索:
--collection-ids须为灏天文库公开精品文集 ID(见下方公开目录链接);不要用list_collections.py查个人花园文集 ID 来做 RAG 检索。
智能体执行规范(必须遵守)
规范一:修改特定文档
- 先查询:使用
list_documents.py --collection-id <文集ID> --name "关键词"或get_document.py --id <ID>定位要修改的文档,确认文档 ID。 - 再修改:使用
update_document.py --id <ID>修改标题、正文。
规范二:添加特定文档
- 文集必填:用户必须提供目标文集。若用户未提供或只说「随便加」「你决定」等,必须主动询问:「请告知要将文档添加到的文集名称」。
- 查询文集 ID:用户给出文集名称后,用
list_collections.py --name "文集名称"查询文集 ID;若不存在则询问是否新建。 - 添加文档:使用
add_document.py --collection-id <ID> --name "标题" [--content 内容] [--content-file 文件路径]。
规范三:添加文集
- 用户确认:新建文集前必须让用户确认要创建的文集名称,例如:「将创建文集「xxx」,请确认名称是否正确?」。
- 封面提示:向用户说明——灏天文库会在创建后半小时内自动生成一次封面图;目前不支持自定义封面;之后若改名,封面可能与名称不一致,请谨慎操作。创建成功后 API 响应含
cover_notice,须转告用户。 - 确认后再执行:用户确认后再执行
create_collection.py --name "文集名称"。若使用--get-if-exists则同名已存在时直接返回已有 ID,不重复创建。 - 修改文集名称:使用
update_collection.py --id <ID> --name "新名称"前,须提醒用户改名可能导致封面与名称不一致(响应含cover_notice)。
规范四:修改文档归属
- 先定位文档:用
list_documents.py --collection-id <文集ID> --name "关键词"或get_document.py --id <ID>确认文档 ID。 - 确认目标文集:用户需提供目标文集名称或 ID;若无则
list_collections.py --name "关键词"查询。 - 执行移动:使用
move_document.py --id <文档ID> --collection-id <目标文集ID>。
规范五:上传图片并用于文档
- 可选分组:若用户要归类图片,先
list_image_groups.py或create_image_group.py --name "分组名"取得group_id。 - 检查额度(可选):
get_image_limits_usage.py确认can_upload。 - 上传:
upload_image.py --file "路径" [--remark "说明"] [--group-id N]。 - 使用链接:从返回 JSON 的
data.file_url插入文档 Markdown/HTML;勿猜测 URL。
规范六:文档片段检索(RAG)
- 明确检索问题:用户给出要问的内容或关键词,作为
--content。 - 确定目标文集 ID(必填,最多 5 个):
- 公开精品文集 ID 从灏天文库官方目录获取(含 ID 与名称对照表):
- 在目录中按分类或搜索找到与用户问题相关的文集名称,取表格 ID 列的数字(如
189对应「AI 大模型」)。 - 勿用
list_collections.py:该接口只返回当前用户个人花园文集,与 RAG 索引的公开精品文集不是同一套数据。 - 若用户只说了领域/主题(如「人工智能」)而未指定具体文集,应先在公开目录中挑选 1~5 个最相关的文集 ID,必要时向用户确认。
- 执行检索:
python scripts/retrieve_documents.py --content "用户的问题" --collection-ids 189 907 - 使用返回结果:响应中的
sources为相关片段及出处(文集名、文档名、source字段等);本接口不调用大模型,由智能体根据片段自行组织回答或引用。若响应含warning,说明传入文集超过 5 个,已自动截断。
规范七:个人花园配额与会员(写操作前建议执行)
- 写操作前先查配额:新建文集、新建文档、移动文档、更新较长正文前,先执行
get_garden_limits_usage.py,确认usage.can_create_collection、目标文集的documents_quota及limits.max_chars_per_document。 - 解读会员状态:响应
data.membership.is_member为true表示当前为会员(member_status=1);实际配额上限仍以data.limits为准(由灏天文库计算,含等级 tier 与会员倍数)。 - 会员失效提示:若
is_member为false且某文集documents_quota.used已超过当前limit,应告知用户「存量保留,但不能再新建/扩容」;更新超长正文可能因字数上限被 403 拒绝。 - 配额不足时:不要强行重试写接口;向用户说明当前
已用/上限(如collections_quota.text、documents_quota.text),建议删减内容、更换文集或续费会员后再操作。
规范八:申请花园文集晋升精品文集
- 与个人花园维护不同:晋升是把已有个人花园文集申请变为平台精品文集;记录写入
sys_collection_upload,由管理员在灏天文库「文集审核管理」审核。 - 提交前先查额度:
check_garden_promotion_quota.py,确认can_submit为 true(每用户 24 小时最多 1 次);响应中的notice为晋升后果说明,须向用户宣读。 - 确认文集 ID:
list_collections.py或get_collection.py;文集内应已有文档。 - 晋升前必须向用户确认:向用户说明「审核通过后 OpenClaw/ht-skills 将无法再改文集名称、文档内容,请前往灏天文库网页维护;请确认内容已定稿」;用户同意后再提交。
- 提交:
request_garden_promotion.py --collection-id <ID> [--reason "说明"] --confirm(--confirm必填,表示已向用户说明并获确认)。 - 跟踪:
list_my_garden_promotion_requests.py(status:0 待审、1 通过、2 驳回)。 - 晋升后编辑:若修改接口返回「已晋升为精品文集」,告知用户前往 灏天文库 网页编辑,勿反复重试 ht-skills 写接口。
前置条件
- config.json:在 client 目录配置
config.json,填写token。 - 环境变量(可选):
HT_SKILL_SERVER_URL、HT_SKILL_TOKEN优先级高于 config.json。 - 依赖:
pip install requests
脚本目录
所有脚本位于 scripts/,在 client 根目录执行。
功能一:新建文集(支持有则用、无则建)
python scripts/create_collection.py --name "文集名称" [--description "50字内简介"] [--brief "500字以上详细介绍"]
python scripts/create_collection.py --name "文集名称" --get-if-exists
- 创建成功时响应含
cover_notice:半小时内自动生成封面一次,暂不支持自定义封面;后续改名可能导致封面与名称不一致
功能二:新建文档到指定文集
python scripts/add_document.py --collection-id 123 --name "文档标题" [--content "正文"] [--content-file 路径] [--parent 0]
功能三:查询文集列表
python scripts/list_collections.py [--name "关键词"]
功能四:查询文集详情
python scripts/get_collection.py --id 123 [--include-docs]
功能五:查询文档列表
python scripts/list_documents.py --collection-id 123 [--name "关键词"]
# collection-id 必填。若无文集 ID,需先 list_collections 查询或向用户询问
功能六:查询文档详情
python scripts/get_document.py --id 456
功能七:更新文档(修订已发文章)
python scripts/update_document.py --id 456 --name "新标题"
python scripts/update_document.py --id 456 --content "新正文"
python scripts/update_document.py --id 456 --content-file 文件路径
python scripts/update_document.py --id 456 --sort 50
python scripts/update_document.py --id 456 --parent 0
功能八:修改文档归属(移动到目标文集)
# 将文档移动到目标文集(一篇文档只属于一个文集)
python scripts/move_document.py --id 456 --collection-id 789
--id:文档 ID(必填)--collection-id:目标文集 ID(必填)
功能九:设置文档父级(文集内层级)
python scripts/set_document_parent.py --collection-id 123 --document-id 456 --parent 0 [--sort 1]
parent=0表示根文档;同级别sort越小越靠前
功能十:查询当前用户个人花园限制与用量
python scripts/get_garden_limits_usage.py
- 无参数,返回当前用户个人花园的限制与占用情况(仅统计
source_type=garden文集) - 占用字段使用更直观的
已用/上限结构(如3/10、18/100) - 响应含
data.membership(is_member、member_status),便于向用户解释会员与配额;实际上限以data.limits为准
功能十一:图片分组
python scripts/create_image_group.py --name "分组名称"
python scripts/list_image_groups.py [--limit 100] [--offset 0]
python scripts/update_image_group.py --id <分组ID> --name "新名称"
功能十二:图片上传与查询
python scripts/get_image_limits_usage.py
python scripts/upload_image.py --file "图片路径" [--remark "备注"] [--group-id N]
python scripts/list_images.py [--group-id N] [--name "文件名关键词"] [--limit 50] [--offset 0]
python scripts/get_image.py --id <图片ID>
- 上传成功后的
data.file_url为可访问地址(依赖服务端cos.public_base_url或cos.domain配置) list_images.py的--name对应服务端查询参数file_name(文件名模糊匹配)
功能十三:文档片段检索(RAG)
从灏天文库 RAG 向量索引中检索与问题相关的文档片段及出处,不调用大模型。
文集 ID 从哪里获取?
RAG 检索针对的是平台公开精品文集(已入库向量索引),ID 与名称对照见官方目录:
目录按领域分类(如「人工智能与大模型」「编程语言与开发框架」等),每行格式为 ID | 文集名称。执行检索时,将表格中的 ID 数字 作为 --collection-ids 传入即可(如 ID 189 可写 189 或 collection_189)。
注意:
list_collections.py只能查到当前用户自己的个人花园文集,不能替代上述公开目录;做 RAG 检索时请以上述链接为准。
命令示例
# 在公开目录中查到「AI 大模型」ID 为 189、「人工智能基础」ID 为 907 后:
python scripts/retrieve_documents.py --content "什么是 Transformer?" --collection-ids 189 907
# ID 也可带 collection_ 前缀
python scripts/retrieve_documents.py --content "检索内容" --collection-ids collection_189
参数说明
| 参数 | 必填 | 说明 |
|---|---|---|
--content |
是 | 检索内容/用户问题 |
--collection-ids |
是 | 文集 ID 列表,从公开目录获取;支持 21 或 collection_21;最多 5 个,超出仅使用前 5 个并返回 warning |
返回结果怎么用
sources:命中的文档片段列表,含content(片段)、document_name、collection_name、source(出处描述)、distance(相似度)等collection_info:实际检索的文集、未建索引文集等汇总信息- 智能体应基于
sources组织回答,并注明引用出处;勿编造目录中不存在的文集 ID
功能十四:花园文集晋升申请
python scripts/check_garden_promotion_quota.py
python scripts/request_garden_promotion.py --collection-id <文集ID> [--reason "申请说明"] --confirm
python scripts/list_my_garden_promotion_requests.py [--limit 50] [--offset 0]
- 仅针对当前用户的个人花园文集(
source_type=garden) - 每用户 24 小时最多 1 次晋升申请
- 提交前须向用户说明晋升后果;
--confirm表示已获用户确认(必填) check_garden_promotion_quota与提交成功响应均含notice字段(晋升后果说明)- 审核在灏天文库后台进行,通过后文集变为精品文集,ht-skills 写接口将不可用