一個基於 FastAPI 與 LangChain 的專案分析服務,能自動解析上傳的程式碼專案並找出功能實作位置,還能根據 README.md 提供執行建議。
開發者經常需要快速了解一個專案的功能實現位置與執行方式,本服務允許你上傳整個專案 ZIP,並結合 AI 來:
- 抓取 README.md 內容,給出專案執行計劃建議
- 根據你描述的功能需求,智能分析程式碼,回傳功能實作位置(檔案、函式、行數)
- FastAPI:建立 REST API 服務
- LangChain + OpenAI API:自然語言理解與文本分析
- FAISS:建立程式碼內容的向量索引,做相似度檢索
- Docker:容器化部署,方便移植與擴展
-
安裝 Python 3.10+
-
安裝依賴套件
pip install -r requirements.txt
-
設定環境變數
export OPENAI_API_KEY="你的OpenAI API金鑰"
uvicorn code_reviewer:app --host 0.0.0.0 --port 8000 --reload
docker build -t code-reviewer-api .
docker run -p 8000:8000 -e OPENAI_API_KEY="你的OpenAI API金鑰" code-reviewer-api
說明:
接收上傳的專案 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"
}
]
}
]
}
- 接收 ZIP 檔,存入暫存資料夾
./temp_upload
- 解壓 ZIP,並尋找專案中的 README.md
- 用 AI 分析 README.md,生成清晰的專案執行計劃建議
- 使用 LangChain 對 project_need 文字進行功能需求抽取
- 遞迴讀取專案中的所有程式碼檔案,分段建檔,建立向量索引
- 根據需求查找程式碼實作位置(檔案路徑、函式名稱、行號範圍)
- 回傳完整 JSON 結果
- Python
.py
- JavaScript
.js
- TypeScript
.ts, .tsx
- Java
.java
- Go
.go
- Ruby
.rb
- PHP
.php
- 確保設定好
OPENAI_API_KEY
- ZIP 檔內容會解壓在
./temp_upload/extracted/
,每次分析前會清理舊資料 - 本服務僅支援常見的程式碼格式,不支援二進位檔或不支援的語言
- API 回傳的行號是根據程式碼實際行數,不包括測試檔、實體檔等會被排除
- 準備一個有明確功能的專案 ZIP
- 編寫對應的 project_need 文字,描述想找的功能
- 呼叫 API,驗證回傳 JSON 的功能實作位置是否正確
- 查看
execution_plan_suggestion
是否給出合理執行說明