注意:此插件为 cnbcool/knowledge-base 的 GPU 版本,为 PDF 和图片进行 OCR 适配,需要运行在 GPU 机器上, 如您没有 OCR 需求,可以使用 cnbcool/knowledge-base 即可。
使用插件将仓库的文档导入到 CNB 的知识库中,以支持搜索或 LLM RAG 问答。
目前支持 Markdown, mdx, pdf, docx, txt, png, jpg, jpeg 文件。文件类型仅根据后缀名判断。
通过上图,可以看到使用过程分为两步:
使用本知识库插件将仓库的文档导入到 CNB 的知识库中, 本插件在 CNB 云原生构建中运行, 会自动处理文档,并构建知识库, 知识库构建完成后,可以被下游的 LLM 应用使用。
知识库构建完成后,使用 CNB 的 Open API 进行召回,并结合 LLM 拼接模型生成回答。
常见的 RAG 应用运行流程如下:
1.用户提问
2.问题理解
3.调用知识库检索,如上文所述,使用 CNB 的 Open API 进行召回,获取相关文档
4.构建拼接 Prompt, 问题 + 知识上下文,例如拼接后 prompt 一般会这样:
用户:{用户问题} 知识库: {知识库内容} 请根据以上知识库,回答用户的问题。
5.将拼接后的 prompt 发送给 LLM 模型,生成回答,返回给用户
docker.cnb.cool/cnb/plugins/cnbcool/knowledge-base-gpu:latest
embedding_model:嵌入模型,目前只支持 hunyuaninclude:指定需要包含的文件,使用 glob 模式匹配,默认为 * 包含所有文件。支持逗号分隔多个模式,如 *.md,*.txt,*.pdfexclude:指定需要排除的文件,使用 glob 模式匹配,默认不排除任何文件。支持逗号分隔多个模式chunk_size:指定文本分块大小,默认为 1500chunk_overlap:指定相邻两个分块之间的重叠token数量,默认为 0ignore_process_failures:是否忽略文档处理失败,当设置为 true 时,即使有文件处理失败也会更新知识库,默认为 falseissue_sync_enabled:是否启用 Issue 同步功能,默认为 false。启用后会自动拉取仓库的 Issue 数据并加入知识库issue_state:指定要同步的 Issue 状态,可选值:open、closed,默认为全部issue_labels:指定要同步的 Issue 标签,使用逗号分隔多个标签,如 bug,feature。为空时同步所有标签的 Issue注意:
exclude的优先级高于include,被 exclude 的文件不会再被 include
main:
push:
- runner:
tags: cnb:arch:amd64:gpu:L40
stages:
- name: build knowledge base
image: docker.cnb.cool/cnb/plugins/cnbcool/knowledge-base-gpu:latest
settings:
include: "**/**.pdf,**/**.md"
main:
push:
- runner:
tags: cnb:arch:amd64:gpu:L40
stages:
- name: build knowledge base
image: docker.cnb.cool/cnb/plugins/cnbcool/knowledge-base-gpu:latest
settings:
include: "**/**.md"
issue_sync_enabled: true
issue_labels: "bug,feature"
issue_state: "open"
issue_priority: "P0,P1"
此 API 用于查询知识库内容,根据提供的查询关键词返回相关信息。
开始之前,请阅读:CNB Open API 使用教程 访问令牌需要权限:
repo-code:r(读取仓库代码)
https://api.cnb.cool/{slug}/-/knowledge/base/query注意:
{slug}应替换为仓库 slug,例如 CNB 官方文档知识库的仓库地址为https://cnb.cool/cnb/docs, 则{slug}就是cnb/docs
请求体应为 JSON 格式,包含以下字段:
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
| query | string | 是 | 要查询的关键词或问题 |
| top_k | number | 否 | 返回结果的最大数量,默认为 5 |
| score_threshold | number | 否 | 匹配相关性分数阈值,默认为 0 |
{
"query": "云原生开发配置自定义按钮"
}
响应为 JSON 格式,包含一个结果数组,每个结果包含以下字段:
| 字段名 | 类型 | 描述 |
|---|---|---|
| score | number | 匹配相关性分数,范围 0-1 |
| chunk | string | 匹配的知识库内容文本 |
| metadata | object | 内容元数据 |
| 字段名 | 类型 | 描述 |
|---|---|---|
| hash | string | 内容的唯一哈希值 |
| name | string | 文档名称 |
| path | string | 文档路径 |
| position | number | 内容在原文档中的位置 |
| score | number | 匹配相关性分数 |
| type | string | 内容类型,如 "code"、"issue" |
| url | string | 内容 URL |
[
{
"score": 0.8671732,
"chunk": "该云原生远程开发解决方案基于Docker...",
"metadata": {
"hash": "15f7a1fc4420cbe9d81a946c9fc88814",
"name": "quick-start",
"path": "vscode/quick-start.md",
"position": 0,
"score": 0.8671732
}
}
]
注意:{slug} 是运行知识库插件的仓库 slug,例如 CNB 官方文档知识库为 cnb/docs
curl -X "POST" "https://api.cnb.cool/{slug}/-/knowledge/base/query" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${token}" \
-d '{
"query": "云原生开发配置自定义按钮"
}'
chunk 字段包含了匹配到的知识库内容片段,为 Markdown 格式的文本。score 值越高表示匹配度越高。slug 是运行知识库插件的仓库 slug。