agentsclimarketplace

Knowledge base

Skill knownasnaffy/prompthound/dataset/case_03336/knowledge-base

知识库与文件管理子技能,支持知识库增删改查、文件上传/URL导入/文本导入、文件解析状态轮询、语义检索。From its SKILL.md

Install
npx -y skills add knownasnaffy/prompthound --skill knowledge-base

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

14.4 KB, ~4.6k tokens by cl100k_base, as published. Nobody here has run it

Knowledge Base (知识库与文件管理)

Prerequisites: see root ../SKILL.md for setup, credentials, and iflow_api() helper.

通过 iflow API 管理知识库和文件,支持多种来源的内容导入。

完整数据结构和接口参数详见 references/api.md

输入来源总览

来源处理方式接口
本地文件 (PDF/TXT/MARKDOWN/DOCX/PNG/JPG)直接上传POST /api/v1/knowledge/upload (multipart)
网页 / 公众号文章 (URL)URL 导入POST /api/v1/knowledge/upload (content 字段传 URL, type=HTML)
纯文本内容Agent 创建 md 文件后上传POST /api/v1/knowledge/upload (multipart)

文件限制:单文件最大 20MB,PDF 最多 500 页。超出限制的文件需先拆分后分批上传到同一知识库。

接口决策表

用户意图调用接口关键参数
创建知识库POST /api/v1/knowledge/saveCollectioncollectionName, description
查看知识库列表GET /api/v1/knowledge/pageQueryCollectionspageNum, pageSize, keyword
查看知识库详情GET /api/v1/knowledge/queryCollectioncollectionId
更新知识库信息POST /api/v1/knowledge/modifyCollectionscollectionId, collectionName, description
删除知识库pipeline_kb.py deleteclearCollection API--kb --force,⚠️ 需用户确认
上传本地文件POST /api/v1/knowledge/uploadmultipart: file, collectionId, type
通过 URL 导入网页POST /api/v1/knowledge/uploadcontent(放URL), collectionId, type=HTML
通过文本创建Agent 创建 md → POST /api/v1/knowledge/upload见「文本导入」
查看文件列表POST /api/v1/knowledge/pageQueryContentscollectionId, pageNum, pageSize, fileName
查询单个文件详情GET /api/v1/knowledge/queryContentcollectionId, contentId
查询文件解析状态POST /api/v1/knowledge/parseStatusThenCallBackreqItems[].contentType, reqItems[].contentId, reqItems[].fileId
更新/重命名文件POST /api/v1/knowledge/updateContent2CollectioncollectionId, contentType, contentId, removeFlag=false, extra.fileName
删除单个文件POST /api/v1/knowledge/updateContent2CollectioncollectionId, contentType, contentId, removeFlag=true,⚠️ 需用户确认
批量删除文件POST /api/v1/knowledge/batchDeleteCollectionContentcollectionId, contentIds[]
语义检索知识库内容片段POST /api/v1/knowledge/searchChunkquery, collectionId, contentIds(可选)

常用工作流

创建知识库

推荐使用 Pipeline 脚本:

python3 scripts/pipeline_kb.py create --name "AI 论文集" --description "核心论文"

直接调 API(仅在 Pipeline 不可用时):iflow_api POST "/api/v1/knowledge/saveCollection" "{\"collectionName\": \"AI 论文集\", \"description\": \"核心论文\"}"

查看知识库列表

python3 scripts/pipeline_kb.py list [--keyword "AI"]

直接调 API:iflow_api GET "/api/v1/knowledge/pageQueryCollections?pageNum=1&pageSize=50&keyword=AI"

上传本地文件

用户说"上传这个文件到知识库"时:

curl -s -X POST "${IFLOW_URL}/api/v1/knowledge/upload" \
  -H "Authorization: Bearer $IFLOW_KEY" \
  -F "file=@/path/to/document.pdf" \
  -F "collectionId=${COLLECTION_ID}" \
  -F "type=PDF"
# 返回含 contentId 和 fileId,可用于轮询解析状态

文件扩展名 → type 参数映射:

文件扩展名type
.pdfPDF
.txtTXT
.mdMARKDOWN
.docxDOCX
.pngPNG
.jpg / .jpegJPG
URL 导入HTML

注意: collectionId 必须指定。不传时文件仅上传到 OSS 但不会关联任何知识库,也不会自动创建新知识库。

收藏网页/公众号文章到知识库(URL 导入)

用户说"把这篇文章存到知识库""收藏这个链接"时:

curl -s -X POST "${IFLOW_URL}/api/v1/knowledge/upload" \
  -H "Authorization: Bearer $IFLOW_KEY" \
  -F "content=https://mp.weixin.qq.com/s/xxx" \
  -F "collectionId=${COLLECTION_ID}" \
  -F "type=HTML" \
  -F "file=;filename="
# ⚠️ URL 放在 content 字段(不是 fileUrl)
# ⚠️ 需要传空的 file 字段保持接口兼容性(-F "file=;filename=" 发送一个空文件)
# 返回含 contentId,随后轮询解析状态

文本导入

