2025年2月21日 星期五

Python 開發筆記 - promptpack-for-code 一個將專案的目錄結構和指定檔案輸出單一文字檔,讓 AI 點評跟建議的小工具


近半年已經極高的比例都會用 claude.ai 做事,最近用量太大後,再加上 grok.com 免費中,就想到如果碰到付費額度用原被凍時,該怎樣快速換另一家 AI 服務使用,也可以避免與 AI 輔助努力了老半天,重啟對話又要打得落落長的內容。


因此就開發了一個小工具:promptpack-for-code

他的用法就是把指定專案的目錄結構、指定的程式碼輸出成 output.txt ,接著就可以上傳 output.txt 跟 AI 互動,成果包括可以請他點評哪邊可以優化、撰寫系統架構、教學文件等等,十分方便

```
% python3 -m venv venv
% source venv/bin/activate
(venv) /tmp % pip install promptpack-for-code
% git clone https://github.com/changyy/py-promptpack-for-code
% promptpack-for-code py-promptpack-for-code -r py-promptpack-for-code 
Successfully created output.txt
```

問問此時此刻(2025-02-21)最強的 Grok 3 AI:

```
### 專案概述

`py-promptpack-for-code` 是一個 Python 命令列工具,旨在將多個程式碼檔案或目錄中的檔案打包成一個結構化的單一文字檔,特別針對與 AI 語言模型進行程式碼審查或分析的需求進行優化。這個工具的主要功能包括:

1. **檔案結構生成**:根據指定的根目錄生成樹狀目錄結構,方便理解專案的組織。
2. **內容整合**:將指定目錄中的程式碼檔案內容合併到輸出檔案,並保留相對路徑。
3. **過濾與忽略**:支援自訂忽略模式(例如 `.git`、`.pyc` 等),避免不必要的檔案內容。
4. **進度顯示**:提供進度條選項,適合處理大型專案時使用。
5. **易於與 AI 整合**:輸出格式規範且結構化,便於直接輸入到 AI 聊天平台進行分析。

### 專案評論

#### 優點
1. **實用性強**:
   - 該工具解決了一個具體且常見的痛點:如何快速準備程式碼供 AI 分析。它不僅合併檔案,還提供了目錄結構,這對理解上下文非常有幫助。
   - 支援多目錄處理、進度條、強制覆蓋等功能,滿足不同使用場景的需求。

2. **結構清晰**:
   - 專案採用標準 Python 包結構(`src/`、`tests/` 等),易於維護和擴展。
   - 文件(如 `README.md` 和 `LICENSE`)完整,提供了詳細的使用說明和授權資訊。

3. **測試覆蓋良好**:
   - `tests/test_core.py` 包含多個單元測試,涵蓋核心功能(樹狀結構生成、檔案處理、忽略模式等),提高了程式碼的可靠性。

4. **部署與分享便利**:
   - 透過 `setup.py` 和 GitHub Actions(`python-publish.yml`)實現 PyPI 發佈,使用者只需 `pip install` 即可使用。
   - MIT 許可證允許廣泛的開源使用和修改。

5. **效能考慮**:
   - 使用 `ThreadPoolExecutor` 實現並行處理檔案,對於大型專案具有一定的效能優勢。

#### 不足之處
1. **功能單一性**:
   - 目前工具主要專注於生成文字輸出,缺乏更高級的分析或格式化選項(例如 JSON 輸出或程式碼摘要生成)。
   - 對於非文字檔案的處理較為簡單(僅跳過),可能無法滿足需要處理混合內容的需求。

2. **錯誤處理有限**:
   - 雖然有基本的日誌記錄(`logging`),但對於檔案編碼錯誤(`UnicodeDecodeError`)或權限問題的處理僅限於跳過或警告,缺乏更靈活的應對策略。

3. **文件不夠詳盡**:
   - `README.md` 提供了基本用法,但對於進階功能(例如自訂忽略模式的具體範例)或輸出檔案的詳細格式說明不夠深入。
   - 缺少 API 文件,對於希望程式化調用的開發者不夠友好。

4. **忽略模式的靈活性**:
   - 雖然支援 `fnmatch` 通配符,但忽略模式僅限於檔案名稱,無法根據檔案內容或大小進行過濾。

### 優化建議

1. **增加輸出格式選項**:
   - 除了目前的純文字輸出,新增 JSON 或 YAML 格式選項,讓使用者可以更方便地將結果用於其他工具或程式化處理。
   - 例如:
     ```json
     {
       "tree": {
         "project-name": {
           "src": {
             "main.py": "def main():\n    print('Hello')\n",
             "utils": {
               "helper.py": "def helper():\n    return True\n"
             }
           }
         }
       }
     }
     ```

2. **增強錯誤處理與回饋**:
   - 提供選項讓使用者決定如何處理非 UTF-8 檔案(例如轉換編碼或以二進位模式顯示部分內容)。
   - 對於權限錯誤,記錄到輸出檔案中,而不是僅在日誌中警告,這樣使用者能更容易追蹤問題。

3. **擴展忽略模式功能**:
   - 支援基於檔案大小、修改時間或內容關鍵字的過濾。例如:
     ```bash
     promptpack-for-code /path/to/src --ignore-size ">10MB" --ignore-modified "<2023-01-01"
     ```
   - 允許從外部檔案(如 `.gitignore`)載入忽略模式,增強與現有工作流的兼容性。

4. **改善文件與範例**:
   - 在 `README.md` 中新增更多實際範例,例如處理大型專案或與 AI 工具(如 ChatGPT 或 GitHub Copilot)配合的具體流程。
   - 提供一份獨立的 `CONTRIBUTING.md`,詳細說明如何提交問題或貢獻程式碼。

5. **新增摘要功能**:
   - 提供選項生成程式碼摘要(例如每個檔案的前幾行或函數簽名),減少輸出檔案的大小,方便快速預覽。
     ```bash
     promptpack-for-code /path/to/src --summary
     ```

6. **支援增量更新**:
   - 增加一個模式,僅處理自上次運行以來有變更的檔案(例如根據檔案修改時間戳記),提高處理效率。
     ```bash
     promptpack-for-code /path/to/src --incremental
     ```

7. **UI 或互動模式**:
   - 開發一個簡單的 TUI(文字使用者介面)或互動模式,讓使用者在命令列中動態選擇要處理的目錄或檔案。

### 總結

`py-promptpack-for-code` 是一個設計良好且實用的工具,特別適合需要與 AI 進行程式碼分析的開發者。其核心功能已經相當成熟,但在靈活性、錯誤處理和文件方面仍有提升空間。透過上述建議,這個專案可以進一步滿足更廣泛的使用場景,並提升使用者的體驗。

如果你有具體的使用需求或想討論某個優化方向,我可以進一步提供更詳細的建議或程式碼範例!
```

沒有留言:

張貼留言