dify 通过API添加的段落卡在'indexing'状态,

6fe3ivhb  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(41)

自我检查

  • 这仅用于提交错误报告,如果您想提问,请访问 Discussions
  • 我已在现有问题中进行了搜索,包括已关闭的问题。
  • 我确认我使用英文提交此报告(我已阅读并同意 Language Policy )。
  • 请务必使用英文提交问题,否则会被关闭。谢谢!:)
  • 请不要修改此模板 :) 并填写所有必需的字段。

Dify版本

0.6.12

云或自托管

自托管(Docker)

重现步骤

  1. 通过API创建一个带有任何文本的文档
  2. 通过API向其添加段落
  3. 等待文档从Queued/Indexing更改为Available
  4. 尝试启用/禁用添加的段落或检查API中的段落状态

✔️ 预期行为

在一段时间后,段落将被索引/准备好,能够启用/禁用段落。

❌ 实际行为

所有段落都卡在“indexing”状态。

如果在创建文档时将整个文本添加到处理中,就不会发生这种情况。但是,然后分块器会弄乱它,无法正确创建段落。因此,我手动将这些段落分开进行QA,并通过API添加它们。

1qczuiv0

1qczuiv01#

嘿 @racerxdl! 👋 我在这里帮助你解决bug、问题和成为贡献者。让我们一起解决这个问题!
要解决通过API添加的段卡在"indexing"状态的问题,你需要确保索引过程成功完成并将段状态更新为"completed"。以下是一个可能的解决方案:

  1. 确保在段加载后调用 _load 方法。
  2. _load 方法完成后更新段状态为 "completed"。
    这是带有必要更改的相关代码片段:
def _load(self, index_processor: BaseIndexProcessor, dataset: Dataset,
          dataset_document: DatasetDocument, documents: list[Document]) -> None:
    """
Insert index and update document/segment status to completed
"""
    embedding_model_instance = None
    if dataset.indexing_technique == 'high_quality':
        embedding_model_instance = self.model_manager.get_model_instance(
            tenant_id=dataset.tenant_id,
            provider=dataset.embedding_model_provider,
            model_type=ModelType.TEXT_EMBEDDING,
            model=dataset.embedding_model
        )

    # chunk nodes by chunk size
    indexing_start_at = time.perf_counter()
    tokens = 0
    chunk_size = 10

    # Assuming the indexing process happens here
    documents = index_processor.transform(text_docs, embedding_model_instance=embedding_model_instance,
                                          process_rule=process_rule, tenant_id=dataset.tenant_id,
                                          doc_language=doc_language)

    # Update segment status to completed
    self._update_segments_by_document(
        dataset_document_id=dataset_document.id,
        update_params={
            DocumentSegment.status: "completed",
            DocumentSegment.indexing_at: datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
        }
    )

    # Update document status to completed
    self._update_document_index_status(
        document_id=dataset_document.id,
        after_indexing_status="completed",
        extra_update_params={
            DatasetDocument.indexing_completed_at: datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
        }
    )

此外,你还可以使用 duplicate_document_indexing_task 函数处理重试,确保索引过程成功完成:

from duplicate_document_indexing_task import duplicate_document_indexing_task

# Retry indexing for a specific document ID
duplicate_document_indexing_task.delay(dataset_id, [document_id])

确保在段加载后调用此 _load 方法,并确保一旦索引过程完成,状态更新为 "completed"。这应该解决段卡在"indexing"状态的问题 1(https://github.com/langgenius/dify/blob/main/api/core/indexing_runner.py)2(https://github.com/langgenius/dify/blob/main/api/tasks/retry_document_indexing_task.py)3(https://github.com/langgenius/dify/blob/main/api/tasks/create_segment_to_index_task.py)4(https://github.com/langgenius/dify/blob/main/api/tasks/duplicate_document_indexing_task.py)。

  • 要继续与 Dosu 交谈,请提及 @dosu。*
xesrikrc

xesrikrc2#

请分享API的curl,这样我们就可以检查真正的问题。@racerxdl

相关问题