用户说"把这段内容存到知识库""帮我记一下这些内容"时,Agent 需自行创建 md 文件后上传:

# 1. 创建临时 md 文件
TMP_FILE=$(mktemp /tmp/iflow_text_XXXXXX.md)
cat > "$TMP_FILE" << 'CONTENT_EOF'
# 用户的标题
用户粘贴的文本内容...
CONTENT_EOF

# 2. 上传到知识库
curl -s -X POST "${IFLOW_URL}/api/v1/knowledge/upload" \
  -H "Authorization: Bearer $IFLOW_KEY" \
  -F "file=@${TMP_FILE}" \
  -F "collectionId=${COLLECTION_ID}" \
  -F "type=MARKDOWN"

# 3. 清理临时文件
rm "$TMP_FILE"

适用场景:

  • 用户口述或粘贴的文本内容
  • Agent 从网页抓取整理后的内容
  • 会议纪要、随手笔记等非文件形态的文本

注意:后端不提供独立的文本创建接口,Agent 需自行创建 md 文件后通过 upload 接口上传。

文件解析状态

上传/导入后文件需异步解析,状态流转:

上传成功 → pending(排队等待解析) → processing(解析中) → success(完成)
                                                     ↘ failed(失败)

注意pending 是正常状态,表示文件已上传成功、正在排队等待系统解析,不是错误。上传的文件较多时排队时间可能较长。

状态字段parseStatusThenCallBackpageQueryContents 的状态值一致:

  • pending — 排队中(文件已上传成功,正在排队等待解析,这是正常流程,告知用户"文件已上传,正在排队等待解析")
  • processing — 解析中(已开始解析)
  • success — 解析完成
  • failed — 解析失败

上传后轮询解析状态

Pipeline 脚本已自动处理文件解析轮询,Agent 直接调用 Pipeline 即可,无需手动轮询。以下仅供直接调 API 时参考。

推荐方式(Pipeline 脚本使用此方式):上传后用 pageQueryContents 轮询文件的 status 字段,每 5 秒一次,直到 successfailed

# 参数通过 URL query string 传递
iflow_api POST "/api/v1/knowledge/pageQueryContents?collectionId=${COLLECTION_ID}&pageNum=1&pageSize=100"
# 从返回的 data 数组中找到 contentId 匹配的文件,检查 status 字段
# status: pending → processing → success | failed

精确方式(可选):如需针对特定文件精确轮询,可先从 pageQueryContents 获取 contentTypeextra.fileId,再调用 parseStatusThenCallBack

iflow_api POST "/api/v1/knowledge/parseStatusThenCallBack" "{
  \"reqItems\": [
    {\"contentType\": \"UPLOADV2\", \"contentId\": \"${CONTENT_ID}\", \"fileId\": \"${FILE_ID}\"}
  ]
}"

⚠️ 注意contentType 必须与文件实际类型完全匹配(如 "UPLOADV2" 而非 "UPLOAD"),否则返回 500 错误。

轮询时展示进度:

正在解析 attention.pdf…
attention.pdf 解析完成

轮询超时规则:最多 5 分钟,超时后告知用户可稍后查询。

重试解析失败的文件

如果文件解析失败(status=failed),可以重试:

iflow_api GET "/api/v1/knowledge/retryParsing?fileId=${FILE_ID}"

批量导入进度展示

多个文件同时导入时汇总:

导入进度:
  1. attention.pdf — 解析完成
  2. bert.pdf — 解析中
  3. gpt4.pdf — 解析完成

已导入 3 个文件到知识库「AI 论文集」(共 8 个文件)

查询文件列表

注意: pageQueryContents 的参数通过 URL query string 传递(不是 JSON body)。

iflow_api POST "/api/v1/knowledge/pageQueryContents?collectionId=${COLLECTION_ID}&pageNum=1&pageSize=50"

# 按文件名搜索
iflow_api POST "/api/v1/knowledge/pageQueryContents?collectionId=${COLLECTION_ID}&pageNum=1&pageSize=50&fileName=搜索关键字"

返回结构:

{
  "success": true,
  "code": "200",
  "data": [
    {
      "contentId": "xxx",
      "fileName": "attention.pdf",
      "summary": "文件摘要...",
      "status": "success",
      "contentType": "UPLOAD",
      "extra": {
        "fileType": "PDF",
        "fileId": "xxx",
        "downloadUrl": "https://...",
        "coverPhotoUrl": "https://...",
        "pageIndexPath": "https://...",
        "status": "success",
        "ossPath": "oss://..."
      }
    }
  ],
  "total": "19"
}

注意summary 字段包含文件的自动摘要,可用于帮助 Agent 理解文件内容,在文件搜索场景中特别有用。

语义检索(searchChunk)

通过 searchChunk 接口可以在知识库内按语义检索最相关的内容片段(文本或图片)。返回的每个 node 包含片段级 summary(即 chunk 原文摘要,非文件级摘要),匹配基于片段内容的语义相似度。

⚠️ 同步接口,响应可能较慢:此接口需要过大模型处理。文件少时可能几秒,文件多时可能几十秒。调用时需设置较长超时时间(建议 120 秒)。

