初步完成知识库命令和技能的开发
This commit is contained in:
55
commands/lyxy-kb/ask.md
Normal file
55
commands/lyxy-kb/ask.md
Normal file
@@ -0,0 +1,55 @@
|
||||
基于知识库项目进行问答。
|
||||
|
||||
**输入**: `/lyxy-kb-ask` 后的参数为项目名称,可选附带问题。例如:
|
||||
- `/lyxy-kb-ask my-project` — 进入问答模式
|
||||
- `/lyxy-kb-ask my-project 这个系统用了什么技术栈?` — 直接提问
|
||||
|
||||
**前置条件**: 查找并阅读名为 **lyxy-kb** 的 skill,了解渐进式查询策略和来源引用格式。
|
||||
|
||||
**步骤**
|
||||
|
||||
1. **获取项目名称并验证结构**
|
||||
|
||||
从参数中获取项目名称。如果未提供参数,提示用户输入。
|
||||
|
||||
按照 lyxy-kb skill「结构完整性验证」规则检查项目目录,不完整则提示用户先 init。
|
||||
|
||||
2. **加载项目摘要**
|
||||
|
||||
读取 `<project-name>/project.md`,获取项目概述和文件索引。
|
||||
|
||||
按照 lyxy-kb skill「空知识库」规则,如果文件索引为空(尚无已入库文件),告知用户知识库为空,建议先使用 `/lyxy-kb-ingest <project-name>` 入库文档,终止操作。
|
||||
|
||||
3. **进入问答模式**
|
||||
|
||||
如果用户在参数中附带了问题,直接回答该问题。否则提示用户可以开始提问。
|
||||
|
||||
**对每个问题,按照 lyxy-kb skill「渐进式查询策略」执行**:
|
||||
|
||||
**a) 分析问题与文件索引的关联**
|
||||
|
||||
根据用户的问题内容,对照 project.md 文件索引表中各文件的摘要,判断需要查阅哪些 parsed 文件。
|
||||
|
||||
**b) 按需加载 parsed 文件**
|
||||
|
||||
读取相关的 `<project-name>/parsed/<文件名>.md` 文件。如果文件较大,可以先提取标题结构,再读取相关章节。
|
||||
|
||||
**c) 回答并标注来源**
|
||||
|
||||
基于获取的信息回答问题。按照 lyxy-kb skill「来源引用格式」标注来源:
|
||||
|
||||
```
|
||||
根据《文件名》(parsed/文件名.md),...
|
||||
```
|
||||
|
||||
如果回答综合了多个文件的信息,分别标注各信息点的来源。
|
||||
|
||||
**d) 无相关信息处理**
|
||||
|
||||
按照 lyxy-kb skill「无相关信息」规则,明确告知用户当前知识库中未找到相关信息,不编造答案。
|
||||
|
||||
4. **保持会话上下文**
|
||||
|
||||
回答完成后,保持当前的知识库上下文。用户可以继续提问,无需每次重新加载 project.md。已加载的 parsed 文件内容可在后续问答中复用。
|
||||
|
||||
会话的退出由用户自然决定(开启新话题或新会话),不主动终止问答模式。
|
||||
65
commands/lyxy-kb/ingest.md
Normal file
65
commands/lyxy-kb/ingest.md
Normal file
@@ -0,0 +1,65 @@
|
||||
解析 sources/ 中的新文件并增量更新知识库。
|
||||
|
||||
**输入**: `/lyxy-kb-ingest` 后的参数为项目名称。
|
||||
|
||||
**前置条件**: 查找并阅读名为 **lyxy-kb** 的 skill,了解知识库的完整规范。
|
||||
|
||||
**步骤**
|
||||
|
||||
1. **获取项目名称并验证结构**
|
||||
|
||||
从参数中获取项目名称。如果未提供参数,提示用户输入。
|
||||
|
||||
按照 lyxy-kb skill「结构完整性验证」规则检查项目目录,不完整则提示用户先 init。
|
||||
|
||||
2. **检查 office 文档解析能力**
|
||||
|
||||
按照 lyxy-kb skill「Office 文档解析」规则,查找当前环境中名为 **lyxy-reader-office** 的 skill。如果不存在且无其他可替代的文档解析 skill,则提示用户无法处理 office 文档并中止流程。
|
||||
|
||||
3. **读取 manifest.json**
|
||||
|
||||
读取 `<project-name>/manifest.json`,获取已入库文件的信息。
|
||||
|
||||
4. **递归扫描 sources/ 目录**
|
||||
|
||||
按照 lyxy-kb skill「sources/ 扫描规则」,递归检查 sources/ 及其所有子目录中的文件。如果无任何文件,提示用户无待处理文件并终止。
|
||||
|
||||
5. **预检查**
|
||||
|
||||
**空文件检测**:按照 lyxy-kb skill「空文件处理」规则,识别 0 字节文件,标记为跳过。
|
||||
|
||||
**同名不同扩展名冲突检测**:按照 lyxy-kb skill「同名不同扩展名冲突检测」中的两条检测规则执行。冲突文件标记为跳过。
|
||||
|
||||
如果有跳过的文件,列出详情(空文件 / 冲突文件分别列出)。如果所有文件都被跳过,终止流程。
|
||||
|
||||
6. **逐个处理文件**
|
||||
|
||||
对每个通过预检查的文件:
|
||||
|
||||
**a) 解析**:按照 lyxy-kb skill「文件类型解析策略」判断解析方式。office 文档使用 lyxy-reader-office skill(查找并阅读该 skill 获取具体命令),其他文件直接读取。
|
||||
|
||||
**b) 写入 parsed**:按照 lyxy-kb skill「parsed 文件元信息标记」格式,在内容头部添加元信息注释,写入 `<project-name>/parsed/<文件名>.md`(同名覆盖)。
|
||||
|
||||
**c) 归档**:按照 lyxy-kb skill「归档命名规则」,移动原始文件到 archive/(带时间戳后缀 `YYYYMMDDHHmm`)。
|
||||
|
||||
**d) 更新 manifest.json**:新文件追加条目,已有文件在 versions 数组追加新版本。使用 `sha256sum` 计算文件哈希。更新 `last_ingest`。
|
||||
|
||||
**e) 解析失败处理**:按照 lyxy-kb skill「解析失败处理」规则,失败文件保留在 sources/ 中不移动,报告错误,继续处理下一个文件。
|
||||
|
||||
7. **增量更新 project.md**
|
||||
|
||||
按照 lyxy-kb skill「增量追加」策略:
|
||||
- 对每个新处理的文件,读取其 parsed 内容生成简要摘要(1-2 句话)
|
||||
- 新文件:在文件索引表追加新行
|
||||
- 已有文件更新:更新文件索引表中对应行
|
||||
- 在更新记录追加本次 ingest 条目
|
||||
- 不修改概述和关键信息部分
|
||||
|
||||
8. **输出结果**
|
||||
|
||||
汇总显示:
|
||||
- 成功处理的文件列表
|
||||
- 跳过的文件(空文件 / 冲突文件 / 解析失败文件,分别列出)
|
||||
- 当前项目已入库文件总数
|
||||
- 提示可使用 `/lyxy-kb-rebuild <project-name>` 更新概述和关键信息
|
||||
- 提示可使用 `/lyxy-kb-ask <project-name>` 进行知识问答
|
||||
67
commands/lyxy-kb/init.md
Normal file
67
commands/lyxy-kb/init.md
Normal file
@@ -0,0 +1,67 @@
|
||||
初始化一个知识库项目。
|
||||
|
||||
**输入**: `/lyxy-kb-init` 后的参数为项目名称。
|
||||
|
||||
**前置条件**: 查找并阅读名为 **lyxy-kb** 的 skill,了解知识库的目录结构规范、项目名称规则和 project.md 格式规范。
|
||||
|
||||
**步骤**
|
||||
|
||||
1. **获取项目名称**
|
||||
|
||||
从参数中获取项目名称。如果未提供参数,提示用户输入项目名称。
|
||||
|
||||
2. **验证项目名称**
|
||||
|
||||
按照 lyxy-kb skill 中的「项目名称规则」验证名称是否合法(只允许中文、英文、数字、短横线、下划线,不允许空格和其他特殊字符)。不合法时提示用户修改。
|
||||
|
||||
3. **检查目标目录是否已存在**
|
||||
|
||||
检查 CWD 下是否已存在同名目录。如果目录已存在,提示用户该目录已存在,不覆盖任何现有内容,终止操作。
|
||||
|
||||
4. **创建目录结构**
|
||||
|
||||
```bash
|
||||
mkdir -p <project-name>/parsed <project-name>/sources <project-name>/archive
|
||||
```
|
||||
|
||||
5. **创建 project.md**
|
||||
|
||||
按照 lyxy-kb skill 中定义的「project.md 格式规范」,生成初始内容:
|
||||
|
||||
```markdown
|
||||
# <项目名称>
|
||||
|
||||
## 概述
|
||||
|
||||
(待补充)
|
||||
|
||||
## 关键信息
|
||||
|
||||
(待补充)
|
||||
|
||||
## 文件索引
|
||||
|
||||
| 文件名 | 解析文件 | 最新归档 | 摘要 |
|
||||
|--------|----------|----------|------|
|
||||
|
||||
## 更新记录
|
||||
- <YYYY-MM-DD HH:mm>: 初始化项目
|
||||
```
|
||||
|
||||
6. **创建 manifest.json**
|
||||
|
||||
```json
|
||||
{
|
||||
"project": "<项目名称>",
|
||||
"created_at": "<当前时间 ISO 格式>",
|
||||
"last_ingest": null,
|
||||
"files": []
|
||||
}
|
||||
```
|
||||
|
||||
7. **输出结果**
|
||||
|
||||
提示用户:
|
||||
- 项目已创建,显示完整的目录结构
|
||||
- 引导用户将文档放入 `<project-name>/sources/` 目录
|
||||
- 提示使用 `/lyxy-kb-ingest <project-name>` 解析入库
|
||||
55
commands/lyxy-kb/rebuild.md
Normal file
55
commands/lyxy-kb/rebuild.md
Normal file
@@ -0,0 +1,55 @@
|
||||
全量重新生成 project.md。
|
||||
|
||||
**输入**: `/lyxy-kb-rebuild` 后的参数为项目名称。
|
||||
|
||||
**前置条件**: 查找并阅读名为 **lyxy-kb** 的 skill,了解 project.md 格式规范和全量重写策略。
|
||||
|
||||
**步骤**
|
||||
|
||||
1. **获取项目名称并验证结构**
|
||||
|
||||
从参数中获取项目名称。如果未提供参数,提示用户输入。
|
||||
|
||||
按照 lyxy-kb skill「结构完整性验证」规则检查项目目录,不完整则提示用户先 init。
|
||||
|
||||
2. **检查 parsed 目录**
|
||||
|
||||
列出 `<project-name>/parsed/` 下的所有 `.md` 文件。如果为空,提示用户尚无已解析文件,建议先执行 `/lyxy-kb-ingest <project-name>`。
|
||||
|
||||
3. **检查 sources/ 待处理文件**
|
||||
|
||||
检查 `<project-name>/sources/` 中是否还有未 ingest 的文件。如果有,提醒用户 sources/ 中存在未入库文件,rebuild 将仅基于已有的 parsed 文件生成,建议先执行 ingest。
|
||||
|
||||
4. **确认操作**
|
||||
|
||||
向用户说明 rebuild 将覆盖当前 project.md 的概述、关键信息和文件索引(更新记录会保留),请求用户确认是否继续。用户确认后再执行。
|
||||
|
||||
5. **读取所有 parsed 文件**
|
||||
|
||||
逐个读取 `<project-name>/parsed/` 下的所有 `.md` 文件内容。
|
||||
|
||||
6. **读取 manifest.json**
|
||||
|
||||
读取 `<project-name>/manifest.json`,获取文件元信息(用于生成文件索引表中的归档路径等信息)。
|
||||
|
||||
7. **读取现有更新记录**
|
||||
|
||||
读取当前 `<project-name>/project.md`,提取 `## 更新记录` 部分的内容以保留历史记录。
|
||||
|
||||
8. **全量重新生成 project.md**
|
||||
|
||||
按照 lyxy-kb skill「全量重写」策略和 project.md 格式规范,基于所有 parsed 文件内容重新生成:
|
||||
|
||||
- **概述**:基于所有文件内容,生成高度总结的项目信息(几百字以内)
|
||||
- **关键信息**:从所有文档中提炼核心要点
|
||||
- **文件索引**:基于 manifest.json 和 parsed 文件,重新生成完整索引表(文件名、解析文件路径、最新归档路径、简要摘要)
|
||||
- **更新记录**:保留历史记录,追加本次 rebuild 条目,格式:`- <YYYY-MM-DD HH:mm>: 全量重建 project.md`
|
||||
|
||||
将生成的内容写入 `<project-name>/project.md`,覆盖原有内容。
|
||||
|
||||
9. **输出结果**
|
||||
|
||||
提示用户:
|
||||
- project.md 已全量重建
|
||||
- 显示处理的文件数量
|
||||
- 提示可使用 `/lyxy-kb-ask <project-name>` 进行知识问答
|
||||
Reference in New Issue
Block a user