dify 上传文档嵌入错误&删除失败文档后,知识库仍保留失败文档的内容,

qni6mghb  于 2个月前  发布在  其他
关注(0)|答案(3)|浏览(30)

自检

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

Dify版本

0.6.11

云或自托管

自托管(Docker)

重现步骤

1.当我上传一个PDF时,网页显示错误

然后我看到了ollama日志

然后我检查了PDF,似乎文档的最后一页有多个换行符
2.当我删除上传失败的PDF后,我仍然可以在知识库中检索记录(至少知识库中的另一个文件,否则将无法查询记录)

✔️预期行为

1.成功上传PDF
2.如果PDF上传失败,知识库中的记录可以完全删除

❌实际行为

1.上传PDF出错
2.删除上传记录后,知识库中仍有残留记录

jckbn6z7

jckbn6z71#

要解决您在自托管的Dify版本0.6.11中遇到的文档上传和删除问题,请按照以下步骤操作:

  • 500服务器错误:
  • 确保PDF文件大小不超过15MB的限制。
  • 验证ETL配置是否正确设置。对于社区版本,Dify ETL默认启用,但如果需要,可以通过环境变量启用非结构化ETL。检查环境变量配置1(https://github.com/langgenius/dify-docs/blob/main/en/guides/knowledge-base/create-knowledge-and-upload-documents.md)。
  • 不完整的失败上传删除:
  • 在删除失败的上传时,确保从知识库中删除所有相关记录。这可能需要手动清理数据库条目,如果自动删除过程失败。

以下是一个用于手动清理失败上传的数据库条目的示例代码片段:

# Example: Python script to clean up failed upload records from the database

import sqlite3

def delete_failed_uploads(db_path, document_id):
    try:
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()

        # Delete from the main document table
        cursor.execute("DELETE FROM documents WHERE id = ?", (document_id,))

        # Delete related entries from other tables
        cursor.execute("DELETE FROM document_chunks WHERE document_id = ?", (document_id,))
        cursor.execute("DELETE FROM document_metadata WHERE document_id = ?", (document_id,))

        conn.commit()
        print(f"Successfully deleted records for document ID {document_id}")
    except sqlite3.Error as e:
        print(f"Error deleting records: {e}")
    finally:
        if conn:
            conn.close()

# Usage
db_path = 'path_to_your_database.db'
document_id = 'failed_document_id'
delete_failed_uploads(db_path, document_id)

请确保将path_to_your_database.dbfailed_document_id替换为您数据库的实际路径和失败文档上传的ID。此脚本将帮助确保从知识库中完全删除所有相关记录2(https://github.com/langgenius/dify-docs/blob/main/en/guides/knowledge-base/knowledge-and-documents-maintenance.md)。
此外,您还可以通过Dify界面管理文档段和元数据:

  • **查看和编辑文本段:**您可以在段列表中查看、添加和编辑文本段。这包括检查段质量,以确保没有过短或过长的段落会影响问答性能。
  • **元数据管理:**管理元数据信息,如标题、URL、关键词和描述,这些信息在段落召回过程中使用。
  • **文档禁用和归档:**您可以禁用或归档暂时不需要或不再使用的文档。禁用的文档不会被索引,归档的文档只能查看或删除,不能编辑2(https://github.com/langgenius/dify-docs/blob/main/en/guides/knowledge-base/knowledge-and-documents-maintenance.md)。

有关更详细的说明,请参阅Knowledge Base and Document Maintenance文档2(https://github.com/langgenius/dify-docs/blob/main/en/guides/knowledge-base/knowledge-and-documents-maintenance.md)。

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

kninwzqo2#

@dosu here is the log in docker-api, Task tasks.clean_document_task.clean_document_task report exeception when delete document

and there occur another issue, i can't delete knowledge base (No associated applications)

wyyhbhjk

wyyhbhjk3#

要解决您在自托管的Dify环境中遇到的文档删除和知识库管理问题,请按照以下步骤操作:

1. 在文档删除过程中出现的问题

500 Server Error 是从 llama 模型提供商在文本嵌入请求中出现的服务器端问题。此错误Map到 InvokeServerUnavailableError 并与 requests.exceptions.ConnectionErrorrequests.exceptions.HTTPError1(https://github.com/langgenius/dify/blob/main/api/core/model_runtime/model_providers/ollama/text_embedding/text_embedding.py) 相关联。

解决方法:
  • 检查服务器日志:查看服务器日志以获取更详细的错误消息和堆栈跟踪。
  • 验证模型提供商配置:确保 llama 模型提供商正确配置并可访问。
  • 重启服务:重启相关服务以清除任何临时问题。

2. 删除对象时出现 404 Not Found 错误

尝试删除对象时出现的 404 Not Found 错误可能是由几个原因引起的,例如错误的终端点URL、无效的授权令牌或不存在的记录。

最佳实践:
  • 验证终端点URL:确保终端点URL正确。
  • 检查授权:确认授权令牌有效且具有必要的权限。
  • 验证记录ID:确保您试图删除的记录存在于数据库 2(https://github.com/langgenius/dify/blob/main/api/core/tools/provider/builtin/feishu_base/tools/delete_base_records.yaml)3(https://github.com/langgenius/dify/blob/main/api/controllers/service_api/dataset/document.py) 中。

3. 无法删除知识库

错误消息 "数据集正在被某些应用程序使用。请在删除数据集之前从应用程序中移除它" 表示数据集仍然与某些应用程序关联。

解决方法:
  • 将数据集从应用程序中解除链接:使用数据集导航到应用程序并从中移除数据集。
  • 检查残留链接:确保应用程序中没有对数据集的残留链接或引用。

手动清理示例代码

如果自动删除失败,您可以手动清理失败上传的数据库条目:

import sqlite3

def delete_failed_uploads(db_path, document_id):
    try:
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()

        # Delete from the main document table
        cursor.execute("DELETE FROM documents WHERE id = ?", (document_id,))

        # Delete related entries from other tables
        cursor.execute("DELETE FROM document_chunks WHERE document_id = ?", (document_id,))
        cursor.execute("DELETE FROM document_metadata WHERE document_id = ?", (document_id,))

        conn.commit()
        print(f"Successfully deleted records for document ID {document_id}")
    except sqlite3.Error as e:
        print(f"Error deleting records: {e}")
    finally:
        if conn:
            conn.close()

# Usage
db_path = 'path_to_your_database.db'
document_id = 'failed_document_id'
delete_failed_uploads(db_path, document_id)

用实际路径替换 path_to_your_database.dbfailed_document_id,以及失败的文档上传ID。
通过遵循这些步骤,您应该能够解决Dify环境中的文档删除和知识库管理问题。

  • 要继续与 Dosu 对话,请提及 @dosu。*

相关问题