Skip to content

popolee0513/code_reviewer

Repository files navigation

Code Reviewer API

一個基於 FastAPI 與 LangChain 的專案分析服務,能自動解析上傳的程式碼專案並找出功能實作位置,還能根據 README.md 提供執行建議。

專案背景

開發者經常需要快速了解一個專案的功能實現位置與執行方式,本服務允許你上傳整個專案 ZIP,並結合 AI 來:

  • 抓取 README.md 內容,給出專案執行計劃建議
  • 根據你描述的功能需求,智能分析程式碼,回傳功能實作位置(檔案、函式、行數)

專案架構與技術

  • FastAPI:建立 REST API 服務
  • LangChain + OpenAI API:自然語言理解與文本分析
  • FAISS:建立程式碼內容的向量索引,做相似度檢索
  • Docker:容器化部署,方便移植與擴展

環境設定

  1. 安裝 Python 3.10+

  2. 安裝依賴套件

    pip install -r requirements.txt
  3. 設定環境變數

    export OPENAI_API_KEY="你的OpenAI API金鑰"

啟動服務

直接啟動(開發用)

uvicorn code_reviewer:app --host 0.0.0.0 --port 8000 --reload

Docker 啟動(生產建議)

docker build -t code-reviewer-api .
docker run -p 8000:8000 -e OPENAI_API_KEY="你的OpenAI API金鑰" code-reviewer-api

API 介面說明

POST /analyze-project/

說明:
接收上傳的專案 ZIP 和功能需求文字,回傳功能分析與執行計劃建議。

請求格式:
multipart/form-data 表單包含:

欄位名稱 類型 說明 範例
zip_file file 專案 ZIP 檔 nestjs-channel-messenger-demo-main.zip
project_need string (text) 你想查找的功能描述文字 Create a multi-channel forum api...

回應格式:

{
  "execution_plan_suggestion": "根據 README.md 的建議執行步驟描述...",
  "feature_analysis": [
    {
      "feature_description": "建立頻道",
      "implementation_location": [
        {
          "file": "src/modules/channel/channel.resolver.ts",
          "function": "createChannel",
          "lines": "13-16"
        },
        {
          "file": "src/modules/channel/channel.service.ts",
          "function": "create",
          "lines": "21-24"
        }
      ]
    },
    {
      "feature_description": "在頻道中傳送訊息",
      "implementation_location": [
        {
          "file": "src/modules/message/message.resolver.ts",
          "function": "createMessage",
          "lines": "13-16"
        }
      ]
    }
  ]
}

功能流程說明

  1. 接收 ZIP 檔,存入暫存資料夾 ./temp_upload
  2. 解壓 ZIP,並尋找專案中的 README.md
  3. 用 AI 分析 README.md,生成清晰的專案執行計劃建議
  4. 使用 LangChain 對 project_need 文字進行功能需求抽取
  5. 遞迴讀取專案中的所有程式碼檔案,分段建檔,建立向量索引
  6. 根據需求查找程式碼實作位置(檔案路徑、函式名稱、行號範圍)
  7. 回傳完整 JSON 結果

支援的程式碼檔案格式

  • Python .py
  • JavaScript .js
  • TypeScript .ts, .tsx
  • Java .java
  • Go .go
  • Ruby .rb
  • PHP .php

注意事項

  • 確保設定好 OPENAI_API_KEY
  • ZIP 檔內容會解壓在 ./temp_upload/extracted/,每次分析前會清理舊資料
  • 本服務僅支援常見的程式碼格式,不支援二進位檔或不支援的語言
  • API 回傳的行號是根據程式碼實際行數,不包括測試檔、實體檔等會被排除

測試建議

  1. 準備一個有明確功能的專案 ZIP
  2. 編寫對應的 project_need 文字,描述想找的功能
  3. 呼叫 API,驗證回傳 JSON 的功能實作位置是否正確
  4. 查看 execution_plan_suggestion 是否給出合理執行說明

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published