使用场景

用户表达使用方式
"知识库里有没有关于 XX 的内容"searchChunk 检索,展示匹配片段
"帮我找一下关于 XX 的资料"searchChunk 检索,展示匹配片段
"这篇论文里讲了什么关于 XX"searchChunk + contentIds 限定单个文件
"用关于 XX 的内容生成报告"先 searchChunk 找到相关文件,再用 contentId 提交 creationTask

调用方式

# 检索整个知识库(不限定文件)
iflow_api POST "/api/v1/knowledge/searchChunk" "{
  \"query\": \"注意力机制的计算复杂度\",
  \"collectionId\": \"${COLLECTION_ID}\"
}"

# 只在指定文件中检索
iflow_api POST "/api/v1/knowledge/searchChunk" "{
  \"query\": \"注意力机制的计算复杂度\",
  \"collectionId\": \"${COLLECTION_ID}\",
  \"contentIds\": [\"${CONTENT_ID1}\", \"${CONTENT_ID2}\"]
}"

⚠️ 超时设置:由于接口可能较慢,使用 curl 直接调用时需加 --max-time 120

curl -s --max-time 120 -X POST "${IFLOW_URL}/api/v1/knowledge/searchChunk" \
  -H "Authorization: Bearer $IFLOW_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "...", "collectionId": "..."}'

使用 iflow_api 辅助函数时,Agent 应在调用前提醒用户:"正在检索,可能需要等待几秒到几十秒…"

返回结果处理

返回的 nodes 数组中每个元素包含:

  • type: text(文本片段)或 image(图片片段)
  • summary: 片段级摘要(与 text 内容相同或接近,注意区别于文件级 summary
  • text: 原始内容。文本片段为原文;图片片段为 Markdown 图片链接 ![...](url)
  • confidence: 匹配置信度(high/medium/low
  • contentId: 来源文件的 contentId

展示给用户

文本片段:

找到与"注意力机制"相关的内容:

1. **[来自 attention.pdf]** Self-attention 的计算复杂度为 O(n²·d),
   随着序列长度增加…(匹配度:高)

2. **[来自 bert.pdf]** BERT 使用多层双向 Transformer 编码器…(匹配度:高)

图片片段:

找到相关图片:

[来自 paper.pdf] 这是一张天文观测数据图,横轴为波长…
![Figure 1](https://files.iflow.cn/...)

注意:图片片段的 text 字段是 Markdown 图片链接,直接展示即可在支持 Markdown 的环境中渲染。

文件搜索方式对比

方式接口适用场景特点
语义检索(推荐)searchChunk根据问题/关键词找到最相关内容片段精准语义匹配,返回具体片段,但较慢
文件名搜索pageQueryContents + fileName 参数按文件名关键字过滤快速,但只能按文件名匹配
Agent 摘要匹配pageQueryContents 获取列表Agent 根据 summary 字段自行判断快速,但依赖文件级摘要,粒度粗

文件管理操作

优先使用 Pipeline 脚本(自动处理 contentType 获取等细节):

# 重命名
python3 scripts/pipeline_file_management.py rename --kb "竞品分析" --file "旧名" --new-name "新名.pdf"

# 删除单个文件
python3 scripts/pipeline_file_management.py delete --kb "竞品分析" --file "文件名" --force

# 批量删除
python3 scripts/pipeline_file_management.py batch-delete --kb "竞品分析" --files "文件1,文件2" --force

# 查看文件详情
python3 scripts/pipeline_file_management.py info --kb "竞品分析" --file "文件名"

# 重试解析失败的文件
python3 scripts/pipeline_file_management.py retry --kb "竞品分析" --file "文件名"

以下 API 细节仅供 Pipeline 不可用时参考。

重命名(API)

需要先通过 pageQueryContents 获取文件的 contentType(如 UPLOADV2)。

iflow_api POST "/api/v1/knowledge/updateContent2Collection" "{
  \"collectionId\": \"${COLLECTION_ID}\",
  \"contentType\": \"UPLOADV2\",
  \"contentId\": \"${CONTENT_ID}\",
  \"removeFlag\": false,
  \"extra\": {\"fileName\": \"新文件名.pdf\"}
}"

删除(API)

知识库和文件的删除不可逆,必须让用户确认。

# 删除单个文件(同样需要先获取 contentType)
iflow_api POST "/api/v1/knowledge/updateContent2Collection" "{
  \"collectionId\": \"${COLLECTION_ID}\",
  \"contentType\": \"UPLOADV2\",
  \"contentId\": \"${CONTENT_ID}\",
  \"removeFlag\": true
}"

# 批量删除
iflow_api POST "/api/v1/knowledge/batchDeleteCollectionContent" "{
  \"collectionId\": \"${COLLECTION_ID}\",
  \"contentIds\": [\"${CONTENT_ID1}\", \"${CONTENT_ID2}\"]
}"

响应处理

  • success=truecode="200":成功,从 data 提取业务字段
  • success=falsecode≠"200":失败,将 message 展示给用户
  • 常见错误码见 references/api.md

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.