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

170 lines
12 KiB
Markdown
Raw Normal View History

2024-12-20 16:04:03 +08:00
## FunctionDef recreate_summary_vector_store(knowledge_base_name, allow_empty_kb, vs_type, embed_model, file_description, model_name, temperature, max_tokens)
**recreate_summary_vector_store**: 此函数的功能是重建单个知识库文件摘要。
**参数**:
- `knowledge_base_name`: 知识库的名称,类型为字符串。
- `allow_empty_kb`: 是否允许空的知识库布尔类型默认为True。
- `vs_type`: 向量存储类型,字符串类型,默认值由`DEFAULT_VS_TYPE`变量决定。
- `embed_model`: 嵌入模型名称,字符串类型,默认值由`EMBEDDING_MODEL`变量决定。
- `file_description`: 文件描述,字符串类型,默认为空字符串。
- `model_name`: LLM模型名称字符串类型默认值为`LLM_MODELS`列表的第一个元素。
- `temperature`: LLM采样温度浮点数类型必须在0.0到1.0之间。
- `max_tokens`: 限制LLM生成Token的数量整数类型或None默认为None代表使用模型的最大值。
**代码描述**:
`recreate_summary_vector_store`函数主要用于重建指定知识库的文件摘要。首先,通过`KBServiceFactory.get_service`方法获取知识库服务实例。如果指定的知识库不存在且不允许空的知识库则返回404错误。否则会先删除现有的知识库摘要然后重新创建。接着利用指定的LLM模型参数创建文本摘要适配器并对知识库中的每个文件进行摘要处理。每处理完一个文件就会向客户端发送一个包含处理状态的JSON消息。如果在处理某个文件时出错则会记录错误信息并跳过该文件。
此函数通过`EventSourceResponse`返回一个生成器,该生成器会逐步产生处理每个文件的状态信息,使得客户端可以实时获取处理进度。
在项目中,`recreate_summary_vector_store`函数被`server/api.py/mount_filename_summary_routes`中的`mount_filename_summary_routes`函数调用并注册为FastAPI的一个POST路由。这表明该函数主要用于处理HTTP POST请求用于在Web服务中重建知识库文件摘要。
**注意**:
- 确保在调用此函数之前,已经正确设置了`DEFAULT_VS_TYPE`、`EMBEDDING_MODEL`、`LLM_MODELS`等全局变量。
- 函数处理过程中可能会产生大量日志,建议监控日志以便及时发现和解决问题。
- 调用此函数可能需要较长的处理时间,特别是当知识库文件数量较多时。
**输出示例**:
```json
{
"code": 200,
"msg": "(1 / 10): example_file.txt",
"total": 10,
"finished": 1,
"doc": "example_file.txt"
}
```
此JSON表示第一个文件`example_file.txt`已经处理完成总共需要处理10个文件。
### FunctionDef output
**output**: 此函数的功能是输出知识库摘要的创建或更新过程中的状态信息。
**参数**: 此函数没有参数。
**代码描述**: `output` 函数是一个生成器,用于在知识库摘要的创建或更新过程中,逐步输出处理状态信息。首先,通过 `KBServiceFactory.get_service` 方法获取知识库服务实例。如果指定的知识库不存在且不允许空知识库则生成并返回一个包含错误代码404和相应消息的字典。否则会重新创建知识库摘要包括删除旧的知识库摘要和创建新的知识库摘要。
接下来,函数初始化两个 `ChatOpenAI` 实例,`llm` 和 `reduce_llm`,用于生成和合并文本摘要。然后,通过 `SummaryAdapter.form_summary` 方法创建一个摘要适配器实例,用于处理文本摘要。
函数遍历知识库中的文件,对每个文件使用 `kb.list_docs` 方法获取文档信息,并通过摘要适配器的 `summary.summarize` 方法生成摘要。如果摘要成功添加到知识库摘要中则输出一个包含成功状态的JSON字符串如果在添加摘要过程中出错则输出一个包含错误信息的JSON字符串。
此函数与项目中的其他组件紧密相关,特别是与知识库服务 (`KBServiceFactory`)、摘要生成 (`ChatOpenAI` 和 `SummaryAdapter`) 相关联。它通过调用这些组件的方法,实现了知识库摘要的自动化创建和更新过程,并通过生成器逐步返回处理状态,为知识库管理提供了实时反馈。
**注意**:
- 确保在调用此函数之前,知识库名称、嵌入模型等参数已正确配置,以确保能够正确初始化知识库服务和摘要生成器。
- 此函数作为生成器,需要在循环或迭代器中使用,以获取所有的状态信息。
- 在处理大量文件或大型知识库时,此函数可能需要较长时间执行,建议异步调用或在后台任务中执行。
***
## FunctionDef summary_file_to_vector_store(knowledge_base_name, file_name, allow_empty_kb, vs_type, embed_model, file_description, model_name, temperature, max_tokens)
**summary_file_to_vector_store**: 此函数的功能是根据文件名称对单个知识库进行摘要,并将摘要结果存储到向量存储中。
**参数**:
- `knowledge_base_name`: 知识库的名称,示例值为"samples"。
- `file_name`: 需要进行摘要的文件名称,示例值为"test.pdf"。
- `allow_empty_kb`: 是否允许空的知识库默认为True。
- `vs_type`: 向量存储的类型,默认值由`DEFAULT_VS_TYPE`指定。
- `embed_model`: 嵌入模型的名称,默认值由`EMBEDDING_MODEL`指定。
- `file_description`: 文件的描述,默认为空字符串。
- `model_name`: LLM模型的名称默认值为`LLM_MODELS`数组的第一个元素,用于指定使用的语言模型。
- `temperature`: LLM采样温度取值范围为0.0至1.0,默认值由`TEMPERATURE`指定。
- `max_tokens`: 限制LLM生成的Token数量若为None则代表使用模型的最大值默认为None。
**代码描述**:
`summary_file_to_vector_store`函数主要负责将指定文件的内容进行摘要,并将摘要结果存储到向量存储中。首先,通过`KBServiceFactory.get_service`获取知识库服务实例。如果指定的知识库不存在且不允许空的知识库则返回404错误。否则使用`KBSummaryService`创建知识库摘要服务,并调用`create_kb_summary`方法重新创建知识库摘要。接着初始化两个LLM模型实例用于生成摘要。通过`SummaryAdapter.form_summary`方法结合LLM模型和文件描述对文件内容进行摘要。最后将摘要结果添加到知识库摘要中并根据操作结果返回相应的状态码和信息。
在项目中,`summary_file_to_vector_store`函数被`server/api.py/mount_filename_summary_routes`对象调用用于处理HTTP POST请求实现根据文件名称对单个知识库进行摘要的API接口。这表明该函数是知识库管理功能中处理文件摘要的核心逻辑部分。
**注意**:
- 确保传入的`knowledge_base_name`和`file_name`有效,以避免处理不存在的知识库或文件。
- `allow_empty_kb`参数在知识库为空时特别有用,可以根据实际需求调整其值。
- 调用此函数时,需要注意`model_name`、`temperature`和`max_tokens`参数的设置,以确保摘要生成的效果符合预期。
**输出示例**:
```json
{
"code": 200,
"msg": "test.pdf 总结完成",
"doc": "test.pdf"
}
```
或在知识库不存在时:
```json
{
"code": 404,
"msg": "未找到知识库 samples"
}
```
### FunctionDef output
**output**: 此函数的功能是输出知识库摘要的处理结果。
**参数**: 此函数没有参数。
**代码描述**: `output` 函数是知识库摘要API中的一个关键组成部分主要负责输出知识库摘要的处理结果。首先通过 `KBServiceFactory.get_service` 方法获取知识库服务实例。如果指定的知识库不存在且不允许空知识库则返回404状态码和相应的错误信息。如果知识库存在或允许空知识库函数将继续执行以下步骤
1. 使用 `KBSummaryService` 创建或更新知识库摘要。
2. 通过 `get_ChatOpenAI` 方法初始化两个语言模型实例,用于生成和优化文本摘要。
3. 使用 `SummaryAdapter.form_summary` 方法配置文本摘要的生成流程。
4. 通过 `KBService.list_docs` 方法获取指定文件的文档列表。
5. 调用 `SummaryAdapter.summarize` 方法生成文档摘要。
6. 将生成的文档摘要添加到知识库摘要中,并检查操作是否成功。
如果知识库摘要添加成功函数将记录日志信息并返回200状态码、成功信息和文件名。如果在添加知识库摘要时发生错误函数将记录错误信息并返回500状态码和错误信息。
**注意**:
- 在调用 `output` 函数之前,需要确保知识库名称、向量存储类型和嵌入模型等参数已经正确配置。
- `get_ChatOpenAI` 方法返回的语言模型实例用于生成和优化文本摘要确保传入的模型名称、温度和最大token数量等参数符合预期。
- `SummaryAdapter.form_summary` 方法配置的文本摘要生成流程包括文档的格式化、摘要生成和摘要合并等步骤,需要根据实际需求调整参数。
- 在处理大量文档或执行复杂的摘要生成任务时,应注意性能和资源消耗,可能需要优化算法或调整系统资源。
此函数在知识库摘要API中扮演着核心角色通过综合利用知识库服务、语言模型和文本摘要适配器等组件实现了知识库文档摘要的自动化生成和更新。
***
## FunctionDef summary_doc_ids_to_vector_store(knowledge_base_name, doc_ids, vs_type, embed_model, file_description, model_name, temperature, max_tokens)
**summary_doc_ids_to_vector_store**: 此函数的功能是根据文档ID列表生成单个知识库的文档摘要并将摘要信息存储到向量存储中。
**参数**:
- `knowledge_base_name`: 知识库名称,字符串类型,默认示例为"samples"。
- `doc_ids`: 文档ID列表列表类型默认为空列表示例值为["uuid"]。
- `vs_type`: 向量存储类型,字符串类型,默认值由`DEFAULT_VS_TYPE`变量决定。
- `embed_model`: 嵌入模型名称,字符串类型,默认值由`EMBEDDING_MODEL`变量决定。
- `file_description`: 文件描述,字符串类型,默认为空字符串。
- `model_name`: LLM模型名称字符串类型默认值为`LLM_MODELS`列表的第一个元素,用于描述使用的语言模型。
- `temperature`: LLM采样温度浮点数类型用于控制生成文本的多样性默认值由`TEMPERATURE`变量决定取值范围为0.0至1.0。
- `max_tokens`: 限制LLM生成Token数量整型或None默认为None代表模型最大值。
**代码描述**:
函数首先通过`KBServiceFactory.get_service`方法获取知识库服务实例。如果指定的知识库不存在则返回404状态码和相应的错误信息。否则函数将初始化两个`ChatOpenAI`实例,分别用于生成文档摘要和合并摘要。接着,使用`SummaryAdapter.form_summary`方法创建文本摘要适配器,并通过知识库服务实例的`get_doc_by_ids`方法获取文档信息。然后,将文档信息转换为`DocumentWithVSId`对象,并调用摘要适配器的`summarize`方法生成文档摘要。最后将生成的文档摘要转换为字典格式并返回状态码为200表示操作成功。
**注意**:
- 确保传入的知识库名称、文档ID列表和向量存储类型等参数正确无误以避免查询错误或操作失败。
- 在调用此函数之前,请确保知识库服务已正确配置,包括知识库存在性、向量存储类型和嵌入模型等。
- 函数依赖于`ChatOpenAI`实例进行文档摘要的生成和合并因此需要确保提供的模型名称、采样温度和Token数量限制等参数适合于所使用的语言模型。
**输出示例**:
调用`summary_doc_ids_to_vector_store`函数可能会返回如下格式的响应:
```json
{
"code": 200,
"msg": "总结完成",
"data": {
"summarize": [
{
"id": "文档ID1",
"page_content": "这里是文档摘要内容...",
"metadata": {
"file_description": "文件描述信息",
"summary_intermediate_steps": "摘要中间步骤信息",
"doc_ids": "文档ID列表"
}
},
{
"id": "文档ID2",
"page_content": "这里是另一个文档的摘要内容...",
"metadata": {
"file_description": "文件描述信息",
"summary_intermediate_steps": "摘要中间步骤信息",
"doc_ids": "文档ID列表"
}
}
]
}
}
```
此输出示例展示了函数在处理完文档后返回的摘要结果格式其中包含了文档的ID、摘要内容和相关的元数据信息。