Langchain-Chatchat/markdown_docs/server/knowledge_base/kb_api.md

96 lines
5.8 KiB
Markdown
Raw Normal View History

2024-12-20 16:04:03 +08:00
## FunctionDef list_kbs
**list_kbs**: 此函数的功能是获取知识库列表。
**参数**: 此函数不接受任何参数。
**代码描述**: `list_kbs` 函数是一个无参数函数,用于从数据库中获取知识库的列表。它通过调用 `list_kbs_from_db` 函数来实现这一功能。`list_kbs_from_db` 函数从数据库中查询满足特定条件的知识库名称列表,并返回这些名称。然后,`list_kbs` 函数将这些名称封装在 `ListResponse` 类的实例中返回。`ListResponse` 类是专门用于封装列表数据响应的类,它继承自 `BaseResponse` 类,能够提供状态码、状态消息以及数据列表。这样的设计使得 API 的响应格式保持一致,便于前端开发者理解和使用。
**注意**:
- `list_kbs` 函数依赖于 `list_kbs_from_db` 函数正确地从数据库中获取知识库名称列表。因此,确保数据库连接和查询逻辑正确是使用此函数的前提。
- 返回的 `ListResponse` 实例中包含的数据列表应正确反映数据库中的知识库情况。这要求 `list_kbs_from_db` 函数能准确地执行其查询逻辑。
- 在实际部署和使用时,应注意数据库的性能和响应时间,尤其是在知识库数量较多的情况下,以保证良好的用户体验。
**输出示例**:
假设数据库中存在三个知识库,名称分别为 "知识库A", "知识库B", "知识库C",则函数可能返回的 `ListResponse` 实例如下所示:
```
{
"code": 200,
"msg": "success",
"data": ["知识库A", "知识库B", "知识库C"]
}
```
这表示 API 调用成功,且返回了包含三个知识库名称的列表。
## FunctionDef create_kb(knowledge_base_name, vector_store_type, embed_model)
**create_kb**: 此函数用于创建一个新的知识库。
**参数**:
- `knowledge_base_name`: 知识库的名称,类型为字符串。通过示例参数可以提供默认示例值。
- `vector_store_type`: 向量存储类型,类型为字符串,默认值为"faiss"。
- `embed_model`: 嵌入模型的名称,类型为字符串,默认使用项目配置的嵌入模型。
**代码描述**:
此函数首先通过调用`validate_kb_name`函数验证知识库名称的合法性。如果名称不合法或为空则分别返回403和404状态码的`BaseResponse`对象,提示错误信息。接下来,使用`KBServiceFactory.get_service_by_name`方法检查是否已存在同名的知识库如果存在则返回404状态码的`BaseResponse`对象,提示知识库已存在。如果验证通过,函数将通过`KBServiceFactory.get_service`方法获取对应的知识库服务实例,并调用该实例的`create_kb`方法创建知识库。如果在创建过程中发生异常将记录错误信息并返回500状态码的`BaseResponse`对象。成功创建知识库后返回200状态码的`BaseResponse`对象,提示已新增知识库。
**注意**:
- 在调用此函数创建知识库之前,需要确保知识库名称不为空且不包含非法字符,以避免安全风险。
- 向量存储类型和嵌入模型应根据项目需求和配置进行选择,以确保知识库的正确创建和后续操作的有效性。
- 在处理异常时,应注意记录详细的错误信息,以便于问题的定位和解决。
**输出示例**:
如果成功创建名为"技术文档库"的知识库,函数将返回以下`BaseResponse`对象:
```
{
"code": 200,
"msg": "已新增知识库 技术文档库"
}
```
如果尝试创建一个已存在的知识库,例如名为"技术文档库",函数将返回:
```
{
"code": 404,
"msg": "已存在同名知识库 技术文档库"
}
```
如果知识库名称不合法,将返回:
```
{
"code": 403,
"msg": "Don't attack me"
}
```
## FunctionDef delete_kb(knowledge_base_name)
**delete_kb**: 此函数的功能是删除指定的知识库。
**参数**:
- `knowledge_base_name`: 字符串类型,表示要删除的知识库的名称。此参数通过请求体传入,且提供了示例值 "samples"。
**代码描述**:
`delete_kb` 函数首先验证知识库名称的合法性。如果名称不合法,即不通过 `validate_kb_name` 函数的验证将返回一个状态码为403的 `BaseResponse` 对象,消息内容为 "Don't attack me"表示请求被拒绝。接着函数对知识库名称进行URL解码以确保名称的正确性。
通过 `KBServiceFactory.get_service_by_name` 方法,根据知识库名称获取对应的知识库服务实例。如果实例为 `None`即知识库不存在将返回一个状态码为404的 `BaseResponse` 对象,消息内容为 "未找到知识库 {knowledge_base_name}"。
若知识库服务实例获取成功,函数尝试调用知识库服务实例的 `clear_vs` 方法来清除知识库中的向量数据,然后调用 `drop_kb` 方法删除知识库。如果删除操作成功将返回一个状态码为200的 `BaseResponse` 对象,消息内容为 "成功删除知识库 {knowledge_base_name}"。
如果在删除过程中发生异常将捕获异常并记录错误日志然后返回一个状态码为500的 `BaseResponse` 对象,消息内容为 "删除知识库时出现意外: {e}",其中 `{e}` 是异常信息。
**注意**:
- 在调用此函数之前确保传入的知识库名称是经过URL编码的。
- 此函数依赖于 `validate_kb_name` 函数来验证知识库名称的合法性,以防止潜在的安全风险。
- 删除知识库是一个不可逆的操作,一旦执行,知识库中的所有数据将被永久删除。
**输出示例**:
如果尝试删除一个不存在的知识库 "unknown_kb",函数可能返回的 `BaseResponse` 对象如下:
```
{
"code": 404,
"msg": "未找到知识库 unknown_kb"
}
```
如果成功删除名为 "samples" 的知识库,函数可能返回的 `BaseResponse` 对象如下:
```
{
"code": 200,
"msg": "成功删除知识库 samples"
}
```