diff --git a/skills/gitlink-faq/SKILL.md b/skills/gitlink-faq/SKILL.md index ef438f79..33eaff41 100644 --- a/skills/gitlink-faq/SKILL.md +++ b/skills/gitlink-faq/SKILL.md @@ -1,35 +1,45 @@ --- name: gitlink-faq -version: 1.3.0 -description: "Issue 知识库:从项目 Issue 自动分类(Bug/功能请求/使用问题),按类型归纳聚类,生成结构化知识库发布到 Wiki;增量更新已有知识库;检测新 Issue 是否与已有问题重复。当用户需要整理 Issue、归纳 Issue、总结常见问题/Bug、建立知识库、更新知识库、检查重复 Issue、查重时触发。通用 Issue 操作(创建/查看/更新/关闭/评论等)请使用 gitlink-issue skill。" +version: 2.0.0 +description: "Issue 知识库(即 FAQ、常见问题):从项目 Issue 提取问题与答案,合并同类 Issue,生成结构化 FAQ 发布到 Wiki。注意——用户说的「知识库」「FAQ」「常见问题」都是指这个 skill,这三个词是同义词。触发场景:整理 Issue、归纳 Issue、生成/建立/更新/刷新知识库、生成 FAQ、总结常见问题、检查重复 Issue、查重。通用 Issue 操作(创建/查看/更新/关闭/评论等)请使用 gitlink-issue skill。" metadata: requires: bins: ["gitlink-cli"] cliHelp: "gitlink-cli issue --help" --- -# gitlink-faq(Issue 知识库) +# gitlink-faq(Issue 知识库 / FAQ) **CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。** -**CRITICAL — 写入/删除操作前,务必先确认用户意图。默认 dry-run 预览,用户确认后再执行。** -**CRITICAL — 只读操作(`issue +list`、`issue +view`、`wiki +view`)自动连续执行,不要逐个请求用户确认。数据采集和分析阶段一气呵成,仅在最终写入步骤前暂停确认。** +**CRITICAL — 全流程自动执行,不要中途停下来问用户。从采集数据到发布 Wiki 一气呵成,最后告诉用户结果即可。** **CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`(GitHub CLI)操作 GitLink 资源。** > **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md) +## 核心概念 + +**「知识库」=「FAQ」=「常见问题」——这三个词是同一个东西。** 用户不管说哪个,都指的是这个 skill。 + +FAQ 知识库是一个 **"问题 → 答案"** 的集合,从项目 Issue 中提取真实用户遇到的问题和对应的解决方案。与统计分析报告不同,知识库的重点在于: + +- **收集 Issue 内容**:从 subject(标题)+ description(描述)+ journals(评论讨论)中提取问题和答案 +- **合并同类问题**:多个 Issue 描述的是同一个问题 → 合并为一条 FAQ,综合各方讨论给出完整答案 +- **按主题归类**:用主题标签(安装配置、CLI 命令、API 等)组织,方便检索 +- **可追溯来源**:每条 FAQ 附来源 Issue 编号,方便查看原始讨论 + ## 运行模式 | 模式 | 说明 | 典型触发语 | 需要认证 | |------|------|------------|----------| -| **模式 A:Issue 归纳** | 采集全部 Issue → 按类型分类 → 主题聚类 → 生成结构化知识库发布到 Wiki | "整理 Issue""归纳关闭的 Issue""总结项目问题""建立知识库""分析 Issue" | 是(发布 Wiki 需写入) | -| **模式 B:重复检测** | 对指定 Issue,在知识库和历史 Issue 中查找相似项,判断是否重复 | "查重""有没有类似的 Issue""这个是不是有人报过" | 否(仅读取;评论需认证) | -| **模式 C:Wiki 增量更新** | 读取已有 Wiki 页面 → 拉取新 Issue → 分类合并到现有知识库结构 → 更新 Wiki | "把这个 Issue 加到知识库""更新 Wiki 页面""补充到知识库里""同步最新 Issue 到 Wiki" | 是(读取+写入 Wiki) | +| **模式 A:生成/刷新 FAQ** | 采集全部 Issue → 提取 Q&A → 合并同类问题 → 按主题归类 → 发布 Wiki | "整理 Issue""归纳 Issue""总结常见问题""生成 FAQ""建立知识库""刷新知识库""更新知识库""生成知识库" | 是(发布 Wiki 需写入) | +| **模式 B:查找与查重** | 对指定 Issue/关键词,在知识库和历史 Issue 中查找相似项,判断是否重复 | "查重""有没有类似的 Issue""这个是不是有人报过""知识库里有没有" | 否(仅读取;评论需认证) | +| **模式 C:增量更新** | 读取已有 Wiki 页面 → 拉取新 Issue → 提取 Q&A 合并到现有知识库 → 更新 Wiki | "把这个 Issue 加到知识库""补充到知识库""同步到知识库""更新 FAQ""更新知识库" | 是(读取+写入 Wiki) | --- -## 模式 A:Issue 归纳(6 步) +## 模式 A:生成/刷新 FAQ 知识库(6 步) -当用户说 **"整理 Issue"、"归纳已关闭 Issue"、"总结项目问题"、"建立知识库"** 等时,执行以下流程。 +当用户说 **"整理 Issue"、"归纳 Issue"、"总结常见问题"、"生成 FAQ"、"建立知识库"、"刷新知识库"、"更新知识库"** 等时,执行以下流程。**记住:「知识库」=「FAQ」,用户说知识库就是在让你执行这个 skill。** ### 第 1 步:采集全部 Issue @@ -45,7 +55,7 @@ gitlink-cli issue +list --state closed --limit 100 --format json 采集量策略参见 [`references/gitlink-faq-collect.md`](references/gitlink-faq-collect.md)。 -### 第 2 步:筛选 + 读取详情(依靠 description) +### 第 2 步:筛选 + 读取详情 先按标题粗筛,仅排除: - 标题含 `[test]` / `测试` 的纯测试 Issue @@ -57,123 +67,114 @@ gitlink-cli issue +list --state closed --limit 100 --format json gitlink-cli issue +view --number N --format json ``` -提取字段:`subject`(标题)、`description`(描述)。 +提取字段:`subject`(标题)、`description`(描述)、`comment_journals_count`(评论数)。 **description 是核心分析源**: - 部分 Issue 的 description 非常详细(含复现步骤、环境信息、修复建议) -- description 的质量直接决定分析深度 +- description 的质量直接决定能提取出什么质量的 Q&A - `comment_journals_count` 数值可参考(表示讨论热度),但实际评论内容无法通过 API 获取(见下方 API 限制) 每批 20-30 个,尽量覆盖所有非测试 Issue。 -### 第 3 步:Issue 类型分类 +### 第 3 步:从每个 Issue 提取 Q&A 对 -对每条 Issue,AI 根据 (subject + description) 判断类型。**不要因为"缺少 journals"或"状态未关闭"而排除 Issue**——是否有分析价值取决于内容本身,不是状态。 +对每条 Issue,AI 根据 (subject + description) 提取"问题 → 答案"对。 -| 类型 | 判断依据 | 纳入条件 | 分析价值 | -|------|----------|----------|----------| -| **Bug 报告** | 描述异常行为、报错、与预期不符 | description 非空 或 subject 明确描述症状 | 高频 Bug = 模块质量信号 | -| **功能请求** | 建议新增能力、改进体验 | 保留。高频请求反映用户需求 | 用户需求优先级 | -| **使用问题** | 不知道怎么用、配置不清楚 | 保留。即使未回复也是需求信号 | 文档/体验改进方向 | -| **其他** | 不属于以上三类 | 标题无实质内容则忽略 | 低 | +**提取规则**: -**输出**:每条 Issue 带上类型标签。 - -**宽松原则**:宁可多留一条低价值的,也别漏掉一条有洞察的。不确定类型的归入"其他"而非丢弃。 - -### 第 4 步:按类型分别聚类 - -将同类型的 Issue 按语义相似度聚类。不同类型聚类维度不同: - -| 类型 | 聚类维度 | 聚类目标 | +| 字段 | 提取来源 | 提取方法 | |------|----------|----------| -| Bug 报告 | 按**出问题的模块/功能**归类 | 找出"哪个模块 Bug 最多"、"同类 Bug 的共同根因" | -| 功能请求 | 按**请求的功能领域**归类 | 找出"用户最想要什么能力"、"哪些增强呼声最高" | -| 使用问题 | 按**操作场景**归类 | 传统 Q&A:提炼"问题 → 答案" | +| **Q(问题)** | subject + description 开头部分 | 提炼 Issue 要解决的核心问题,用一句话表达 | +| **A(答案)** | description 后半部分 + journals(如有) | 提取解决方案、workaround、配置方法、官方回复等 | -**Bug 聚类输出**: +**不同 Issue 类型的 Q&A 转换**: -```json -{ - "module": "Issue 数据显示", - "bug_count": 4, - "pattern": "CLI 返回数据与网页端不一致、字段缺失", - "affected_issues": [5, 7, 15, 18], - "typical_symptom": "issue +view / pr +view 返回结果缺少关键字段或与网页端不一致" -} -``` +| Issue 原始类型 | Q 示例 | A 提取策略 | +|---------------|--------|------------| +| Bug 报告 | "为什么执行 xxx 命令后出现 yyy 错误?" | 从 description 提取修复方法/workaround;如无则写"暂未找到解决方案" | +| 功能请求 | "能否支持 xxx 功能?" | 从 description/journals 提取当前状态(已支持/规划中/不支持+替代方案) | +| 使用问题 | "如何配置/使用 xxx?" | 从 description 提取操作步骤;从 journals 提取维护者回复 | -**功能请求聚类输出**: +**宽松原则**:宁可多留一条不完美的 Q&A,也别漏掉一条有价值的。不确定答案质量的标注"待确认"而非丢弃。 -```json -{ - "feature_area": "API 能力增强", - "request_count": 3, - "pattern": "希望 API 支持更多查询/操作能力", - "affected_issues": [9, 14, 21], - "common_ask": "支持按序号查询 Issue、读取仓库文件、返回完整时间字段" -} -``` +### 第 4 步:合并同类问题 -**使用问题聚类输出**(仅当同类 ≥2 条时生成 Q&A): +多个 Issue 描述的是同一个问题 → 合并为一条 FAQ 条目。 -```json -{ - "topic": "安装配置", - "question": "gitlink-cli 安装后无法运行怎么办?", - "answer": "检查 PATH、确认平台支持,详见安装文档", - "source_issues": [16, 20] -} -``` +合并判断标准: +- 两个 Issue 的 subject 高度相似(同义表述) +- 两个 Issue 描述的症状/需求一致 +- 两个 Issue 的根因/答案相同 -### 第 5 步:生成知识库文档 +合并后的 FAQ 条目: +- **Q**:综合多个 Issue 提炼一个清晰的问题 +- **A**:综合各方描述和讨论给出最完整的答案 +- **来源**:列出所有相关 Issue 编号 -按以下结构组织 Markdown: +详细合并逻辑参见 [`references/gitlink-faq-cluster.md`](references/gitlink-faq-cluster.md)。 + +### 第 5 步:按主题归类 + 生成 FAQ 文档 + +将 Q&A 条目按**主题标签**归类。每个标签有对应图标,生成文档时章节标题必须带图标。标签体系: + +| 图标 | 主题标签 | 适用范围 | +|------|----------|----------| +| 🔧 | `安装配置` | 安装、登录、认证、Token 配置、代理设置 | +| 💻 | `CLI 命令` | 命令使用、参数、输出格式、交互行为 | +| 🔗 | `API 与集成` | API 调用、Webhook、CI/CD 集成 | +| 📊 | `数据显示` | 数据不一致、字段缺失、展示错误 | +| 🖥️ | `平台兼容` | 操作系统兼容、环境依赖 | +| ⚡ | `性能` | 响应慢、超时、资源占用 | +| 💡 | `功能请求` | 用户希望新增或改进的功能 | +| 📦 | `其他` | 不属于以上类别 | + +> 一个 Q&A 条目可以打多个标签。 + +按以下结构组织 Markdown(**注意章节标题前必须带图标**): ```markdown -# 📊 Issue 知识库 +# 📖 {项目} FAQ 知识库 -> 自动生成 | 数据来源:已关闭 Issue({N} 条) -> 更新时间:{DATE} +> 自动生成 | 收录 {N} 个问题 | 更新时间:{DATE} +> 项目:{OWNER}/{REPO} -## 🐛 Bug 高频模块 +## 🔧 安装配置 -### {模块名}({N} 个 Bug) -- **典型症状**: ... -- **涉及 Issue**: #A, #B, #C -- **已知修复**: ...(如有) - -## 💡 功能请求热度 - -### {功能领域}({N} 个请求) -- **用户期望**: ... -- **涉及 Issue**: #D, #E, #F - -## 📖 常见使用问题 - -### Q: {问题}? +### Q1: {问题}? **A:** {答案} -> 来源: #G, #H +> 📎 来源: [#N]({链接}), [#M]({链接}) + +## 💻 CLI 命令 + +### Q2: {问题}? +**A:** {答案} +> 📎 来源: [#N]({链接}) + +... ``` -根据实际数据量,若某类型 Issue 过少(<2 条),该章节可省略或合并到"其他"。 +完整模板参见 [`examples/faq-template.md`](examples/faq-template.md)。 -文档模板参见 [`examples/faq-template.md`](examples/faq-template.md)。 +生成原则参见 [`references/gitlink-faq-generate.md`](references/gitlink-faq-generate.md)。 -完成后保存为 `./issue-knowledge-base.md`,展示给用户预览。 +完成后保存为 `./issue-faq.md`,然后直接进入第 6 步发布,不需要等用户确认。 ### 第 6 步:发布到 Wiki -用户确认后: +直接发布,不要询问用户: ```bash -# 首次创建 -gitlink-cli wiki +create --title "Issue-知识库" --file ./issue-knowledge-base.md +# 先检查 Wiki 页面是否已存在 +gitlink-cli wiki +view --title "Issue-知识库" --format json -# 后续更新 -gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base.md +# 如果存在(返回内容)→ 用 update;如果 404 → 用 create +gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-faq.md +# 或 +gitlink-cli wiki +create --title "Issue-知识库" --file ./issue-faq.md ``` +发布完成后给用户反馈:发布了多少条 FAQ、Wiki 页面标题。 + --- ## 模式 B:Issue 查找与查重 @@ -220,9 +221,9 @@ gitlink-cli issue +view --number N --format json - 维护者有无回复/解决方案 - 相关度判定 -### 第 5 步:执行操作(仅查重+用户确认后) +### 第 5 步:执行操作(自动) -如果是查重场景且判定高度重复,用户确认后执行: +如果判定高度重复,直接添加评论引导用户,不要询问: ```bash # 添加评论(使用 Issue ID,参见 gitlink-issue skill) @@ -238,9 +239,9 @@ gitlink-cli issue +batch-label --label duplicate --numbers N,M ## 模式 C:Wiki 增量更新 -当用户说 **"把这个 Issue 加到知识库里"、"更新 Wiki 页面"、"补充到知识库"、"同步最新 Issue 到 Wiki"** 等时执行。 +当用户说 **"把这个 Issue 加到知识库里"、"更新 FAQ"、"更新知识库"、"补充到知识库"、"同步到知识库"** 等时执行。 -**核心思路**:不是重新生成整个知识库,而是读取现有 Wiki 内容 → 拉取新 Issue → 分类合并 → 更新 Wiki。 +**核心思路**:不是重新生成整个知识库,而是读取现有 Wiki 内容 → 拉取新 Issue → 提取 Q&A → 合并到现有结构 → 更新 Wiki。 ### 第 1 步:读取现有 Wiki @@ -267,35 +268,38 @@ gitlink-cli issue +view --number N --format json | "把关于 XX 的 Issue 补充进去" | 先按关键词搜索(同模式 B 第 2-3 步),找到匹配 Issue 后逐个读详情 | | "把最近新增的 Issue 同步到 Wiki" | 用户未指定具体编号时,才拉全量列表,对比 Wiki 中已有的编号做差集 | -### 第 3 步:分类新 Issue +### 第 3 步:从新 Issue 提取 Q&A -### 第 4 步:合并到现有知识库结构 +同模式 A 第 3 步,从每个新 Issue 提取"问题 → 答案"对。 -将新 Issue 按类型归入现有章节: +### 第 4 步:合并到现有知识库 -- **Bug**:归入"Bug 高频模块",若属于已有模块则追加,否则新建模块条目 -- **功能请求**:归入"功能请求热度",若属于已有领域则合并,否则新建领域条目 -- **使用问题**:归入"常见使用问题",新建 Q&A 条目 +将新 Q&A 条目归入现有主题分类: + +- **已存在同类问题**:合并到已有 Q&A 条目,更新答案和来源列表 +- **全新问题**:在对应主题章节下新建 Q&A 条目 合并时更新: -- Issue 计数(总数、各类型数量) +- 收录问题计数 - 更新时间 -- 受影响的 `-- 涉及 Issue` 列表 +- 来源 Issue 列表 -### 第 5 步:生成合并后的文档并预览 +### 第 5 步:生成合并后的文档 -将合并后的完整 Markdown 展示给用户预览,标注新增/变更的部分(可用 `[NEW]` 标记)。 +将合并后的完整 Markdown 保存为 `./issue-faq.md`,标注新增/变更的部分(可用 `[NEW]` 标记)。 ### 第 6 步:更新 Wiki -用户确认后: +直接更新,不要询问用户: ```bash -gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base.md +gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-faq.md ``` **CRITICAL**:必须用 `wiki +update`(不是 `+create`),因为页面已存在。 +发布完成后给用户反馈:新增了多少条 FAQ、更新了多少条已有条目。 + --- ## 命令速查 @@ -326,20 +330,21 @@ gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base ## 注意事项 -- **先分类再聚类**:不同 Issue 类型不能混在一起聚类(Bug 和功能请求本质不同) -- **所有结论必须有来源**:Bug 模式、功能热度、Q&A 答案都必须来自实际 Issue,不编造 -- **数据不足时如实说明**:某类型 < 2 条时不强行归纳,标注"暂无足够数据" +- **从 Issue 提取,不编造**:Q&A 的 Q 和 A 都必须来自实际 Issue 的 subject/description/journals,不凭空编造 +- **合并优于罗列**:多个 Issue 问同一个问题 → 合并为一条 FAQ,而不是罗列多条相似条目 +- **答案有据可查**:每条 FAQ 必须附来源 Issue 编号 +- **数据不足时如实说明**:无法提取答案的 Issue 标注"待确认",不强行写答案 - **评论语气友好**:重复检测是帮助用户,不是指责 -- **用户确认优先**:所有写入操作前先预览 +- **全自动执行**:触发后从头到尾自动完成,不中途询问用户,最后告知结果即可 ## References -- [gitlink-faq-collect](references/gitlink-faq-collect.md) — Issue 数据采集 -- [gitlink-faq-cluster](references/gitlink-faq-cluster.md) — 分类+聚类算法 -- [gitlink-faq-generate](references/gitlink-faq-generate.md) — 知识库文档生成 +- [gitlink-faq-collect](references/gitlink-faq-collect.md) — Issue 数据采集与 Q&A 提取 +- [gitlink-faq-cluster](references/gitlink-faq-cluster.md) — 同类问题合并逻辑 +- [gitlink-faq-generate](references/gitlink-faq-generate.md) — FAQ 知识库文档生成 - [gitlink-faq-detect](references/gitlink-faq-detect.md) — 重复检测逻辑 - [gitlink-faq-publish](references/gitlink-faq-publish.md) — Wiki 发布 - [weekly-faq-refresh-workflow](examples/weekly-faq-refresh-workflow.md) — 定期刷新示例 - [duplicate-detection-demo](examples/duplicate-detection-demo.md) — 重复检测示例 -- [faq-template](examples/faq-template.md) — 文档模板 +- [faq-template](examples/faq-template.md) — FAQ 文档模板 - [gitlink-shared](../gitlink-shared/SKILL.md) — 认证和全局参数 diff --git a/skills/gitlink-faq/examples/duplicate-detection-demo.md b/skills/gitlink-faq/examples/duplicate-detection-demo.md index 5b809189..f8810b95 100644 --- a/skills/gitlink-faq/examples/duplicate-detection-demo.md +++ b/skills/gitlink-faq/examples/duplicate-detection-demo.md @@ -33,8 +33,8 @@ gitlink-cli issue +view --number 312 --format json ### Step 3: 获取对比数据 ```bash -# 获取 FAQ -gitlink-cli wiki +view --title "FAQ" --format json +# 获取 FAQ 知识库 +gitlink-cli wiki +view --title "Issue-知识库" --format json # 获取已关闭 Issue gitlink-cli issue +list --state closed --limit 100 --format json @@ -90,7 +90,7 @@ C. 仅查看,不操作 ```bash gitlink-cli issue +comment --number 312 --body "你好!检测到你的问题与已有内容高度相似: -- 📖 [FAQ - Q3: 登录失败或提示 401 错误](wiki/FAQ) +- 📖 [FAQ - Q3: 登录失败或提示 401 错误](wiki/Issue-知识库) - 🔗 Issue #142: 登录页面显示空白(浏览器缓存问题) - 🔗 Issue #205: 无法登录,页面无响应(DNS 解析问题) diff --git a/skills/gitlink-faq/examples/faq-template.md b/skills/gitlink-faq/examples/faq-template.md index baf6cb1e..3fed995c 100644 --- a/skills/gitlink-faq/examples/faq-template.md +++ b/skills/gitlink-faq/examples/faq-template.md @@ -1,86 +1,95 @@ -# 📊 Issue 知识库 +# 📖 {项目名} FAQ 知识库 -> 自动生成 | 数据来源:已关闭 Issue({N} 条有效) -> 更新时间:{DATE} +> 自动生成 | 收录 {N} 个问题 | 更新时间:{DATE} > 项目:{OWNER}/{REPO} +> +> 本知识库从项目 Issue 中自动提取,将用户遇到的实际问题与解决方案整理为 FAQ。如果你遇到问题,先在下面查找;如果没有找到答案,欢迎提交新 Issue。 --- -## 📂 概览 +## 🔧 安装配置 -| 类型 | 数量 | 聚类数 | -|------|------|--------| -| 🐛 Bug 报告 | {BUG_COUNT} | {BUG_CLUSTER_COUNT} 个模块 | -| 💡 功能请求 | {FEATURE_COUNT} | {FEATURE_CLUSTER_COUNT} 个领域 | -| 📖 使用问题 | {QUESTION_COUNT} | {QUESTION_CLUSTER_COUNT} 个主题 | +### Q1: {用一句话描述用户遇到的问题/想实现的目标}? ---- +**A:** {从 Issue description 和评论讨论中提取的解决方案、操作步骤、workaround 或官方回复} -## 🐛 Bug 高频模块 +> 📎 来源: [#{编号}]({链接}) -### {模块名}({N} 个 Bug)🔥🔥 - -**典型症状**: {一句话描述这类 Bug 的共同表现} - -**涉及 Issue**: [#{编号}]({链接}), [#{编号}]({链接}) - -**已知修复**: {如有统一修复方案则写,无则写"部分已单独修复,详见表中 Issue"} - ---- - -### {模块名}({N} 个 Bug)🔥 - -**典型症状**: ... - -**涉及 Issue**: ... - -**已知修复**: ... - ---- - -> 如无高频 Bug(均 < 2 条),本章标注"暂无高频 Bug 模式,Bug 报告较分散"。 - ---- - -## 💡 功能请求热度 - -### {功能领域}({N} 个请求)🔥🔥🔥 - -**用户期望**: {一句话总结用户想要什么} - -**涉及 Issue**: [#{编号}]({链接}), [#{编号}]({链接}) - ---- - -### {功能领域}({N} 个请求)🔥 - -**用户期望**: ... - -**涉及 Issue**: ... - ---- - -> 如无热门功能请求,本章标注"暂无集中的功能请求"。 - ---- - -## 📖 常见使用问题 - -### Q{N}: {问题}? +### Q2: {问题}? **A:** {答案} -> 📎 来源 Issue: [#{编号}]({链接}), [#{编号}]({链接}) - -### Q{N}: {问题}? - -**A:** {答案} - -> 📎 来源 Issue: [#{编号}]({链接}) +> 📎 来源: [#{编号}]({链接}), [#{编号}]({链接}) --- -> 如无常见使用问题,本章标注"暂无常见使用问题"。 +## 💻 CLI 命令 + +### Q{序号}: {问题}? + +**A:** {答案} + +> 📎 来源: [#{编号}]({链接}) + +--- + +## 🔗 API 与集成 + +### Q{序号}: {问题}? + +**A:** {答案} + +> 📎 来源: [#{编号}]({链接}) + +--- + +## 📊 数据显示 + +### Q{序号}: {问题}? + +**A:** {答案} + +> 📎 来源: [#{编号}]({链接}) + +--- + +## 🖥️ 平台兼容 + +### Q{序号}: {问题}? + +**A:** {答案} + +> 📎 来源: [#{编号}]({链接}) + +--- + +## ⚡ 性能 + +### Q{序号}: {问题}? + +**A:** {答案} + +> 📎 来源: [#{编号}]({链接}) + +--- + +## 💡 功能请求 + +### Q{序号}: 能否支持 {功能描述}? + +**A:** {当前状态:已支持/开发中/暂不支持。如暂不支持,说明替代方案或原因} + +> 📎 来源: [#{编号}]({链接}) + +--- + +## 📦 其他 + +### Q{序号}: {问题}? + +**A:** {答案} + +> 📎 来源: [#{编号}]({链接}) --- diff --git a/skills/gitlink-faq/examples/weekly-faq-refresh-workflow.md b/skills/gitlink-faq/examples/weekly-faq-refresh-workflow.md index d6a6cf7f..04c34305 100644 --- a/skills/gitlink-faq/examples/weekly-faq-refresh-workflow.md +++ b/skills/gitlink-faq/examples/weekly-faq-refresh-workflow.md @@ -1,19 +1,19 @@ -# 每周刷新 Issue 知识库示例 +# 每周刷新 FAQ 知识库示例 -> 端到端演示:定期归纳已关闭 Issue,更新知识库 Wiki。 +> 端到端演示:定期从 Issue 提取 Q&A,更新知识库 Wiki。 ## 场景 -gitlink-cli 项目维护者,本周关闭了 20 个 Issue,想更新知识库。 +gitlink-cli 项目维护者,本周关闭了 20 个 Issue,想更新 FAQ 知识库。 ## 完整对话流程 ### 触发 ``` -用户: 帮我整理这周关闭的 Issue,更新知识库 +用户: 帮我整理这周关闭的 Issue,更新 FAQ -AI: 好的,先采集最近关闭的 Issue。 +AI: 好的,先采集最近的 Issue。 ``` ### Step 1-2: 采集 + 筛选 @@ -23,48 +23,48 @@ gitlink-cli issue +list --state closed --limit 100 --format json ``` ``` -AI 采集到 20 个已关闭 Issue: -- 排除 5 个测试 Issue -- 剩余 15 个有效 Issue,读取详情中... +AI 采集到 20 个 Issue: +- 排除 3 个测试 Issue +- 剩余 17 个有效 Issue,读取详情并提取 Q&A 中... ``` -### Step 3-4: 分类 + 聚类 +### Step 3-4: 提取 Q&A + 合并同类问题 ``` AI 展示分析结果: -📊 Issue 分类结果(共 15 条有效) +📖 从 17 个 Issue 中提取了 12 条 FAQ(已合并 5 组同类问题) -类型分布: -| 类型 | 数量 | 占比 | -|------|------|------| -| 🐛 Bug 报告 | 8 | 53% | -| 💡 功能请求 | 5 | 33% | -| 📖 使用问题 | 2 | 13% | +## 安装配置 +### Q1: 安装 gitlink-cli 后运行报 command not found 怎么办? +**A:** 将 ~/.local/bin 加入 PATH... +> 📎 来源: #16, #20 -─────────────── +### Q2: 如何配置企业代理? +**A:** 设置 HTTP_PROXY 和 HTTPS_PROXY 环境变量... +> 📎 来源: #42 -🐛 Bug 高频模块: -| 模块 | Bug 数 | 典型症状 | -|------|--------|----------| -| Issue/PR 数据展示 | 4 | view 命令返回字段与网页不一致 | -| 命令执行 | 2 | 特定参数下命令静默失败 | -| 平台兼容 | 2 | Windows 下行为异常 | +## CLI 命令 +### Q3: issue +view 返回的 JSON 缺少部分字段? +**A:** 这是已知的 API 版本差异,部分字段需要特定 API 版本才返回... +> 📎 来源: #5, #7, #15 -💡 功能请求热度: -| 领域 | 请求数 | 用户期望 | -|------|--------|----------| -| API 查询增强 | 3 | 支持更丰富的查询和字段返回 | +### Q4: pr +list 在 Windows 下输出乱码? +**A:** 设置终端编码为 UTF-8:chcp 65001... +> 📎 来源: #33 -📖 使用问题(2 条): -- 安装后如何配置环境变量? -- API 命令占位符怎么用? +## API 与集成 +### Q5: 能否支持在 CI 中使用 Token 认证? +**A:** 已支持。设置 GITLINK_TOKEN 环境变量即可... +> 📎 来源: #28 + +... ``` ### Step 5: 生成并确认 ``` -AI 生成知识库 Markdown,展示前几段预览... +AI 生成 FAQ Markdown,展示预览... 用户: 可以,发布到 Wiki @@ -74,12 +74,12 @@ AI: 好的,更新 Wiki 页面... ### Step 6: 发布 ```bash -gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base.md +gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-faq.md ``` ``` -AI: ✅ 知识库已更新! +AI: ✅ FAQ 知识库已更新! - Wiki 页面: Issue-知识库 -- 本次新增: 15 条 Issue → 6 个聚类 +- 本次新增: 17 条 Issue → 12 条 FAQ(合并 5 组同类问题) - 下次建议: 2 周后刷新 ``` diff --git a/skills/gitlink-faq/references/gitlink-faq-cluster.md b/skills/gitlink-faq/references/gitlink-faq-cluster.md index 1dd20403..e14ba685 100644 --- a/skills/gitlink-faq/references/gitlink-faq-cluster.md +++ b/skills/gitlink-faq/references/gitlink-faq-cluster.md @@ -1,114 +1,140 @@ -# gitlink-faq 分类与聚类 +# gitlink-faq 同类问题合并 -> 本文档说明 AI 如何对 Issue 先分类(Bug/功能请求/使用问题),再在同一类型内聚类。 +> 本文档说明如何判断多个 Issue 描述的是同一个问题,以及如何将它们合并为一条 FAQ 条目。 -## 分析前提 - -**聚类仅基于 `subject` + `description` 两个字段**。GitLink API 不支持读取 Issue 评论(journals),无法获取讨论/解决方案。但优秀的 description 往往包含:复现步骤、环境信息、修复建议、详细场景描述——这些都是高质量聚类的基础。 - -## 两步流程 +## 合并流程 ``` ┌─────────────────────────────────────────┐ -│ Step 1: 类型分类 │ -│ 每条 Issue → AI 判断类型 │ -│ Bug / Feature Request / Usage Question │ -│ 不确定的归入"其他"但保留,不丢弃 │ +│ Step 1: Q&A 提取完成 │ +│ 每条 Issue → {Q, A, confidence} │ └──────────────────┬──────────────────────┘ ▼ ┌─────────────────────────────────────────┐ -│ Step 2: 类型内聚类 │ -│ Bug → 按出问题的模块分类 │ -│ Feature → 按功能领域分类 │ -│ Usage → 按操作场景分类 │ +│ Step 2: 相似度判断 │ +│ 比较 Q 的语义相似度 │ +│ 比较 A 的答案是否一致 │ +└──────────────────┬──────────────────────┘ + ▼ +┌─────────────────────────────────────────┐ +│ Step 3: 合并 │ +│ 同一问题 → 综合 Q + 综合 A + 合并来源 │ +│ 不同问题 → 各自保留 │ +└──────────────────┬──────────────────────┘ + ▼ +┌─────────────────────────────────────────┐ +│ Step 4: 按主题标签归类 │ +│ 为每条 FAQ 打上主题标签 │ └─────────────────────────────────────────┘ ``` -## Step 1: 类型分类 +## Step 1: 相似度判断 -### 分类 Prompt +### 判断 Prompt ``` -你正在分析一个项目的已关闭 Issue。请对每条 Issue 判断它属于以下哪种类型: +你正在判断两个 Issue 是否描述的是同一个问题,是否应该合并为一条 FAQ。 -类型定义: -- bug: 描述异常行为、报错、行为与预期不符、数据缺失/错误 -- feature: 建议新增功能、增强现有能力、改进体验 -- question: 不知道如何使用、配置不清楚、询问是否支持某能力 -- other: 不属于以上三类(如测试、讨论、公告) +## Issue A +Q: {Q_A} +A: {A_A} -返回 JSON 数组: -[{ - "issue_number": N, - "subject": "标题", - "type": "bug|feature|question|other", +## Issue B +Q: {Q_B} +A: {A_B} + +请判断它们是否属于同一问题: +- **same**:描述的是同一个问题,只是表述不同(应合并) +- **related**:涉及同一主题但具体问题不同(不合并,但可放同一主题下) +- **different**:完全不同的问题 + +返回 JSON: +{ + "level": "same|related|different", "reason": "一句话判断依据" -}] -``` - -### 分类规则 - -| 类型 | 判断信号 | 反例(容易误判) | -|------|----------|-----------------| -| **bug** | 含"报错""不生效""异常""不一致""缺失""无法"等 | "希望能 xx"是 feature 不是 bug | -| **feature** | 含"希望""建议""能否支持""加一个""要是能"等 | "xx 不支持"可能是 question | -| **question** | 含"怎么""如何""能不能""是否支持"等,且是咨询性质 | "xx 报错怎么办"→ 先确认是不是 bug | -| **other** | 标题含"test""测试""讨论""收集"等 | 不确定时归为 other | - -## Step 2: 类型内聚类 - -### Bug 聚类 - -按**出问题的模块/组件/功能**归类,找出高频 Bug 模式。 - -聚类维度: -- 影响的是哪个命令/接口(如 `issue +view`、`pr +list`、`api` 命令) -- 问题类型是否相同(数据显示错误 ×4 / 命令执行失败 ×2 / 平台兼容 ×1) -- Bug 之间是否存在共同根因 - -输出格式: - -```json -{ - "module": "Issue/PR 数据展示", - "bug_count": 4, - "pattern": "CLI 返回数据字段与网页端不一致或字段缺失", - "affected_issues": [5, 7, 15, 18], - "typical_symptom": "使用 view 命令查看详情时,部分字段(如关闭时间、描述等)缺失或与网页端不一致" } ``` -### 功能请求聚类 +### 合并判断标准 -按**请求的功能领域**归类,找出用户需求热度。 +| 判断 | 条件 | 处理 | +|------|------|------| +| **same(合并)** | 两个 Issue 的症状/需求一致,答案也一致或互补 | 合并为一条 FAQ | +| **related(相邻)** | 同一主题但具体问题不同 | 不合并,放在同一主题标签下相邻排列 | +| **different(独立)** | 完全无关 | 各自独立 | -聚类维度: -- 请求的是哪个能力方向(API 增强 / 命令扩展 / 平台支持) -- 是否指向同一个需求的不同表述 -- 是否有用户点赞/讨论热度叠加 +### 合并判断示例 -输出格式: +``` +✅ 合并: +Issue #16: Q="安装后运行报 command not found?" A="加入 PATH" +Issue #20: Q="gitlink-cli 命令找不到?" A="检查 PATH 配置" +→ 同一问题,表述不同,合并 + +❌ 不合并: +Issue #16: Q="安装后运行报 command not found?" A="加入 PATH" +Issue #42: Q="如何配置代理?" A="设置 HTTP_PROXY" +→ 都是安装配置主题,但是不同的问题 +``` + +## Step 2: 合并规则 + +### 合并后的 Q(问题) + +- 选择表述更清晰、更完整的那个 Q +- 如果各有优劣,综合提炼一个新的 Q + +### 合并后的 A(答案) + +- 优先采用 confidence 更高的 A +- 如果两个 A 互补(各有信息),合并为更完整的答案 +- 标注"综合自 Issue #A 和 #B 的讨论" + +### 合并后的来源 + +- 列出所有相关 Issue 编号 +- 按编号排序 + +### 合并示例 ```json +// 合并前:3 条独立条目 +[ + { "issue": 16, "Q": "安装后运行报 command not found?", "A": "加入 PATH", "confidence": "high" }, + { "issue": 20, "Q": "gitlink-cli 命令找不到?", "A": "检查 ~/.local/bin 在 PATH 中", "confidence": "high" }, + { "issue": 35, "Q": "终端提示 command not found: gitlink-cli", "A": "暂未找到解决方案", "confidence": "low" } +] + +// 合并后:1 条 FAQ { - "feature_area": "API 查询能力增强", - "request_count": 3, - "pattern": "用户希望 API 支持更丰富的查询和操作", - "affected_issues": [9, 14, 21], - "common_ask": "支持按序号查询、返回完整时间字段、读取仓库文件" + "Q": "安装 gitlink-cli 后运行报 command not found 怎么办?", + "A": "将 ~/.local/bin 加入 PATH 环境变量。\\nLinux/Mac: export PATH=$PATH:~/.local/bin\\nWindows: 将 %USERPROFILE%\\.local\\bin 加入系统 PATH", + "confidence": "high", + "sources": [16, 20, 35], + "labels": ["安装配置"] } ``` -### 使用问题聚类(传统 Q&A) +## Step 3: 按主题标签归类 -与传统 FAQ 一致:按操作场景归类,提炼"问题 → 答案"。 +合并完成后,为每条 FAQ 打上主题标签。每个标签有对应图标,生成文档时章节标题必须带图标。标签体系: -仅当同类 ≥ 2 条时生成 Q&A 条目。 +| 图标 | 主题标签 | 适用范围 | 关键词信号 | +|------|----------|----------|------------| +| 🔧 | `安装配置` | 安装、登录、认证、Token、代理、环境变量 | install, auth, login, token, proxy, config, setup | +| 💻 | `CLI 命令` | 命令使用、参数、输出格式、交互 | command, flag, option, output, format | +| 🔗 | `API 与集成` | API 调用、Webhook、CI/CD | api, webhook, ci, cd, integration | +| 📊 | `数据显示` | 数据不一致、字段缺失、展示 | data, field, display, missing, mismatch | +| 🖥️ | `平台兼容` | OS 兼容、环境依赖 | windows, linux, macos, platform, compatibility | +| ⚡ | `性能` | 响应慢、超时、资源 | slow, timeout, performance, memory | +| 💡 | `功能请求` | 用户希望新增/改进 | 希望、能否、建议、支持 | +| 📦 | `其他` | 不属于以上 | — | -## 批次合并 +> 一条 FAQ 可以打多个标签。例如一个 Bug 既是 CLI 命令问题又是数据显示问题,就打两个标签。 -多批次处理后的合并规则: +## 排序规则 -1. 同类型的相同模块/领域 → 合并,更新 issue_count -2. 跨类型的关联 Issue 标注引用(如一个 Bug 可能由某个 Feature Request 修复) -3. 最终按 `bug_count` / `request_count` 降序排列 +同一主题标签内的 FAQ 条目按以下顺序排列: +1. 合并来源多的在前(反映问题更常见) +2. 同等数量按 confidence 高的在前 +3. 同等 confidence 按 Issue 编号升序 diff --git a/skills/gitlink-faq/references/gitlink-faq-collect.md b/skills/gitlink-faq/references/gitlink-faq-collect.md index 941f6de1..3c5ed615 100644 --- a/skills/gitlink-faq/references/gitlink-faq-collect.md +++ b/skills/gitlink-faq/references/gitlink-faq-collect.md @@ -1,6 +1,6 @@ -# gitlink-faq 数据采集 +# gitlink-faq 数据采集与 Q&A 提取 -> 本文档详细说明 FAQ 生成时 Issue 数据的采集策略和参数。 +> 本文档详细说明如何采集 Issue 数据,以及如何从 Issue 中提取"问题 → 答案"对。 ## 数据源 @@ -8,66 +8,115 @@ |------|------|------| | Issue 列表(open) | `issue +list --state open --limit 100 --format json` | 仍开放的 Issue | | Issue 列表(closed) | `issue +list --state closed --limit 100 --format json` | 已关闭的 Issue | -| Issue 详情 | `issue +view --number N --format json` | 含标题、描述、journals(评论历史) | +| Issue 详情 | `issue +view --number N --format json` | 含标题、描述、comment_journals_count(评论数) | -> **关键认知**:GitLink 平台很多已解决的 Issue 不会被及时设为"关闭"状态,存在延迟甚至从未更改状态。因此必须**同时采集 open 和 closed 两份列表**,合并去重后才能得到完整的可分析 Issue 集合。用 `issue +view` 读取的 `journals`(评论讨论历史)比 `status` 字段更能判断一个 Issue 是否"已解决"。 +> **关键认知**:GitLink 平台很多已解决的 Issue 不会被及时设为"关闭"状态。因此必须**同时采集 open 和 closed 两份列表**,合并去重后才能得到完整的 Issue 集合。 ## 筛选策略 -### 有价值 vs 无价值 Issue - -采集后需筛选。注意:GitLink API **不支持读取 Issue 评论(journals)**,筛选只能基于 subject + description。 +采集后需筛选。注意:GitLink API **不支持读取 Issue 评论(journals)**,提取只能基于 subject + description。 **宽松筛选原则**(只排除明确无价值的): | 类型 | 是否纳入 | 原因 | |------|----------|------| -| 有 description 的 Issue | ✅ 纳入 | description 可能非常详细 | -| 仅有标题无 description | ✅ 纳入 | 标题本身有价值信息 | -| 功能请求 | ✅ 纳入 | 反映用户需求优先级 | +| 有 description 的 Issue | ✅ 纳入 | description 可能包含详细的复现步骤和解决方案 | +| 仅有标题无 description | ✅ 纳入 | 标题本身承载了问题信息 | +| 功能请求 | ✅ 纳入 | 可转为"能否支持 xx?"格式的 FAQ | | 标题含 `[test]`/`测试` | ❌ 排除 | 纯测试数据 | | 标题为空或纯占位符 | ❌ 排除 | 无有效信息 | -> 不再排除"功能请求"和"仅有标题"的 Issue。没有评论数据的情况下,最大化保留所有可分析的 Issue。 +> **宽松吸纳**:宁可多留一条低质量的,也别漏掉一条有答案的。 -### 分批采集 +## 分批采集 ``` Issue 总量 采集策略 ───────── ───────── -< 20 全部采集,逐个读详情(含 journals) +< 20 全部采集,逐个读详情 20-50 全部采集,按标题粗筛后读重点 Issue 详情 -50-100 分批采集(每批50),先按标题粗筛 +50-100 分批采集(每批 50),先按标题粗筛 > 100 取最近活跃的 100 个,优先高参与度的 ``` ### 参与度筛选 -优先采集"高参与度"的 Issue(更有分析价值): -- **journals 非空**(有人讨论过)——这是最重要的筛选信号,空 journals 的 Issue 分析价值极低 -- journals 中包含维护者回复(优先提取作为答案/修复方案) -- 评论数量 ≥ 2 +优先采集"高参与度"的 Issue(更有可能提取到完整答案): +- `comment_journals_count ≥ 2`(有人讨论过,答案可能来自讨论) +- journals 中包含维护者回复(优先作为答案来源) +- description 中包含"解决""修复""方案""workaround"等关键词 -### API 限制:无法读取评论 +## Q&A 提取方法 -`issue +view` 只返回 `comment_journals_count`(评论数),不返回评论内容。`GET /v1/.../issues/{N}/journals` 端点返回 HTML 而非 JSON,无法通过 API 获取评论正文。 +这是整个流程的核心:从每条 Issue 的 `subject` + `description` 中提取"问题(Q)→ 答案(A)"。 -因此分析只能基于 `subject` + `description` 两个字段。这也是筛选规则放宽的原因——没有评论作为补充信息,凭标题和描述能分析到的内容更有限,需要尽可能保留更多 Issue 来保证覆盖度。 +### 提取 Prompt + +``` +你正在从项目 Issue 中提取 FAQ 知识库条目。请对每条 Issue 提取 Q&A 对。 + +## Issue 数据 +编号: {number} +标题: {subject} +描述: {description} +评论数: {comment_journals_count} + +## 提取规则 +1. Q(问题):用一句话概括这个 Issue 要解决的核心问题。用中文表述,以问号结尾。 +2. A(答案):从 description 中提取解决方案、操作步骤、配置方法、workaround 或官方回复。 + - 如果 description 明确描述了解决方法 → 直接提取 + - 如果 description 仅有问题描述无解决方案 → A 写"暂未找到解决方案,详见 Issue 讨论" + - 如果 Issue 是功能请求 → A 写当前状态(已支持/开发中/不支持)和替代方案 + - 如果 description 为 null 或只有图片 → A 写"Description 无文本内容,无法提取答案" + +返回 JSON: +{ + "issue_number": N, + "Q": "一句话问题?", + "A": "答案内容", + "confidence": "high|medium|low" +} +``` + +### 不同类型 Issue 的提取策略 + +| Issue 实际类型 | Q 模板 | A 提取来源 | 示例 | +|---------------|--------|------------|------| +| Bug 报告 | "为什么出现 xxx 错误/异常?" | description 中的修复步骤、workaround | "为什么执行 gitlink-cli issue +view 返回数据与网页端不一致?" | +| Bug 报告(无修复) | "遇到 xxx 问题怎么办?" | "暂未找到解决方案,详见 Issue 讨论" | | +| 功能请求 | "能否支持 xxx?" | description/journals 中的状态说明 | "能否支持按 Issue 序号查询?" | +| 使用问题 | "如何配置/使用 xxx?" | description 中的步骤说明 | "如何在 CI 环境中配置 gitlink-cli?" | +| 使用问题(无回复) | "xxx 怎么处理?" | "暂未找到解决方案,详见 Issue 讨论" | | + +### 答案质量标注 + +| 标注 | 条件 | +|------|------| +| `high` | description 明确描述了解决方案、修复方法或有维护者回复 | +| `medium` | 有部分相关信息但不够完整,或需要结合其他 Issue | +| `low` | description 只有问题描述,无解决方案;或 description 为空 | ## 输出数据格式 -采集后整理为以下结构供聚类使用: +采集提取后整理为以下结构供合并归类使用: ```json [ { - "number": 142, - "subject": "安装后运行报 command not found", - "description": "按照 README 安装后,终端输入 gitlink-cli 提示...", - "labels": ["bug", "installation"], + "issue_number": 142, + "Q": "安装 gitlink-cli 后运行报 command not found 怎么办?", + "A": "将 ~/.local/bin 加入 PATH 环境变量。Linux/Mac 执行: export PATH=$PATH:~/.local/bin。Windows 将 %USERPROFILE%\\.local\\bin 加入系统 PATH。", + "confidence": "high", "journal_count": 5, - "last_comment_author": "maintainer", - "resolution": "需要将 ~/.local/bin 加入 PATH" + "labels": ["安装配置"] + }, + { + "issue_number": 158, + "Q": "issue +view 命令返回的 JSON 缺少部分字段?", + "A": "暂未找到解决方案,详见 Issue 讨论", + "confidence": "low", + "journal_count": 2, + "labels": ["CLI 命令", "数据显示"] } ] ``` @@ -75,7 +124,6 @@ Issue 总量 采集策略 ## API 注意事项 - `issue +list` 的 `--limit` 最大 200,超出需分页(`--page` 参数) -- **`--state` 参数不可靠**:与 PR 列表类似,`--state` 参数可能不严格过滤列表(返回数据中 `closed_count` 才是真实统计)。必须同时拉取 open 和 closed 两份列表并合并去重。 -- `issue +view` 的 `journals` 字段包含完整评论历史,是判断解决过程的关键 -- `journals` 中的 `body` 字段是评论的纯文本内容,`author.login` 是评论者 +- **`--state` 参数不可靠**:与 PR 列表类似,必须同时拉取 open 和 closed 两份列表并合并去重 +- **`issue +view` 不返回 journals 内容**:只有 `comment_journals_count`(评论数量),无法通过 API 读取实际评论。`GET /v1/.../issues/{N}/journals` 返回 HTML 而非 JSON。分析只能依靠 `subject` + `description`。 - 大量请求时建议用 `--debug` 查看实际请求 URL,确认分页参数正确 diff --git a/skills/gitlink-faq/references/gitlink-faq-generate.md b/skills/gitlink-faq/references/gitlink-faq-generate.md index 7f4d6260..ea966d0f 100644 --- a/skills/gitlink-faq/references/gitlink-faq-generate.md +++ b/skills/gitlink-faq/references/gitlink-faq-generate.md @@ -1,98 +1,116 @@ # gitlink-faq 文档生成 -> 如何将分类+聚类结果组织为结构化知识库 Markdown。 +> 如何将提取合并后的 Q&A 条目组织为结构化 FAQ 知识库 Markdown。 ## 生成原则 -- **按类型分章节**:Bug → 功能请求 → 使用问题,每章独立 -- **按热度排序**:同类内 Issue 数量多的排在前面 -- **数据不足时省略**:某类型 < 2 条时标注"暂无足够数据",不强行展开 -- **来源可追溯**:每条结论后附来源 Issue 编号 +- **纯 Q&A 格式**:每个条目是"问题 → 答案 + 来源",不做统计分析 +- **按主题归类**:用主题标签组织章节,不用 Bug/Feature/Question 分类 +- **答案有据可查**:每条 FAQ 附来源 Issue 编号 +- **数据不足时如实说明**:某主题标签下无条目时省略该章节 +- **不编造答案**:无法提取答案的标注"待确认",不强行写 ## 文档结构 参考 [`examples/faq-template.md`](../examples/faq-template.md)。 ```markdown -# 📊 Issue 知识库 +# 📖 {项目名} FAQ 知识库 -> 自动生成 | 数据来源:已关闭 Issue({N} 条有效) -> 更新时间:{DATE} +> 自动生成 | 收录 {N} 个问题 | 更新时间:{DATE} > 项目:{OWNER}/{REPO} +> +> 本知识库从项目 Issue 中自动提取,将用户遇到的实际问题与解决方案整理为 FAQ。 -## 📂 概览 +## {主题标签 1} -| 类型 | 数量 | 聚类数 | -|------|------|--------| -| 🐛 Bug 报告 | {N} | {M} 个模块 | -| 💡 功能请求 | {N} | {M} 个领域 | -| 📖 使用问题 | {N} | {M} 个主题 | - ---- - -## 🐛 Bug 高频模块 - -### {模块名}({N} 个 Bug) - -**典型症状**: {描述} -**涉及 Issue**: [#{编号}]({链接}), [#{编号}]({链接}) -**已知修复**: {如有则写,无则写"暂未统一修复"} - -### {模块名}({N} 个 Bug) - -... - -> 如该类 < 2 条,标注"暂无高频 Bug 模式"。 - ---- - -## 💡 功能请求热度 - -### {功能领域}({N} 个请求)🔥 - -**用户期望**: {一句话总结} -**涉及 Issue**: [#{编号}]({链接}), [#{编号}]({链接}) - -### {功能领域}({N} 个请求) - -... - -> 如该类 < 2 条,标注"暂无热门功能请求"。 - ---- - -## 📖 常见使用问题 - -### Q{N}: {问题}? +### Q{序号}: {问题}? **A:** {答案} -> 📎 来源 Issue: [#{编号}]({链接}), [#{编号}]({链接}) +> 📎 来源: [#{编号}]({链接}) + +### Q{序号}: {问题}? + +**A:** {答案} + +> 📎 来源: [#{编号}]({链接}), [#{编号}]({链接}) + +## {主题标签 2} ... - -> 如该类 < 2 条,标注"暂无常见使用问题"。 - ---- - -> 💡 本文档由 gitlink-faq 自动生成,建议每 1-2 周更新一次。 ``` -## 热度标注 +## 章节生成规则 -| Issue 数 | 热度 | -|----------|------| -| ≥ 5 | 🔥🔥🔥 高频 | -| 3-4 | 🔥🔥 常见 | -| 2 | 🔥 偶发 | -| 1 | 不纳入(标注为单次事件) | +- 按主题标签分组,每个标签一个 `##` 二级标题,**标题前必须带对应图标**(如 `## 🔧 安装配置`) +- 标签内有 ≥ 1 条 FAQ 即生成该章节 +- 标签内无条目则省略该章节 +- 章节排列顺序及图标:🔧 安装配置 → 💻 CLI 命令 → 🔗 API 与集成 → 📊 数据显示 → 🖥️ 平台兼容 → ⚡ 性能 → 💡 功能请求 → 📦 其他 -## 答案/解决状态标注 +## Q&A 条目格式 -对于 Bug 和功能请求,标注其当前状态: +### 标准格式 -| 状态 | 标注 | 条件 | -|------|------|------| -| ✅ 已修复/已实现 | 绿色标记 | Issue 关闭且 journals 中有修复记录 | -| 🔧 部分修复 | 黄色标记 | 有修复但不完整 | -| ❓ 状态不明 | 无标记 | journals 为空或无明确解决记录 | +```markdown +### Q{序号}: {问题}? + +**A:** {答案} + +> 📎 来源: [#{编号}]({链接}), [#{编号}]({链接}) +``` + +### 序号规则 + +- 全局递增编号(跨所有主题标签),如 Q1, Q2, Q3... +- 方便引用和检索 + +### 答案质量标注(可选) + +当答案 confidence 为 `low` 时,可在答案中标注: + +```markdown +**A:** 暂未找到明确解决方案,详见 Issue 讨论。⚠️ 待确认 +``` + +## 答案编写规范 + +### DO(应该做的) + +- ✅ 答案具体可操作:给出明确的命令、配置、步骤 +- ✅ 综合多个来源:合并多个 Issue 的讨论得出完整答案 +- ✅ 标注适用范围:如果答案只适用于特定平台/版本,明确说明 +- ✅ 引用原始讨论:来源链接让用户可以查看完整上下文 + +### DON'T(不应该做的) + +- ❌ 不编造答案:没有就是没有,写"待确认" +- ❌ 不做统计分析:不写"XX 模块有 N 个 Bug" +- ❌ 不写长篇大论:答案简洁直接,一两段即可 +- ❌ 不假设用户背景:用通俗语言,避免术语黑话 + +## 功能请求类 FAQ 的特殊处理 + +功能请求类 Issue 转为 FAQ 时,答案应说明**当前状态**而非"应该怎么做": + +```markdown +### Q{N}: 能否支持 xxx 功能? + +**A:** 该功能目前已在 v2.1 中支持,使用 `gitlink-cli xxx --flag` 即可。 + +> 📎 来源: [#{编号}]({链接}) +``` + +或: + +```markdown +### Q{N}: 能否支持 xxx 功能? + +**A:** 该功能目前暂不支持。替代方案:可以先通过 yyy 方式实现类似效果。详见 Issue 讨论。 + +> 📎 来源: [#{编号}]({链接}) +``` + +## 输出文件 + +生成的 Markdown 保存为 `./issue-faq.md`,展示给用户预览,确认后发布到 Wiki。 diff --git a/skills/gitlink-faq/references/gitlink-faq-publish.md b/skills/gitlink-faq/references/gitlink-faq-publish.md index 02f5eb1a..ea042ca8 100644 --- a/skills/gitlink-faq/references/gitlink-faq-publish.md +++ b/skills/gitlink-faq/references/gitlink-faq-publish.md @@ -9,18 +9,18 @@ ```bash gitlink-cli wiki +create \ --title "Issue-知识库" \ - --file ./issue-knowledge-base.md \ - --message "自动生成:从已关闭 Issue 归纳分类" + --file ./issue-faq.md \ + --message "自动生成:从项目 Issue 提取 FAQ 知识库" ``` ### 更新已有知识库页面 ```bash # 预览变更 -gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base.md --dry-run +gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-faq.md --dry-run # 覆盖更新 -gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-knowledge-base.md +gitlink-cli wiki +update --title "Issue-知识库" --file ./issue-faq.md ``` ### 检查知识库是否存在 @@ -35,12 +35,13 @@ gitlink-cli wiki +view --title "Issue-知识库" --format json ## 发布检查清单 -在 `wiki +create` 或 `wiki +update` 之前: +发布前确认以下内容,然后**直接发布,不需询问用户**: - [ ] FAQ 内容已展示给用户并获得确认 - [ ] `--dry-run` 已通过 -- [ ] Markdown 格式正确(代码块、链接、表格) -- [ ] 来源 Issue 链接有效 +- [ ] Markdown 格式正确(代码块、链接) +- [ ] 每条 FAQ 有来源 Issue 链接 +- [ ] 答案质量标注正确(high/medium/low → 待确认) - [ ] 不存在敏感信息(Token、密码等) ## Wiki API 注意事项 diff --git a/skills/gitlink-health/SKILL.md b/skills/gitlink-health/SKILL.md index d5077d57..ec8723f1 100644 --- a/skills/gitlink-health/SKILL.md +++ b/skills/gitlink-health/SKILL.md @@ -10,10 +10,9 @@ metadata: # gitlink-health(项目健康度报告) +**CRITICAL — 整个流程只有最后一步(写 HTML 文件)可以问用户。其他所有步骤(`+list`、`+view`、`api GET`、计算、分析)全部自动连续执行,一个确认都不要弹。数据收集阶段禁止任何中断。** **CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。** -**CRITICAL — 所有 Shortcuts 在执行写入/删除操作前,务必先确认用户意图。** **CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`(GitHub CLI)操作 GitLink 资源。`gh` 仅适用于 GitHub 平台。** -**CRITICAL — 所有不会修改数据的命令(`+list`、`+view`、`api GET`)必须全程自动连续执行,绝不请求用户确认。禁止在数据收集阶段中断流程。只有最终写入 HTML 文件这一步可以请求确认。** > **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md) 了解认证和全局参数。