Skip to content

Code Review:3 high / 4 medium / 4 low — 無 timeout、README 範例照抄必炸、無法 import #1

Description

@andyuan997

Code review 結果,按嚴重度排序。這是會被其他人實際使用的公開 SDK,故從嚴審查。✅ 全歷史無 API key 洩漏(但見 #11 內網位址)。

🔴 High

1. 所有 HTTP 請求都沒有 timeout

位置: Dify-Knowledge-Python-SDK.py:43 及全部 14 處 requests 呼叫(76, 92, 113, 128, 154, 184, 200, 216, 232, 251, 275, 293, 320)

requests 預設無超時,Dify 伺服器 hang 住時呼叫端執行緒永久阻塞;批次匯入知識庫的排程會整個卡死。對 SDK 是最基本的缺陷。

  • 所有呼叫加 timeout,__init__ 提供可設定預設值(如 timeout=30),或改用共用 Session

2. README 範例誤用 create_dataset 回傳值,照抄必炸

位置: README.md:32-38

create_dataset() 回傳完整 JSON dict,README 卻寫 dataset_id = client.create_dataset(...) 直接傳給 create_document_from_text → URL 拼成 /datasets/{'id': 'xxx', ...}/...,伺服器回 404/400。L55 的 document_id 也是未定義變數。

  • 改為 dataset = client.create_dataset(...) 後取 dataset['id'];補 document_id 取得方式

3. 檔案內建示例引用未定義變數 your_api_url,直接執行必 NameError

位置: Dify-Knowledge-Python-SDK.py:328README.md:28

L325-326 定義的是 api_key/api_url,L328 卻寫 DifySdkClient(api_key, your_api_url)

  • 兩處改為 DifySdkClient(api_key, api_url)

🟡 Medium

4. 回傳值形狀不一致,分頁資訊被丟棄(:94, 234 vs :277)

get_datasets/get_docs 回傳 .get('data', [])(丟掉 total/has_more),get_document_segments 回完整 JSON,delete 系列回 None。資料集超過 20 筆時呼叫端無從得知還有下一頁。

  • 統一回傳完整 JSON,或提供自動翻頁的 generator

5. 非 200 錯誤丟失 Dify 錯誤內文;delete docstring 與行為不符(:44 等)

raise_for_status() 只有狀態碼,Dify body 裡的錯誤碼(如 dataset_name_duplicate)全遺失。delete 系列 docstring 寫 return response 但實際 return None。

  • 包裝 DifyApiError 附上 response body 的 code/message

6. 上傳檔案的 file handle 永不關閉(:74, 182)

"file": open(file_path, "rb") 無 close,批次上傳時 fd 洩漏 → 'Too many open files';Windows 上檔案被鎖。

  • with open(...) as f: 包住,files tuple 提供檔名

7. 檔名含連字號無法 import,README 也從未示範 import

import Dify-Knowledge-Python-SDK 是 SyntaxError;README 所有範例直接用 DifySdkClient 而無 import 語句,新用戶第一步就卡住。

  • 改名 dify_knowledge_sdk.py,README 補 import

🟢 Low

  1. :34, 62, 146, 172 — 使用底線版舊 API 路徑(create_by_text 等),官方現行為連字號版,屬 deprecated(可能)→ 改連字號版並註明支援版本
  2. :16, 91, 231 — api_url 未 rstrip('/')、query string 用 f-string 拼接(參數注入面)、全檔無 type hints → GET 改用 params={...}
  3. :1-5, 131 vs 158 — import 重複兩次;update_document_via_text vs update_document_from_file 命名不一致
  4. git 歷史 commit 8f0ad04 — 初始版本把內網位址 http://10.231.17.35/v1 寫成預設值,仍留在歷史(非金鑰,但洩露內網拓撲資訊)→ 在意可用 filter-repo 清除

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions