diff --git a/CHANGELOG.md b/CHANGELOG.md index eda6e079..4adfbe1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,29 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and [中文版](CHANGELOG.zh.md) · [README](README.md) · [Contributing](CONTRIBUTING.md) +## [1.16.0] - 2026-08-17 + +> Full knowledge-base lifecycle management arrives in the CLI: create and configure knowledge bases, upload documents, tune chunks, and deploy retrieval/Q&A services — all from `bl knowledge` and `kscli`. + +### Added + +- **Knowledge base management** — `bl knowledge create` / `list` / `info` / `update` / `delete` manage knowledge bases end to end; `bl knowledge stats` reports document counts and usage over a past time range. +- **Document management** — `bl knowledge doc upload` uploads local files or whole directories (recursive scan, skips unsupported formats and tool directories like `node_modules`); `doc list` / `status` / `tag` / `delete` cover the rest of the document lifecycle, and `doc import-oss` imports documents from OSS. +- **Retrieval / Q&A service management** — `bl knowledge service list` / `get` / `create` / `update` / `deploy` / `delete` / `copy` manage retrieval and Q&A service configurations, including deploying a draft to a published version. +- **Chunk management** — `bl knowledge chunk add` / `list` / `update` / `delete` inspect and fine-tune document chunks. +- **Data-center management** — `bl knowledge category list` / `add` / `delete`, `bl knowledge file list` / `get` / `delete`, and `bl knowledge collection create` / `get` manage categories, raw files, and data collections. +- **Service version selection for retrieval and chat** — `bl knowledge search` and `bl knowledge chat` accept `--agent-version` to call the beta (draft) config for debugging or a specific published version. +- **`kscli` parity** — all new knowledge commands are also available in Knowledge Studio CLI under shorter paths, e.g. `kscli kb list`, `kscli doc upload`, `kscli service deploy`. + +### Removed + +- **`bl knowledge search --query-history` removed** — the parameter never took effect; use `bl knowledge chat` with `--message` history for multi-turn scenarios. + +### Internal + +- Requests now carry a static OpenAPI source identification header for backend channel attribution. +- Added knowledge-base E2E suites, including five user-journey scenarios covering cold start, content ops, chunk tuning, service tuning, and the data plane. + ## [1.15.1] - 2026-08-17 ### Added diff --git a/CHANGELOG.zh.md b/CHANGELOG.zh.md index 114549a1..962c6771 100644 --- a/CHANGELOG.zh.md +++ b/CHANGELOG.zh.md @@ -6,6 +6,29 @@ [English](CHANGELOG.md) · [README](README.zh.md) · [参与贡献](CONTRIBUTING.zh.md) +## [1.16.0] - 2026-08-17 + +> CLI 迎来知识库全生命周期管理:从创建配置知识库、上传文档、调优切片,到部署检索/问答服务,均可通过 `bl knowledge` 与 `kscli` 完成。 + +### 新增 + +- **知识库管理** —— `bl knowledge create` / `list` / `info` / `update` / `delete` 覆盖知识库的完整生命周期;`bl knowledge stats` 查询指定过去时间段内的文档数量与用量统计。 +- **文档管理** —— `bl knowledge doc upload` 支持上传本地文件或整个目录(递归扫描,自动跳过不支持的格式及 `node_modules` 等工具目录);`doc list` / `status` / `tag` / `delete` 覆盖文档生命周期其余环节,`doc import-oss` 支持从 OSS 导入文档。 +- **检索 / 问答服务管理** —— `bl knowledge service list` / `get` / `create` / `update` / `deploy` / `delete` / `copy` 管理检索与问答服务配置,支持将草稿部署为正式版本。 +- **切片管理** —— `bl knowledge chunk add` / `list` / `update` / `delete` 查看并精调文档切片。 +- **数据中心管理** —— `bl knowledge category list` / `add` / `delete`、`bl knowledge file list` / `get` / `delete`、`bl knowledge collection create` / `get` 管理类目、原始文件与数据集。 +- **检索与问答支持指定服务版本** —— `bl knowledge search` 和 `bl knowledge chat` 新增 `--agent-version`,可调用 beta(草稿)配置进行调试,或指定已发布的版本号。 +- **`kscli` 同步支持** —— 全部新知识库命令在 Knowledge Studio CLI 中以更短路径提供,如 `kscli kb list`、`kscli doc upload`、`kscli service deploy`。 + +### 移除 + +- **移除 `bl knowledge search --query-history`** —— 该参数此前并未实际生效;多轮场景请改用 `bl knowledge chat` 并通过 `--message` 传入对话历史。 + +### 内部 + +- 请求现在携带静态的 OpenAPI 来源标识请求头,用于后端渠道归因。 +- 新增知识库 E2E 测试套件,含冷启动、内容运营、切片调优、服务调优、数据面五条用户旅程场景。 + ## [1.15.1] - 2026-08-17 ### 新增 diff --git a/docs/agents/cli-e2e-tests.md b/docs/agents/cli-e2e-tests.md index 08d3880e..cfae0770 100644 --- a/docs/agents/cli-e2e-tests.md +++ b/docs/agents/cli-e2e-tests.md @@ -6,6 +6,7 @@ | --------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------- | | **共享基建** | `packages/e2e` | gating、子进程 runner、output、globalSetup(`private`,不发布) | | **命令 E2E** | `packages/commands/tests/e2e` | help、缺参、dry-run、live(gated);每用例最小路由 | +| **Journey E2E** | `packages/commands/tests/e2e/knowledge/journeys` | 用户旅程全链路(跨命令回路 + 标记词召回闭环),全部 live gated;见 `journeys/README.md` | | **bl smoke** | `packages/cli/tests/e2e/registry.smoke.e2e.test.ts` | 产品 map 全部 path `--help`、分组 help、根 help | | **kscli smoke** | `packages/kscli/tests/e2e/registry.smoke.e2e.test.ts` | 从 `kscli/src/commands.ts` 推导 path/分组;identity(`--version`、`search --help` path) | | **runtime** | `packages/runtime/tests` | `proxy.e2e`、console 跨域 flag 拒绝 | @@ -27,7 +28,7 @@ ### commands E2E -- 路径:`packages/commands/tests/e2e/.e2e.test.ts` +- 路径:`packages/commands/tests/e2e/.e2e.test.ts`;knowledge 领域集中在 `packages/commands/tests/e2e/knowledge/` 子目录(新增 knowledge 命令测试放这里) - 子进程:`runCommandE2e(routes, args)` from `./helpers.ts`(spawn `harness/main.ts`,`routes` 为本 topic 最小 path → export 映射) - fixtures:`packages/commands/tests/e2e/fixtures/` - 路由常量:`topic-routes.ts`(按 topic 维护,**非**全量产品 map) @@ -78,6 +79,14 @@ describe.skipIf()("e2e: (DashScope …)", () => { 3. **--dry-run**:实现在联网/上传/写盘**之前**返回;断言 stdout JSON/文本 4. **真实集成**:放在 skip 块**末尾** +## Journey 层(用户旅程全链路) + +- **定位**:命令 E2E 验单命令契约;journey 验“用户带着目标跨命令走通回路”,结构性断言不在 journey 重复 +- **闭环断言**:fixture 埋独特标记词,以“标记词能否被召回”判定回路闭合;硬断言 fail,软断言 `recordSoft` 落报告人工复核 +- **日志产物**:`createJourneyReporter` 在 `test/output//` 落盘 `journey-report.md`、分步 stdout/stderr、`resources.json`(未清理资源警示) +- **入口**:`pnpm run test:journey`;旅程清单与约定见 [journeys/README.md](../../packages/commands/tests/e2e/knowledge/journeys/README.md) +- **新增命令时**:评估是否属于某条旅程的环节,是则纳入对应 journey 并更新 README 映射表 + ## 增删命令同步 - **commands export** + **topic 路由**(`topic-routes.ts` 或测试文件内 `ROUTES`)+ **产品 map**(`cli/commands.ts` / `kscli/commands.ts`) diff --git a/docs/knowledge/chunk.md b/docs/knowledge/chunk.md new file mode 100644 index 00000000..378ee808 --- /dev/null +++ b/docs/knowledge/chunk.md @@ -0,0 +1,248 @@ +# Chunk 管理命令手册 + +Chunk 是知识库中最小的检索单元。文档导入后自动切分为 chunk,也可以手动添加。 + +> **通用约定**(鉴权、Workspace ID、全局参数、输出格式、危险操作确认、Dry-run 模式)请参阅 [总览文档](../knowledge-cli-guide.md#通用约定)。 + +--- + +#### `bl knowledge chunk add` + +直接向知识库添加 chunk。 + +**用法** + +```bash +bl knowledge chunk add --index-id (--content | --field ) [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ----------------------- | ------ | ---- | ------------------------------------------------------------------------------------------- | +| `--index-id ` | string | 是 | 知识库 ID | +| `--doc-id ` | string | 否² | 所属文档 ID;表格/图片知识库必填,文档型可选 | +| `--content ` | string | 否¹ | Chunk 正文,最多 6000 字符(文档型);与 `--content-file` 互斥 | +| `--content-file ` | string | 否¹ | 从 UTF-8 文本文件读取正文(`.md`/`.txt` 等);与 `--content` 互斥 | +| `--title ` | string | 否 | Chunk 标题,最多 50 字符(文档型) | +| `--image-url ` | array | 否 | Chunk 图片 URL(可重复,最多 10 个;文档型) | +| `--field ` | array | 否¹ | 任意字段键值对(可重复),用于表格/图片知识库,键为 Excel 列名;与 content/title/image 互斥 | + +> ¹ `--content`/`--content-file`/`--title`/`--image-url` 与 `--field` 互斥,必须提供其一。 +> ² 表格/图片知识库必须提供 `--doc-id`。文档型知识库可选。 + +**参数约束** + +- `--field` 与 `--content`/`--content-file`/`--title`/`--image-url` 互斥 +- `--content` 与 `--content-file` 互斥 +- `--content` 最多 6000 字符 +- `--title` 最多 50 字符 +- `--image-url` 最多 10 个 + +**输出** + +text 模式: + +``` +chunk created (pipeline: idx-xxx) +List chunks to find the new chunk id. +``` + +quiet 模式:无输出(成功退出码 0)。 + +json 模式:返回 API 原始响应(不含 chunk ID)。 + +**注意事项** + +- 支持文档/表格/图片知识库;音视频知识库不支持。 +- API 响应不含 chunk ID,需用 `chunk list` 查找新 chunk。 +- API 幂等但限流 10 次/秒,批量脚本需自行节流。 +- 表格/图片知识库用 `--field`,键为 Excel 列名,值为字符串。 + +**示例** + +```bash +# 添加文本 chunk +bl knowledge chunk add --index-id idx-xxx --content "chunk text" --title intro --workspace-id ws-xxx + +# 添加表格行(字段方式) +bl knowledge chunk add --index-id idx-xxx --field 列A=v1 --field 列B=v2 + +# 从文件读取内容 +bl knowledge chunk add --index-id idx-xxx --content-file ./chunk.md --doc-id doc-xxx +``` + +--- + +#### `bl knowledge chunk list` + +列出知识库中的 chunk,含内容和状态。 + +**用法** + +```bash +bl knowledge chunk list --index-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ------------------- | ------ | ---- | ------------------------------ | +| `--index-id ` | string | 是 | 知识库 ID | +| `--doc-id ` | string | 否 | 只显示属于此文档的 chunk | +| `--page-number ` | number | 否 | 页码(默认:1) | +| `--page-size ` | number | 否 | 每页条数(默认:20,最大 100) | + +**参数约束** + +- `--page-size` 范围 1-100 + +**输出** + +text 模式: + +``` +[chunk] chunk-xxx (doc: intro.md, doc_id: file-xxx) status: COMPLETED + chunk content preview (truncated at 200 chars)… +total: 1 +``` + +> 如果 chunk 被排除检索,行尾会显示 `[excluded from retrieval]`。 + +quiet 模式:每行一个 `metadata._id`(chunk ID),用于管道传给 update/delete。 + +json 模式:返回 API 原始响应,`data.nodes[]` 含完整 chunk 数据。 + +**注意事项** + +- 用 `metadata._id` 作为 chunk ID,`metadata.doc_id` 作为文档 ID,在 chunk update/delete 中使用。 +- 页大小默认 20,最大 100。 + +**示例** + +```bash +# 列出所有 chunk +bl knowledge chunk list --index-id idx-xxx --workspace-id ws-xxx + +# 只看某文档的 chunk +bl knowledge chunk list --index-id idx-xxx --doc-id file-xxx --page-size 50 +``` + +--- + +#### `bl knowledge chunk update` + +更新 chunk 内容或切换其检索可见性。 + +**用法** + +```bash +bl knowledge chunk update --index-id --chunk-id --doc-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ----------------------- | ------ | ---- | ------------------------------------------------------ | +| `--index-id ` | string | 是 | 知识库 ID | +| `--chunk-id ` | string | 是 | Chunk ID(`metadata._id`,来自 chunk list 输出) | +| `--doc-id ` | string | 是 | 所属文档 ID(`metadata.doc_id`,来自 chunk list 输出) | +| `--content ` | string | 否¹ | 新内容,10-6000 字符;与 `--content-file` 互斥 | +| `--content-file ` | string | 否¹ | 从 UTF-8 文本文件读取新内容 | +| `--title ` | string | 否 | Chunk 标题,0-50 字符(空字符串清除标题;不传则不变) | +| `--exclude` | switch | 否² | 将此 chunk 排除出检索 | +| `--include` | switch | 否² | 将此 chunk 恢复检索(默认行为) | + +> ¹ `--content` 与 `--content-file` 互斥。 +> ² `--exclude` 与 `--include` 互斥。 + +**参数约束** + +- `--content` 与 `--content-file` 互斥 +- `--exclude` 与 `--include` 互斥 +- 至少提供一个更新项(`--content`/`--content-file`/`--title`/`--exclude`/`--include`) +- `--content` 长度 10-6000 字符 +- `--title` 最多 50 字符 + +**输出** + +text 模式: + +``` +updated: chunk-xxx +``` + +quiet 模式:无输出。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- 内容必须 10-6000 字符,且不超过知识库的 max chunk size。 +- `--content-file` 期望 UTF-8 纯文本文件,不解析 `.docx`/`.pdf` 等文档格式。 +- 仅切换 `--exclude`/`--include` 而不提供新内容时,CLI 自动读回当前内容并重新提交(API 要求 content 字段必填,CLI 隐藏了此限制)。 + +**示例** + +```bash +# 修改内容 +bl knowledge chunk update --index-id idx-xxx --chunk-id chunk-xxx --doc-id file-xxx --content "corrected text" --workspace-id ws-xxx + +# 排除 chunk 不参与检索 +bl knowledge chunk update --index-id idx-xxx --chunk-id chunk-xxx --doc-id file-xxx --exclude + +# 恢复检索 +bl knowledge chunk update --index-id idx-xxx --chunk-id chunk-xxx --doc-id file-xxx --include +``` + +--- + +#### `bl knowledge chunk delete` + +从知识库中删除 chunk(不可逆)。 + +**用法** + +```bash +bl knowledge chunk delete --index-id --chunk-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ----------------- | ------ | ---- | ------------------------------------------------ | +| `--index-id ` | string | 是 | 知识库 ID | +| `--chunk-id ` | array | 是 | Chunk ID(可重复,每批最多 10 个,超出自动分批) | +| `--yes` | switch | 否 | 跳过确认提示 | + +**输出** + +text 模式: + +``` +deleted: 2 chunk(s) in 1 batch(es) +``` + +quiet 模式:无输出。 + +json 模式:返回 `{ deleted_count, batches }`。 + +**注意事项** + +- 服务端每次最多接受 10 个 chunk ID,CLI 自动分批。 +- 如果某批失败,操作停止,已删除的批次会在错误 hint 中列出。 +- Chunk 被永久移除,不可恢复。 + +**示例** + +```bash +# 删除多个 chunk +bl knowledge chunk delete --index-id idx-xxx --chunk-id chunk-a --chunk-id chunk-b --workspace-id ws-xxx + +# 跳过确认 +bl knowledge chunk delete --index-id idx-xxx --chunk-id chunk-a --yes +``` + +--- + +← [返回总览](../knowledge-cli-guide.md) diff --git a/docs/knowledge/collection-category.md b/docs/knowledge/collection-category.md new file mode 100644 index 00000000..92a24aa6 --- /dev/null +++ b/docs/knowledge/collection-category.md @@ -0,0 +1,268 @@ +# 数据中心集合与分类命令手册 + +集合(collection)是数据中心的顶层容器,对应服务端的 connector。分类(category)用于组织集合内的文件,支持多级嵌套。 + +> **通用约定**(鉴权、Workspace ID、全局参数、输出格式、危险操作确认、Dry-run 模式)请参阅 [总览文档](../knowledge-cli-guide.md#通用约定)。 + +--- + +#### `bl knowledge collection create` + +创建 FILE 数据集合。 + +**用法** + +```bash +bl knowledge collection create --name --description [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ---------------------- | ------ | ---- | ---------------------------------------------------------------- | +| `--name ` | string | 是 | 集合名称(1-20 字符) | +| `--description ` | string | 是 | 集合描述 | +| `--store-type ` | string | 否 | 存储类型:`platform`(托管,默认)或 `custom`(自有 OSS bucket) | +| `--oss-region ` | string | 否 | OSS region ID(`--store-type custom` 时必填) | +| `--oss-bucket ` | string | 否 | OSS bucket 名称(`--store-type custom` 时必填) | + +**参数约束** + +- `--name` 长度 1-20 字符 +- `--store-type` 只能是 `platform` 或 `custom` +- `--store-type custom` 时 `--oss-region` 和 `--oss-bucket` 必填 + +**输出** + +text 模式: + +``` +created: conn-xxx (my-collection, PLATFORM) +``` + +quiet 模式:输出集合 ID。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- `platform` 使用平台托管存储;`custom` 使用已授权的 OSS bucket。 +- 自定义 bucket 必须携带标签 `bailian-connector-access=ReadAndWrite`(百炼的标签访问控制),否则服务端报 `setBucketCORS failed` 误导性错误。 +- **无集合删除 API**,创建需谨慎。 + +**示例** + +```bash +# 创建平台托管的集合 +bl knowledge collection create --name my-collection --description "team docs" --workspace-id ws-xxx + +# 创建使用自有 OSS bucket 的集合 +bl knowledge collection create --name oss-coll --description "own bucket" --store-type custom --oss-region cn-beijing --oss-bucket my-bucket +``` + +--- + +#### `bl knowledge collection get` + +查看数据集合详情。 + +**用法** + +```bash +bl knowledge collection get (--collection-id | --name ) [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ---------------------- | ------ | ---- | -------- | +| `--collection-id ` | string | 否¹ | 集合 ID | +| `--name ` | string | 否¹ | 集合名称 | + +> ¹ `--collection-id` 和 `--name` 二选一,必须提供其一。 + +**参数约束** + +- `--collection-id` 和 `--name` 互斥,必须提供其一 + +**输出** + +text 模式: + +``` +id: conn-xxx +name: my-collection +description: team docs +``` + +quiet 模式:输出集合 ID。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- getConnector 不返回 `fileConnectorConfig`(`storeType`/`regionId`/`bucketName`),这些字段仅在创建时通过请求体传入,查询时不可读回。 + +**示例** + +```bash +# 按 ID 查询 +bl knowledge collection get --collection-id conn-xxx --workspace-id ws-xxx + +# 按名称查询 +bl knowledge collection get --name my-collection +``` + +--- + +#### `bl knowledge category list` + +列出数据中心分类。 + +**用法** + +```bash +bl knowledge category list [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ---------------------- | ------ | ---- | ------------------------------------------------------ | +| `--collection-id ` | string | 否 | 按集合 ID 过滤 | +| `--parent-id ` | string | 否 | 列出此分类的子分类 | +| `--name ` | string | 否 | 按分类名称过滤(精确匹配,与知识库列表的模糊匹配不同) | +| `--next-token ` | string | 否 | 游标分页令牌 | +| `--max-result ` | number | 否 | 每页条数(默认:20) | + +**输出** + +text 模式: + +``` +cate-xxx product-docs +cate-yyy system-docs [default] +next: --next-token eyJ... +``` + +> 标记 `[default]` 的是文件未指定分类时的默认归属。 + +quiet 模式:每行一个 `categoryId`。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- 分页是游标方式:使用输出的 `next: --next-token ` 继续翻页。 + +**示例** + +```bash +# 列出所有分类 +bl knowledge category list --workspace-id ws-xxx + +# 按名称过滤 +bl knowledge category list --name my-category + +# 翻页 +bl knowledge category list --next-token eyJ... +``` + +--- + +#### `bl knowledge category add` + +创建数据中心分类。 + +**用法** + +```bash +bl knowledge category add --name [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ---------------------- | ------ | ---- | -------------------------------- | +| `--name ` | string | 是 | 分类名称(1-20 字符) | +| `--parent-id ` | string | 否 | 创建为指定分类的子分类 | +| `--collection-id ` | string | 否 | 创建在此集合下(默认:平台集合) | + +**参数约束** + +- `--name` 长度 1-20 字符 + +**输出** + +text 模式: + +``` +created: cate-xxx (product-docs) +``` + +quiet 模式:输出分类 ID。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- 用分类按业务域组织数据中心文件。 + +**示例** + +```bash +# 创建分类 +bl knowledge category add --name product-docs --workspace-id ws-xxx + +# 创建子分类 +bl knowledge category add --name sub --parent-id cate-xxx +``` + +--- + +#### `bl knowledge category delete` + +删除数据中心分类。 + +**用法** + +```bash +bl knowledge category delete --category-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| -------------------- | ------ | ---- | ------------ | +| `--category-id ` | string | 是 | 分类 ID | +| `--yes` | switch | 否 | 跳过确认提示 | + +**输出** + +text 模式: + +``` +deleted: cate-xxx +``` + +quiet 模式:无输出。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- 含文件或子分类的分类的删除行为由服务端定义——服务端错误原样透传。 + +**示例** + +```bash +# 删除分类(交互确认) +bl knowledge category delete --category-id cate-xxx --workspace-id ws-xxx + +# 跳过确认 +bl knowledge category delete --category-id cate-xxx --yes +``` + +--- + +← [返回总览](../knowledge-cli-guide.md) diff --git a/docs/knowledge/doc.md b/docs/knowledge/doc.md new file mode 100644 index 00000000..5689d484 --- /dev/null +++ b/docs/knowledge/doc.md @@ -0,0 +1,344 @@ +# 文档管理命令手册 + +文档管理覆盖文件上传、OSS 导入、解析状态跟踪、文档删除和标签管理。文档导入知识库后自动解析为 chunk。 + +> **通用约定**(鉴权、Workspace ID、全局参数、输出格式、危险操作确认、Dry-run 模式)请参阅 [总览文档](../knowledge-cli-guide.md#通用约定)。 + +--- + +#### `bl knowledge doc list` + +列出知识库中的文档及其解析/索引状态。 + +**用法** + +```bash +bl knowledge doc list --index-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ------------------- | ------ | ---- | ------------------------------ | +| `--index-id ` | string | 是 | 知识库 ID | +| `--page-number ` | number | 否 | 页码(默认:1) | +| `--page-size ` | number | 否 | 每页条数(默认:10,最大 100) | + +**参数约束** + +- `--page-size` 范围 1-100 + +**输出** + +text 模式:每行一个文档,`FAILED` 状态的文档红色高亮。 + +``` +doc-xxx COMPLETED intro.md md 1024 +total: 1 +``` + +quiet 模式:每行一个 `doc_id`。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- `doc_id` 与 `file_id` 的关系:通过 `knowledge create --doc-id` 导入的文档,`doc_id` 等于 `fileId`;通过 `knowledge doc upload --index-id` 导入的,`doc_id` 可能包含 workspace 后缀。 +- 页大小默认 10(服务端默认),最大 100。 + +**示例** + +```bash +# 列出文档 +bl knowledge doc list --index-id idx-xxx --workspace-id ws-xxx + +# 每页 100 条 +bl knowledge doc list --index-id idx-xxx --page-size 100 +``` + +--- + +#### `bl knowledge doc status` + +查看知识库导入任务状态。 + +**用法** + +```bash +bl knowledge doc status --index-id --job-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| --------------------------- | ------ | ---- | --------------------------------------------------- | +| `--index-id ` | string | 是 | 知识库 ID | +| `--job-id ` | string | 是 | 导入任务 ID(`ingestionId`,由 create/upload 返回) | +| `--page-number ` | number | 否 | 页码 | +| `--page-size ` | number | 否 | 每页条数 | +| `--wait` | switch | 否 | 轮询直到任务到达终态 | +| `--poll-interval ` | number | 否 | 轮询间隔秒数(默认:5) | + +**输出** + +text 模式: + +``` +status: COMPLETED + doc-xxx COMPLETED intro.md +``` + +quiet 模式:输出任务状态(`PENDING`/`RUNNING`/`COMPLETED`)。 + +json 模式:返回 API 原始响应,`data.rows[]` 包含每个文档的状态。 + +**注意事项** + +- `--index-id` 和 `--job-id` 服务端均要求必传,只传一个会返回 `SystemError`。 +- 整体任务状态为 `PENDING` / `RUNNING` / `COMPLETED`(无 `FAILED` 值)。 +- 单个文档可能解析失败(如 `PARSE_FAILED`),此时 CLI 以非零退出码报错,服务端消息原样透传。 +- 如果服务端对空闲知识库返回 `SystemError`,说明该 job 可能不存在。 + +**示例** + +```bash +# 查看任务状态 +bl knowledge doc status --index-id idx-xxx --job-id job-xxx --workspace-id ws-xxx + +# 轮询等待完成,10 秒间隔 +bl knowledge doc status --index-id idx-xxx --job-id job-xxx --wait --poll-interval 10 +``` + +--- + +#### `bl knowledge doc upload` + +上传本地文件或目录到数据中心,可选导入到知识库。 + +**用法** + +```bash +bl knowledge doc upload --file [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| --------------------------- | ------ | ---- | ---------------------------------------------------------------- | +| `--file ` | array | 是 | 本地文件或目录路径(可重复)。目录递归扫描,不支持的格式自动跳过 | +| `--index-id ` | string | 否 | 上传后导入到此知识库(所有文件合并为一个导入任务) | +| `--category-id ` | string | 否 | 目标数据中心分类(默认:工作区默认分类) | +| `--tag ` | array | 否 | 文件标签(可重复),应用到每个上传的文件 | +| `--wait` | switch | 否 | 轮询导入任务直到终态(需要 `--index-id`) | +| `--poll-interval ` | number | 否 | 轮询间隔秒数(默认:5) | + +**参数约束** + +- `--wait` 要求同时指定 `--index-id` + +**输出** + +text 模式: + +``` +intro.md file-xxx registered +job: job-xxx +status: COMPLETED + +Uploaded 1 file. +``` + +quiet 模式:每行一个 `fileId`。 + +json 模式:返回自定义结构,包含 `files`(路径和 fileId)、`skipped`、`index_id`、`ingestion_id`、`final_status`。 + +**注意事项** + +- 上传管道:申请 lease → PUT 到 OSS → 注册文件 →(可选)创建导入任务。 +- 目录递归扫描,`node_modules`、`.git` 等自动跳过。 +- 多文件按顺序处理(无并发),避免 OSS 限流。 +- 支持的文件格式:`.pdf .doc .docx .ppt .pptx .xls .xlsx .csv .md .txt .html .png .jpg .jpeg .bmp .gif` +- 部分文件上传失败时,已注册的 fileId 会在错误 hint 中列出。 + +**示例** + +```bash +# 上传单个文件 +bl knowledge doc upload --file ./a.md --workspace-id ws-xxx + +# 上传多个文件并导入到知识库,等待完成 +bl knowledge doc upload --file ./a.md --file ./b.pdf --index-id idx-xxx --wait + +# 上传整个目录 +bl knowledge doc upload --file ./docs/ --workspace-id ws-xxx + +# 干跑预览(查看将上传和跳过的文件) +bl knowledge doc upload --file ./docs/ --dry-run --verbose +``` + +--- + +#### `bl knowledge doc delete` + +从知识库中删除文档及其 chunk。 + +**用法** + +```bash +bl knowledge doc delete --index-id --doc-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ----------------- | ------ | ---- | ----------------- | +| `--index-id ` | string | 是 | 知识库 ID | +| `--doc-id ` | array | 是 | 文档 ID(可重复) | +| `--yes` | switch | 否 | 跳过确认提示 | + +**输出** + +text 模式: + +``` +deleted: 2 document(s) + doc-a + doc-b +``` + +quiet 模式:每行一个已删除的 `doc_id`。 + +json 模式:返回 API 原始响应,`data.deleted[]` 为实际删除的 ID 列表。 + +**注意事项** + +- 只从知识库索引中移除文档,数据中心源文件不受影响(用 `file delete` 删除源文件)。 +- `doc_id` 应从 `knowledge doc list --quiet` 获取,而非 `doc upload` 返回的 `fileId`。 +- 删除是异步的:服务端立即返回 Success,但 `doc list` 中可能仍显示该文档(约 30 秒后传播完成)。 +- 输出的是服务端实际删除的 ID 列表,可能与请求的数量不一致(会在 stderr 警告)。 + +**示例** + +```bash +# 删除单个文档 +bl knowledge doc delete --index-id idx-xxx --doc-id doc-xxx --workspace-id ws-xxx + +# 批量删除,跳过确认 +bl knowledge doc delete --index-id idx-xxx --doc-id doc-a --doc-id doc-b --yes +``` + +--- + +#### `bl knowledge doc tag` + +批量更新数据中心文件的标签。 + +**用法** + +```bash +bl knowledge doc tag --doc-id --tag [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| --------------- | ------ | ---- | ------------------------------------------------------ | +| `--doc-id ` | array | 是 | 数据中心文件 ID(可重复,最多 20 个/次) | +| `--tag ` | array | 是 | 标签(可重复),应用到每个 `--doc-id` | +| `--mode ` | string | 否 | 更新模式:`append`(默认,追加)或 `overwrite`(覆盖) | + +**参数约束** + +- `--doc-id` 最多 20 个/次 +- `--tag` 最多 100 个 +- 每个标签最多 32 字符 +- 标签总长度最多 700 字符 +- `--mode` 只能是 `append` 或 `overwrite` + +**输出** + +text 模式: + +``` +tagged: 2 file(s) with [project-a, draft] +``` + +quiet 模式:无输出。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- 同一组标签应用到所有 `--doc-id`;不同标签集需多次执行。 + +**示例** + +```bash +# 追加标签 +bl knowledge doc tag --doc-id file-xxx --tag project-a --tag draft --workspace-id ws-xxx + +# 覆盖标签 +bl knowledge doc tag --doc-id file-a --doc-id file-b --tag final --mode overwrite +``` + +--- + +#### `bl knowledge doc import-oss` + +从已授权的 OSS bucket 批量导入文件到数据中心。 + +**用法** + +```bash +bl knowledge doc import-oss --bucket --region --oss-key [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| -------------------- | ------ | ---- | ------------------------------------- | +| `--bucket ` | string | 是 | 已授权的 OSS bucket 名称 | +| `--region ` | string | 是 | OSS region ID(如 `cn-beijing`) | +| `--oss-key ` | array | 是 | OSS 对象 key(可重复,最多 10 个/次) | +| `--category-id ` | string | 否 | 目标数据中心分类(默认:默认分类) | +| `--tag ` | array | 否 | 文件标签(可重复,最多 10 个) | +| `--overwrite` | switch | 否 | 覆盖之前从相同 OSS key 导入的文件 | + +**参数约束** + +- `--oss-key` 最多 10 个/次 +- `--tag` 最多 10 个 + +**输出** + +text 模式: + +``` +imported: 2 file(s) + file-a SUCCESS docs/a.pdf + file-b SUCCESS docs/b.docx +``` + +quiet 模式:每行一个 `fileId`。 + +json 模式:返回 API 原始响应,`data.addFileResultList[]` 包含每个文件的 fileId、status 和 ossKey。 + +**注意事项** + +- bucket 必须事先授权给平台服务角色(RAM 中的 `AliyunServiceRoleForBailian`)。 +- 文件名取自 OSS key 的 basename。 +- `--overwrite` 会替换之前导入的文件并生成**新的 fileId**(旧 fileId 失效)。 + +**示例** + +```bash +# 导入单个文件 +bl knowledge doc import-oss --bucket my-bucket --region cn-beijing --oss-key docs/a.pdf --workspace-id ws-xxx + +# 导入多个文件并覆盖 +bl knowledge doc import-oss --bucket my-bucket --region cn-beijing --oss-key docs/a.pdf --oss-key docs/b.docx --overwrite +``` + +--- + +← [返回总览](../knowledge-cli-guide.md) diff --git a/docs/knowledge/file.md b/docs/knowledge/file.md new file mode 100644 index 00000000..4f88a198 --- /dev/null +++ b/docs/knowledge/file.md @@ -0,0 +1,157 @@ +# 数据中心文件管理命令手册 + +数据中心是知识库文件的存储层。文件通过 `doc upload` 或 `doc import-oss` 进入数据中心,再导入到知识库。数据中心文件可被多个知识库引用。 + +> **通用约定**(鉴权、Workspace ID、全局参数、输出格式、危险操作确认、Dry-run 模式)请参阅 [总览文档](../knowledge-cli-guide.md#通用约定)。 + +--- + +#### `bl knowledge file list` + +列出数据中心分类下的文件。 + +**用法** + +```bash +bl knowledge file list --category-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ---------------------- | ------ | ---- | -------------------------------------------------- | +| `--category-id ` | string | 是 | 分类 ID(通过 `category list` 或 `file get` 获取) | +| `--name ` | string | 否 | 按文件名过滤 | +| `--file-id ` | array | 否 | 按文件 ID 过滤(可重复) | +| `--next-token ` | string | 否 | 游标分页令牌(从上次输出获取) | +| `--max-result ` | number | 否 | 每页条数 | + +**输出** + +text 模式: + +``` +file-xxx SUCCESS intro.md 1024 +next: --next-token eyJ... +``` + +quiet 模式:每行一个 `fileId`。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- `--category-id` 必须是真实的分类 ID。与上传 API 不同,字面量 `default` 在此不被解析,传入会返回空列表。通过 `file get` 的 category 字段或 `category list` 获取真实 ID。 +- 分页是游标方式:使用输出的 `next: --next-token ` 继续翻页。 + +**示例** + +```bash +# 列出分类下文件 +bl knowledge file list --category-id cate-xxx --workspace-id ws-xxx + +# 按名称过滤 +bl knowledge file list --category-id cate-xxx --name report + +# 翻页 +bl knowledge file list --category-id cate-xxx --next-token eyJ... +``` + +--- + +#### `bl knowledge file get` + +查看数据中心文件详情。 + +**用法** + +```bash +bl knowledge file get --file-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ---------------- | ------ | ---- | --------------- | +| `--file-id ` | string | 是 | 数据中心文件 ID | + +**输出** + +text 模式: + +``` +id: file-xxx +name: intro.md +type: md +size: 1024 +status: SUCCESS +parser: AUTO_SELECT +category: cate-xxx +uploaded: 2026-01-01T00:00:00Z +tags: project-a, draft +``` + +quiet 模式:输出 JSON 格式。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- 无特殊注意事项。 + +**示例** + +```bash +# 查看文件详情 +bl knowledge file get --file-id file-xxx --workspace-id ws-xxx +``` + +--- + +#### `bl knowledge file delete` + +从数据中心永久删除文件。 + +**用法** + +```bash +bl knowledge file delete --file-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ---------------- | ------ | ---- | --------------- | +| `--file-id ` | string | 是 | 数据中心文件 ID | +| `--yes` | switch | 否 | 跳过确认提示 | + +**输出** + +text 模式: + +``` +deleted: file-xxx +``` + +quiet 模式:无输出。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- **不可逆操作**:如果知识库引用了此文件,相关文档索引会失效。 +- 与 `doc delete` 的区别:`doc delete` 只从单个知识库索引中移除文档,数据中心源文件保留;`file delete` 删除源文件本身,影响所有引用它的知识库。 + +**示例** + +```bash +# 删除文件(交互确认) +bl knowledge file delete --file-id file-xxx --workspace-id ws-xxx + +# 跳过确认 +bl knowledge file delete --file-id file-xxx --yes +``` + +--- + +← [返回总览](../knowledge-cli-guide.md) diff --git a/docs/knowledge/kb.md b/docs/knowledge/kb.md new file mode 100644 index 00000000..25fcf5e1 --- /dev/null +++ b/docs/knowledge/kb.md @@ -0,0 +1,340 @@ +# 知识库管理命令手册 + +知识库(Knowledge Base / pipeline / index)是 RAG 的核心载体,存储文档解析后的向量索引。本组命令覆盖知识库的创建、查看、更新、删除和监控。 + +> **通用约定**(鉴权、Workspace ID、全局参数、输出格式、危险操作确认、Dry-run 模式)请参阅 [总览文档](../knowledge-cli-guide.md#通用约定)。 + +--- + +#### `bl knowledge list` + +列出工作区中的知识库。 + +**用法** + +```bash +bl knowledge list [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ------------------- | ------ | ---- | --------------------------------- | +| `--name ` | string | 否 | 按知识库名称模糊过滤(1-20 字符) | +| `--page-number ` | number | 否 | 页码(默认:1) | +| `--page-size ` | number | 否 | 每页条数(默认:20,最大 100) | + +**参数约束** + +- `--name` 长度 1-20 字符 +- `--page-size` 范围 1-100 + +**输出** + +text 模式:每行一个知识库,字段以双空格分隔,末尾显示总数。 + +``` +idx-xxx my-kb text-embedding-v4 600 product docs +total: 1 +``` + +quiet 模式:每行一个知识库 ID。 + +json 模式:返回 API 原始响应,`data.rows[]` 包含完整知识库信息。 + +**注意事项** + +- 返回的 `id` 字段作为后续命令的 `--index-id` 使用。 + +**示例** + +```bash +# 列出所有知识库 +bl knowledge list --workspace-id ws-xxx + +# 按名称过滤,第二页 +bl knowledge list --name demo --page-number 2 --page-size 50 +``` + +--- + +#### `bl knowledge info` + +查看知识库配置详情。 + +**用法** + +```bash +bl knowledge info --index-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ----------------- | ------ | ---- | --------- | +| `--index-id ` | string | 是 | 知识库 ID | + +**输出** + +text 模式:按诊断维度分组展示。 + +``` +Basic: + id: idx-xxx + name: my-kb + description: product docs + dataType: ... +Indexing: [immutable — recreate required to change] + embeddingModelName: text-embedding-v4 + embeddingDimension: 1024 + chunkSize: 600 + overlapSize: ... + chunkMode: ... + separator: ... +Retrieval: + rerankModelName: ... + rerankMinScore: ... + rerankTopN: ... + rerankMode: ... + enableRewrite: ... + denseSimilarityTopK: ... + sparseSimilarityTopK: ... +Data: + sourceType: ... + connectorId: ... +``` + +quiet 模式:输出知识库 ID。 + +json 模式:返回知识库完整配置 JSON。 + +**注意事项** + +- 索引设置(向量模型、切片大小等)不可变,修改需重建知识库。 + +**示例** + +```bash +# 查看知识库详情 +bl knowledge info --index-id idx-xxx --workspace-id ws-xxx +``` + +--- + +#### `bl knowledge create` + +创建知识库并导入数据中心文件或分类。 + +**用法** + +```bash +bl knowledge create --name (--doc-id | --category-id ) [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| --------------------------- | ------ | ---- | -------------------------------------------------------- | +| `--name ` | string | 是 | 知识库名称(1-20 字符,工作区内唯一) | +| `--doc-id ` | array | 否¹ | 数据中心文件 ID(可重复);与 `--category-id` 互斥 | +| `--category-id ` | array | 否¹ | 按分类导入该分类下所有文件(可重复);与 `--doc-id` 互斥 | +| `--embedding-model ` | string | 否 | 向量模型名称(默认:`text-embedding-v4`) | +| `--chunk-size ` | number | 否 | 切片大小,字符数(默认:600,建议 300-800) | +| `--wait` | switch | 否 | 轮询初始导入任务直到终态 | +| `--poll-interval ` | number | 否 | 轮询间隔秒数(默认:5) | + +> ¹ `--doc-id` 和 `--category-id` 二选一,必须提供其一。 + +**参数约束** + +- `--name` 长度 1-20 字符 +- `--doc-id` 和 `--category-id` 互斥,必须提供其一 + +**输出** + +text 模式: + +``` +index_id: idx-xxx +ingestion_id: job-xxx +status: COMPLETED +Next: check the import job status, then search against this knowledge base. +``` + +quiet 模式:只输出知识库 ID。 + +json 模式:返回 API 原始响应,包含 `pipelineId`(知识库 ID)和 `ingestionId`(导入任务 ID)。`--wait` 时追加 `final_status` 字段。 + +**注意事项** + +- 结构/存储类型固定为默认文档知识库(非结构化,BUILT_IN 存储)。 +- 返回知识库 ID(`pipelineId`)和初始导入任务 ID(`ingestionId`)。 +- 使用 `doc status` 或 `--wait` 跟踪导入进度。 +- 如果 `--wait` 后部分文档解析失败,CLI 以非零退出码报错,知识库已创建成功的事实会在 hint 中提示。 + +**示例** + +```bash +# 从指定文件创建知识库 +bl knowledge create --name demo --doc-id file-xxx --workspace-id ws-xxx + +# 从分类导入并等待导入完成 +bl knowledge create --name demo --category-id cate-xxx --wait + +# 指定向量模型和切片大小 +bl knowledge create --name my-kb --doc-id file-a --doc-id file-b --embedding-model text-embedding-v4 --chunk-size 400 --workspace-id ws-xxx +``` + +--- + +#### `bl knowledge update` + +更新知识库名称、描述或 rerank 阈值。 + +**用法** + +```bash +bl knowledge update --index-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ---------------------------- | ------ | ---- | -------------------------------------------------------- | +| `--index-id ` | string | 是 | 知识库 ID | +| `--name ` | string | 否 | 新名称(1-20 字符) | +| `--description ` | string | 否 | 新描述 | +| `--rerank-min-score ` | number | 否 | rerank 最低分数阈值,范围 0-1(低于此分的 chunk 被过滤) | + +**参数约束** + +- 至少提供 `--name`、`--description`、`--rerank-min-score` 之一,否则报错 "Nothing to update" +- `--name` 长度 1-20 字符 +- `--rerank-min-score` 范围 0-1 + +**输出** + +text 模式: + +``` +updated: idx-xxx +``` + +quiet 模式:无输出。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- 索引设置(向量模型、切片大小等)不可变,修改需重建知识库。 + +**示例** + +```bash +# 更新描述 +bl knowledge update --index-id idx-xxx --description "product docs v2" --workspace-id ws-xxx + +# 调整 rerank 阈值 +bl knowledge update --index-id idx-xxx --rerank-min-score 0.3 +``` + +--- + +#### `bl knowledge delete` + +删除知识库及其所有文档和 chunk。 + +**用法** + +```bash +bl knowledge delete --index-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ----------------- | ------ | ---- | ------------ | +| `--index-id ` | string | 是 | 知识库 ID | +| `--yes` | switch | 否 | 跳过确认提示 | + +**输出** + +text 模式: + +``` +deleted: idx-xxx +``` + +quiet 模式:无输出。 + +json 模式:返回 API 原始响应。 + +**注意事项** + +- **不可逆操作**:知识库及所有索引内容被永久删除。 +- 数据中心中的源文件不受影响,仅删除知识库索引。 +- 不带 `--yes` 时,CLI 会先查询知识库名称和文档数量作为确认摘要。 + +**示例** + +```bash +# 删除(交互确认) +bl knowledge delete --index-id idx-xxx --workspace-id ws-xxx + +# 跳过确认 +bl knowledge delete --index-id idx-xxx --yes +``` + +--- + +#### `bl knowledge stats` + +查看知识库存储和 QPS 监控数据。 + +**用法** + +```bash +bl knowledge stats --index-id [flags] +``` + +**参数** + +| 参数 | 类型 | 必填 | 说明 | +| ----------------- | ------ | ---- | ----------------------------------------------- | +| `--index-id ` | string | 是 | 知识库 ID | +| `--start