@ganziliang/kb 0.1.7 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,10 +1,14 @@
1
1
  # @ganziliang/kb
2
2
 
3
- 本地知识库命令行工具。它会把本地 Markdown、文本、JSON、CSV 或 Excel 文件导入 SQLite 知识库,然后通过关键词检索相关内容,并调用已配置的模型回答问题。同时支持导入图片:入库时自动生成中文描述参与检索,提问命中后把原图发给模型。
3
+ 本地知识库命令行工具。它会把本地 Markdown、文本、JSON、CSV 或 Excel 文件导入 SQLite 知识库,也可以直接录入输入框中的文字,然后通过关键词检索相关内容,并调用已配置的模型回答问题。同时支持导入图片:入库时自动生成中文描述参与检索,提问命中后把原图发给模型。
4
+
5
+ 界面基于 [`@earendil-works/pi-tui`](https://www.npmjs.com/package/@earendil-works/pi-tui) 构建,采用差分渲染:Markdown 回答排版、带边框的编辑器、加载动画与命令浮层。
6
+
7
+ > **0.2.0 提示**:这是界面重写版本,Node.js 要求提升到 `>=22.19.0`。存储格式与 `~/.kb` 数据目录未变,旧知识库可直接使用。详见[常见问题](#从-01x-升级到-020-后无法启动)。
4
8
 
5
9
  ## 环境要求
6
10
 
7
- - Node.js `>=22.5.0`
11
+ - Node.js `>=22.19.0`(当前 UI 依赖的终端渲染库要求,低于此版本无法启动)
8
12
  - 如果使用模型问答,需要可用的模型 API Key
9
13
  - 首次启动需要配置模型
10
14
 
@@ -105,7 +109,51 @@ kb
105
109
 
106
110
  ## 交互操作
107
111
 
108
- 启动 `kb` 后,在底部的 `> ` 提示符后输入内容并按 Enter。
112
+ 启动后界面分为三部分:顶部的启动屏(logo 与环境信息)、中间的对话流、底部的输入框。
113
+
114
+ ```
115
+ ██╗ ██╗ ██████╗
116
+ ██║ ██╔╝ ██╔══██╗
117
+ █████╔╝ ██████╔╝
118
+ ██╔═██╗ ██╔══██╗
119
+ ██║ ██╗ ██████╔╝
120
+ ╚═╝ ╚═╝ ╚═════╝
121
+
122
+ 知识库 · Knowledge Base
123
+
124
+ 知识库 default
125
+ 模型 deepseek-flash
126
+ 来源 1
127
+
128
+ 输入问题开始,或键入 /help 查看命令
129
+ ```
130
+
131
+ 对话流中不同类型的消息有各自的标记:
132
+
133
+ | 标记 | 含义 |
134
+ | --- | --- |
135
+ | `❯` | 你的提问 |
136
+ | `⏺` | 模型回答(Markdown 排版,附检索统计与耗时) |
137
+ | `✔` | 成功(导入完成、命令结果) |
138
+ | `★` | 本次提问附带的原图 |
139
+ | `✖` | 错误 |
140
+ | `!` | 用法提示 |
141
+
142
+ 快捷键:
143
+
144
+ | 按键 | 作用 |
145
+ | --- | --- |
146
+ | `Enter` | 发送 |
147
+ | `Shift+Enter` / `Ctrl+J` | 输入换行(录入多行内容用) |
148
+ | `Esc` | 关闭浮层 |
149
+ | `Ctrl+C` | 退出 |
150
+ | `Ctrl+A` / `Ctrl+E` | 行首 / 行尾 |
151
+ | `Ctrl+U` / `Ctrl+K` | 删除到行首 / 行尾 |
152
+ | `Ctrl+W` | 删除前一个单词 |
153
+ | `Ctrl+-` | 撤销 |
154
+ | `Ctrl+Y` | 粘贴(yank 最近删除的内容) |
155
+
156
+ 光标可以用方向键或 `Ctrl+B` / `Ctrl+F` 左右移动;按单词移动用 `Alt+←` / `Alt+→`。
109
157
 
110
158
  ### 导入文件
111
159
 
@@ -144,6 +192,55 @@ import D:\docs\api.txt
144
192
 
145
193
  导入后会复制一份原始文件,并建立版本记录。对同一个文件再次导入时,会创建新版本,不会直接覆盖旧版本。
146
194
 
195
+ ### 直接录入文本
196
+
197
+ 不需要先把内容存成文件,也不需要记命令——用自然语言告诉 kb 就行:
198
+
199
+ ```text
200
+ 记住:我的工位在 A 区 12 号,门禁卡号 8823
201
+ 记一下,下周三下午两点和产品对需求
202
+ 帮我存个配置:接口超时时间 30 秒,失败重试 3 次
203
+ 这段你帮我记着:报销单必须贴发票原件
204
+ ```
205
+
206
+ kb 每一轮输入都会先判断你的意图:
207
+
208
+ - **提问** → 检索知识库并回答(附来源与版本)
209
+ - **录入** → 调用 `save_knowledge` 工具存入知识库
210
+
211
+ 判断由模型根据语义完成,**不依赖固定关键词**。识别为录入后,模型会:
212
+
213
+ 1. **生成标题**:用一句话概括内容,作为知识条目标题。
214
+ 2. **整理内容**:转成规范 Markdown,完整保留你给的信息。
215
+ 3. **落盘建索引**:写入 `<知识库>/originals/`,并入关键词检索,随后提问就能命中。
216
+
217
+ 多行内容按 **Shift+Enter**(或 `Ctrl+J`)换行,全部输入完再按 `Enter` 提交:
218
+
219
+ ```text
220
+ 帮我记下值班规范:
221
+
222
+ - 线上告警先看 Grafana 面板 pay-dashboard
223
+ - P0 故障 15 分钟内必须响应
224
+ - 值班电话 8001,仅限 P0 使用
225
+ ```
226
+
227
+ 录入的内容同样遵循版本规则:内容完全相同时再次录入,会生成新版本而不是重复来源。
228
+
229
+ #### 显式命令(兜底)
230
+
231
+ 模型判断有误、或模型暂时不可用时,可以用 `/add` 强制录入;
232
+ 以 `/` 开头的形式不会与自然语言混淆:
233
+
234
+ ```text
235
+ /add 支付网关的退款接口是 /api/pay/refund,请求方式 POST
236
+ /note 团队周会是每周三下午三点
237
+ ```
238
+
239
+ 显式命令不调用模型,标题由程序从内容推导(优先取 Markdown 标题,否则取首个非空行)。
240
+
241
+ > 区别:`导入 <路径>` 是把**已有的文件**收录进来,`/add <内容>` 是把**输入框里的文字**收录进来,
242
+ > 而直接说「记住 …」则由模型自己判断。
243
+
147
244
  ### 图片知识
148
245
 
149
246
  图片本身无法参与关键词检索,因此 `kb` 对图片使用双通道处理:
@@ -184,6 +281,7 @@ import D:\docs\api.txt
184
281
  | `/help` | 查看命令列表 |
185
282
  | `/clear` | 清空当前对话上下文 |
186
283
  | `/sources` | 查看当前知识库中的来源文件、路径和版本 |
284
+ | `/add <内容>` | 显式录入文本(正常直接说「记住…」即可) |
187
285
  | `/models` 或 `/model` | 查看已配置模型 |
188
286
  | `/model <编号>` | 切换模型,例如 `/model 1` |
189
287
  | `/kb list` | 查看所有知识库 |
@@ -257,6 +355,22 @@ npm test
257
355
 
258
356
  ## 常见问题
259
357
 
358
+ ### 从 0.1.x 升级到 0.2.0 后无法启动
359
+
360
+ 0.2.0 换用了新的终端渲染库,Node.js 要求从 `>=22.5.0` 提升到 `>=22.19.0`。
361
+
362
+ ```bash
363
+ node -v # 低于 v22.19.0 会启动失败
364
+ ```
365
+
366
+ 升级 Node 后重装即可:
367
+
368
+ ```bash
369
+ npm i -g @ganziliang/kb@latest
370
+ ```
371
+
372
+ 0.2.0 是界面重写,存储格式和 `~/.kb` 数据目录没有变化,原有知识库和模型配置可以直接沿用。
373
+
260
374
  ### 运行 `kb` 找不到命令
261
375
 
262
376
  确认 npm 全局 bin 目录已经加入 PATH,或者使用源码方式运行:
package/dist/cli.d.ts CHANGED
@@ -1,2 +1,41 @@
1
1
  #!/usr/bin/env node
2
+ import { ensureModelConfig } from "./config.js";
3
+ import { type KnowledgeBase } from "./storage.js";
4
+ type ModelConfig = Awaited<ReturnType<typeof ensureModelConfig>>[number];
5
+ export declare class KbApp {
6
+ private readonly root;
7
+ private readonly tui;
8
+ private readonly stream;
9
+ private readonly editor;
10
+ private store;
11
+ private base;
12
+ private models;
13
+ private modelIndex;
14
+ private messages;
15
+ private turns;
16
+ private busy;
17
+ private loader;
18
+ private overlay;
19
+ private closed;
20
+ constructor(root: string, base: KnowledgeBase, models: ModelConfig[]);
21
+ start(): void;
22
+ private get model();
23
+ private add;
24
+ private setBusy;
25
+ private showOverlay;
26
+ private closeOverlay;
27
+ private shutdown;
28
+ private submit;
29
+ private run;
30
+ private addNote;
31
+ private ingest;
32
+ private ask;
33
+ private command;
34
+ private showSources;
35
+ private showModelPicker;
36
+ private switchModel;
37
+ private kbCommand;
38
+ private cleanup;
39
+ }
2
40
  export declare function main(): Promise<void>;
41
+ export {};