返回首頁

GitHub Repo

Dify 合併 Qdrant 交易修補,解決首次啟用標註回覆時找不到集合綁定

10 月 5 日的 Dify 1.16.1 社群案例指出,Qdrant 標註回覆初始化可能因資料庫 session 不一致而失敗。上游已於 10 月 6 日合併修補,但正式版本是否包含變更仍需確認。

The original uploader was Ggia at Greek Wikipedia. · CC BY-SA 2.5 · Image source
zh-Hant

Dify 已於 10 月 6 日將修補 #43543 合併至 main,處理使用 Qdrant 時首次啟用「標註回覆」可能失敗的問題。前一天的回報來自自架 Dify 1.16.1:當指定嵌入供應端與模型尚無標註集合綁定時,背景工作會拋出找不到綁定的錯誤;同一環境的一般知識庫索引則正常。問題回報、合併紀錄

標註回覆讓開發者保存人工整理的問答,再以嵌入向量比對新問題。相似度超過門檻時,系統直接回傳標準答案,跳過模型生成。這使初始化故障具有實際影響:客服或知識服務即使已有人工答案,也可能無法啟用優先匹配機制。Dify 功能文件

回報者將原因定位到交易邊界。啟用工作透過明確傳入的 SQLAlchemy session 建立集合綁定,並執行 flush();但向量工廠沒有把該 session 傳至後端初始化方法,Qdrant 整合隨後改用 db.session 查詢。新增資料尚未提交,另一個 session 因而查不到紀錄,初始化失敗後交易回滾。這是回報者的機制分析;SQLAlchemy 官方文件也說明,flush 在交易內執行,與 commit 提交交易是不同步驟。技術分析、SQLAlchemy 文件

已合併修補以使用呼叫端 session 查找 Qdrant 標註綁定為方向,合併頁面顯示 43 項檢查通過。這提供了上游處理的證據,但不能直接推定所有部署版本都已修復,也不能由此確認其他向量後端受到相同影響。修補狀態

工程團隊還需留意監控落差:回報指出,啟用工作會捕捉例外而未重新拋出,使 Celery 顯示成功,功能卻仍未啟用。因此驗收應包含首次建立綁定、實際啟用狀態與標註命中結果;後續則應追蹤包含修補的正式版本,以及這項錯誤回報行為是否另行改善。回報細節

來源

  1. Annotation Reply fails with Qdrant: Dataset Collection Bindings does not exist!
  2. fix: use caller session for Qdrant annotation bindings
  3. Annotation Reply
  4. Session Basics — SQLAlchemy 2.1 Documentation