{"id":43856753,"url":"https://github.com/gn00678465/crawler","last_synced_at":"2026-02-06T09:26:11.701Z","repository":{"id":318794597,"uuid":"1073381244","full_name":"gn00678465/crawler","owner":"gn00678465","description":"使用 Firecrawl API 的 Python CLI 工具，支援多種輸出格式的網頁爬取。","archived":false,"fork":false,"pushed_at":"2025-10-15T02:39:17.000Z","size":247,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-15T10:35:32.782Z","etag":null,"topics":["crawler","pythone"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gn00678465.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-10T03:12:25.000Z","updated_at":"2025-10-15T02:39:17.000Z","dependencies_parsed_at":"2025-10-15T21:56:51.372Z","dependency_job_id":"30724675-48a4-4813-a8b9-c42ea0095dfe","html_url":"https://github.com/gn00678465/crawler","commit_stats":null,"previous_names":["gn00678465/crawler"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/gn00678465/crawler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gn00678465%2Fcrawler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gn00678465%2Fcrawler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gn00678465%2Fcrawler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gn00678465%2Fcrawler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gn00678465","download_url":"https://codeload.github.com/gn00678465/crawler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gn00678465%2Fcrawler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29156653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T07:18:23.844Z","status":"ssl_error","status_checked_at":"2026-02-06T07:13:32.659Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crawler","pythone"],"created_at":"2026-02-06T09:26:10.948Z","updated_at":"2026-02-06T09:26:11.686Z","avatar_url":"https://github.com/gn00678465.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 網頁爬蟲 CLI 工具\n\n使用 [Firecrawl](https://firecrawl.dev) API 的 Python CLI 工具，支援多種輸出格式的網頁爬取。\n\n## 功能特色\n\n- 🌐 透過 Firecrawl API 爬取單一網頁\n- 📝 多種輸出格式（Markdown、HTML）\n- 💾 儲存至檔案或輸出至主控台\n- 📁 目錄輸出支援，自動根據 URL 生成檔案名稱\n- 🤖 **AI 驅動文章摘要**（新功能！）\n- 🌍 多語言摘要支援（自動偵測並以原文語言產生摘要）\n- 🎛️ 可自訂摘要長度（簡短、標準、詳細）\n- 🔧 彈性的 AI 模型選擇（支援 Gemini、OpenAI、Anthropic 等）\n- ⚡ 快速可靠，具備完善的錯誤處理\n- 🔒 使用 Pydantic 模型確保型別安全\n- ✅ 核心功能 100% 測試覆蓋率\n- 🎯 測試驅動開發（TDD）\n\n## 系統需求\n\n- **Python**：3.10 或更高版本\n- **套件管理器**：[UV](https://docs.astral.sh/uv/)（必要）\n- **Firecrawl 實例**：自架 Firecrawl API 伺服器\n\n## 快速開始\n\n### 1. 安裝 UV（如果尚未安裝）\n\n**Windows (PowerShell)**：\n```powershell\npowershell -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n```\n\n**macOS/Linux**：\n```bash\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n```\n\n### 2. 複製專案並設定\n\n```bash\ngit clone \u003crepository-url\u003e\ncd crawler\ngit checkout 002-python3-uv-n\n\n# 建立虛擬環境\nuv venv\n\n# 啟動虛擬環境\n# Windows (PowerShell)：\n.venv\\Scripts\\Activate.ps1\n# macOS/Linux：\nsource .venv/bin/activate\n\n# 安裝依賴項\nuv pip install -e \".[dev]\"\n```\n\n### 3. 設定環境變數\n\n```bash\n# 複製範例設定檔\ncp .env.example .env\n\n# 編輯 .env 並設定必要的環境變數\n```\n\n**必要設定**（`.env` 檔案）：\n```ini\n# Firecrawl API 設定\nFIRECRAWL_API_URL=http://localhost:3002\nFIRECRAWL_API_KEY=  # 自架版本可選\n\n# AI 模型設定（用於摘要功能）\nDEFAULT_AI_MODEL=gemini/gemini-pro\nGOOGLE_API_KEY=your_gemini_api_key_here\n\n# 其他 AI 供應商（選用，P2 階段）\n# OPENAI_API_KEY=your_openai_key\n# ANTHROPIC_API_KEY=your_anthropic_key\n```\n\n**取得 Gemini API 金鑰**：\n1. 前往 https://makersuite.google.com/app/apikey\n2. 點擊「建立 API 金鑰」\n3. 將金鑰複製到 `.env` 檔案\n\n### 4. 執行第一次爬取\n\n**基本爬取**：\n```bash\n# 爬取至主控台（markdown）\nuv run crawler scrape --url https://example.com\n\n# 爬取至檔案\nuv run crawler scrape --url https://example.com --output page.md\n\n# 爬取至目錄（自動生成檔案名稱）\nuv run crawler scrape --url https://example.com --output ./output\n\n# 爬取為 HTML 格式\nuv run crawler scrape --url https://example.com --html --output page.html\n```\n\n**AI 摘要**（新功能！）：\n```bash\n# 產生文章摘要（輸出至主控台）\nuv run crawler summarize --url https://example.com/article\n\n# 產生摘要並儲存至檔案\nuv run crawler summarize --url https://example.com/article --output summary.md\n\n# 簡短摘要（1-2 句）\nuv run crawler summarize --url https://example.com/article --summary brief\n\n# 詳細摘要\nuv run crawler summarize --url https://example.com/article --summary detailed\n\n# 使用特定 AI 模型\nuv run crawler summarize --url https://example.com/article --model gemini/gemini-1.5-flash\n```\n\n## 使用方式\n\n### 指令概覽\n\n```bash\n# 爬取指令\nuv run crawler scrape --url \u003cURL\u003e [OPTIONS]\n\n# 摘要指令（新功能！）\nuv run crawler summarize --url \u003cURL\u003e [OPTIONS]\n\n# 取得說明\nuv run crawler scrape --help\nuv run crawler summarize --help\n```\n\n### 爬取指令\n\n```bash\n# 爬取至主控台（預設：markdown）\nuv run crawler scrape --url \u003cURL\u003e\n\n# 爬取至檔案\nuv run crawler scrape --url \u003cURL\u003e --output \u003cFILE\u003e\n\n# 爬取至目錄（自動生成檔案名稱）\nuv run crawler scrape --url \u003cURL\u003e --output \u003cDIRECTORY\u003e\n\n# 使用 HTML 格式\nuv run crawler scrape --url \u003cURL\u003e --html --output page.html\n```\n\n### 摘要指令（AI 驅動）\n\n```bash\n# 基本摘要（輸出至主控台）\nuv run crawler summarize --url \u003cURL\u003e\n\n# 儲存摘要至檔案\nuv run crawler summarize --url \u003cURL\u003e --output \u003cFILE\u003e\n\n# 儲存至目錄（自動產生檔名）\nuv run crawler summarize --url \u003cURL\u003e --output \u003cDIRECTORY\u003e\n\n# 自訂摘要長度\nuv run crawler summarize --url \u003cURL\u003e --summary \u003cbrief|standard|detailed\u003e\n\n# 使用特定 AI 模型\nuv run crawler summarize --url \u003cURL\u003e --model \u003cprovider/model-name\u003e\n\n# 同時儲存原文和摘要\nuv run crawler summarize --url \u003cURL\u003e --output ./docs/ --save-original\n```\n\n**摘要長度選項**：\n- `brief`：簡短摘要（1-2 句話，~30 字）\n- `standard`：標準摘要（3-5 個重點，~100 字）- 預設值\n- `detailed`：詳細摘要（完整概述，~300 字）\n\n**支援的 AI 模型**：\n- `gemini/gemini-pro`：Google Gemini Pro（預設）\n- `gemini/gemini-1.5-flash`：更快的 Gemini 模型\n- 更多模型將在 P2 階段支援（OpenAI、Anthropic、Ollama 等）\n\n### 使用範例\n\n#### 爬取範例\n\n**爬取部落格文章為 markdown**：\n```bash\nuv run crawler scrape \\\n  --url https://blog.example.com/article \\\n  --output ./articles/article.md\n```\n\n**爬取至目錄（自動生成檔案名稱）**：\n```bash\n# 自動生成檔案名稱：example-com.md\nuv run crawler scrape \\\n  --url https://example.com \\\n  --output ./articles\n\n# 自動生成檔案名稱：docs-python-org-tutorial.html\nuv run crawler scrape \\\n  --url https://docs.python.org/tutorial \\\n  --html \\\n  --output ./docs\n```\n\n**爬取文件為 HTML**：\n```bash\nuv run crawler scrape \\\n  --url https://docs.example.com \\\n  --html \\\n  --output ./docs/reference.html\n```\n\n#### 摘要範例（新功能！）\n\n**產生技術文章摘要**：\n```bash\nuv run crawler summarize \\\n  --url https://blog.example.com/python-tutorial \\\n  --output ./summaries/python-tutorial-summary.md\n```\n\n**快速瀏覽（簡短摘要）**：\n```bash\nuv run crawler summarize \\\n  --url https://news.example.com/article \\\n  --summary brief\n```\n\n**詳細分析（詳細摘要）**：\n```bash\nuv run crawler summarize \\\n  --url https://research.example.com/paper \\\n  --summary detailed \\\n  --output detailed-summary.md\n```\n\n**批次處理：儲存多篇文章摘要**：\n```bash\n# 儲存至目錄，自動產生檔名\nuv run crawler summarize \\\n  --url https://blog.example.com/ai-trends \\\n  --output ./summaries/\n\n# 同時儲存原文和摘要\nuv run crawler summarize \\\n  --url https://docs.example.com/guide \\\n  --output ./docs/ \\\n  --save-original\n```\n\n**多語言文章摘要**：\n```bash\n# 中文文章 → 自動產生中文摘要\nuv run crawler summarize \\\n  --url https://example.com/chinese-article\n\n# 日文文章 → 自動產生日文摘要\nuv run crawler summarize \\\n  --url https://example.jp/article\n```\n\n**使用不同 AI 模型**：\n```bash\n# 使用更快的 Gemini Flash 模型\nuv run crawler summarize \\\n  --url https://example.com/article \\\n  --model gemini/gemini-1.5-flash\n\n# 使用預設模型（從 .env 讀取）\nuv run crawler summarize \\\n  --url https://example.com/article\n```\n\n**將輸出導向其他指令**：\n```bash\n# 爬取\nuv run crawler scrape --url https://example.com | grep \"關鍵字\"\n\n# 摘要\nuv run crawler summarize --url https://example.com/article | wc -w\n```\n\n## 開發\n\n### 執行測試\n\n```bash\n# 執行所有單元測試\nuv run pytest tests/unit -v\n\n# 執行測試並產生覆蓋率報告\nuv run pytest tests/unit --cov=src --cov-report=html\n\n# 執行特定測試檔案\nuv run pytest tests/unit/test_models.py -v\n\n# 執行整合測試（需要 Firecrawl 實例）\nuv run pytest tests/integration -v\n\n# 執行契約測試\nuv run pytest tests/contract -v -m contract\n```\n\n### 程式碼品質\n\n```bash\n# 格式化程式碼\nuv run ruff format src/ tests/\n\n# 檢查程式碼\nuv run ruff check src/ tests/\n\n# 型別檢查\nuv run mypy src/ --strict\n\n# 安全性掃描\nuv run bandit -r src/\n```\n\n### 專案架構\n\n```\nsrc/\n├── models/              # Pydantic 資料模型\n│   ├── scrape.py        # ScrapeRequest、ScrapeResponse\n│   ├── summarize_request.py    # 摘要請求模型（新）\n│   ├── ai_model_config.py      # AI 模型設定（新）\n│   ├── article_content.py      # 文章內容模型（新）\n│   ├── ai_summary.py           # AI 摘要模型（新）\n│   └── output_file.py          # 輸出檔案模型（新）\n├── services/            # 業務邏輯\n│   ├── firecrawl.py     # Firecrawl API 整合\n│   ├── ai_service.py    # AI 摘要服務（新）\n│   ├── prompt_service.py # 提示詞管理（新）\n│   └── output.py        # 檔案/主控台輸出\n├── cli/                 # CLI 介面\n│   ├── main.py          # 入口點\n│   ├── scrape.py        # 爬取指令\n│   └── summarize.py     # 摘要指令（新）\n├── config/              # 設定\n│   ├── settings.py      # 環境設定（已擴充 AI 設定）\n│   └── prompts.py       # AI 提示詞範本（新）\n└── lib/                 # 工具程式\n    ├── exceptions.py    # 自訂例外（已擴充 AI 例外）\n    └── validators.py    # 輸入驗證\n\ntests/\n├── unit/                # 單元測試（模擬）\n│   ├── models/          # 135 個模型測試（新）\n│   ├── services/        # 服務測試（含 AI 服務）\n│   └── cli/             # CLI 測試\n├── integration/         # 整合測試\n└── contract/            # API 契約測試\n```\n\n## 設定\n\n### 環境變數\n\n| 變數 | 必要 | 預設值 | 說明 |\n|------|------|--------|------|\n| `FIRECRAWL_API_URL` | 是 | - | Firecrawl API 基礎 URL |\n| `FIRECRAWL_API_KEY` | 否 | `\"\"` | API 金鑰（自架版本可選） |\n| `DEFAULT_AI_MODEL` | 摘要需要 | - | 預設 AI 模型（例如：`gemini/gemini-pro`） |\n| `GOOGLE_API_KEY` | Gemini 需要 | - | Google Gemini API 金鑰 |\n| `OPENAI_API_KEY` | OpenAI 需要 | - | OpenAI API 金鑰（P2 階段） |\n| `ANTHROPIC_API_KEY` | Anthropic 需要 | - | Anthropic API 金鑰（P2 階段） |\n\n### 退出代碼\n\n| 代碼 | 意義 |\n|------|------|\n| 0 | 成功 |\n| 1 | 一般錯誤（無效 URL、網路失敗） |\n| 2 | 設定錯誤（缺少 API URL、缺少 API 金鑰） |\n| 3 | AI 服務錯誤（超過速率限制、Token 限制） |\n\n## 架構\n\n### 技術堆疊\n\n- **CLI 框架**：Typer（型別安全的 CLI，自動產生說明）\n- **API 客戶端**：firecrawl-py（官方 Firecrawl Python SDK）\n- **AI 整合**：LiteLLM（統一多個 AI 供應商的介面）\n- **資料驗證**：Pydantic v2（執行期型別檢查）\n- **設定管理**：python-dotenv + pydantic-settings\n- **測試**：pytest + pytest-cov + pytest-mock\n- **程式碼品質**：ruff（檢查/格式化）+ mypy（型別檢查）+ bandit（安全性）\n\n### 設計原則\n\n遵循專案規範（`.specify/memory/constitution.md`）：\n\n1. **Python 3.10+ 標準**：現代 Python 與型別提示\n2. **UV 套件管理**：快速、可靠的依賴項管理（不可協商）\n3. **測試驅動開發**：所有程式碼都先寫測試（不可協商）\n4. **整合測試**：真實 API 和檔案系統測試\n5. **程式碼品質**：80%+ 覆蓋率、嚴格型別檢查、完整文件\n\n## 疑難排解\n\n### 爬取相關\n\n**\"錯誤：缺少必要設定：FIRECRAWL_API_URL\"**\n\n解決方法：建立 `.env` 檔案並設定 Firecrawl API URL：\n```bash\necho \"FIRECRAWL_API_URL=http://localhost:3002\" \u003e .env\n```\n\n**\"錯誤：無法連線至 Firecrawl API\"**\n\n解決方法：確認 Firecrawl 實例正在執行：\n```bash\n# 檢查 Firecrawl 是否可存取\ncurl http://localhost:3002/health\n\n# 或重新啟動 Firecrawl\ndocker-compose restart firecrawl\n```\n\n**\"錯誤：無效的 URL 格式\"**\n\n解決方法：URL 必須包含協定（`http://` 或 `https://`）：\n```bash\n# 錯誤\nuv run crawler scrape --url example.com\n\n# 正確\nuv run crawler scrape --url https://example.com\n```\n\n**寫入輸出時權限被拒**\n\n解決方法：確認輸出目錄存在或你有寫入權限：\n```bash\nmkdir -p ./output\nuv run crawler scrape --url https://example.com --output ./output/page.md\n```\n\n### 摘要相關（新功能）\n\n**\"錯誤：未設定 DEFAULT_AI_MODEL\"**\n\n解決方法：在 `.env` 檔案中設定預設 AI 模型：\n```bash\necho \"DEFAULT_AI_MODEL=gemini/gemini-pro\" \u003e\u003e .env\n```\n\n**\"錯誤：缺少 API 金鑰 'gemini/gemini-pro'\"**\n\n解決方法：在 `.env` 檔案中設定 Google API 金鑰：\n```bash\necho \"GOOGLE_API_KEY=你的金鑰\" \u003e\u003e .env\n```\n\n取得 Gemini API 金鑰：https://makersuite.google.com/app/apikey\n\n**\"錯誤：超過速率限制\"**\n\n解決方法：稍等片刻後重試，或使用速率限制較高的模型：\n```bash\nuv run crawler summarize --url https://example.com/article \\\n  --model gemini/gemini-1.5-flash  # 速率限制較高的快速模型\n```\n\n**\"錯誤：文章超過模型 Token 限制\"**\n\n解決方法：使用簡短摘要模式或較大的模型：\n```bash\n# 選項 1：使用簡短模式\nuv run crawler summarize --url https://example.com/long-article --summary brief\n\n# 選項 2：使用有較大 context window 的模型\nuv run crawler summarize --url https://example.com/long-article \\\n  --model gemini/gemini-1.5-pro  # 更大的 context window\n```\n\n**\"只支援 Gemini 模型\"（P1 限制）**\n\n說明：目前版本（P1）僅支援 Google Gemini 模型。其他 AI 供應商（OpenAI、Anthropic、Ollama）將在 P2 階段支援。\n\n支援的模型：\n- `gemini/gemini-pro`\n- `gemini/gemini-1.5-flash`\n- `gemini/gemini-1.5-pro`\n\n## 路線圖\n\n### 功能 002 - 基本爬取 ✅ 完成\n- [x] 基本單頁爬取\n- [x] Markdown 和 HTML 輸出\n- [x] 檔案和主控台輸出\n- [x] 目錄輸出支援（自動生成檔案名稱）\n- [x] 錯誤處理和驗證\n- [x] 38/38 單元測試通過\n\n### 功能 003 - AI 驅動文章摘要 🚧 開發中\n**P1 階段**（MVP）：\n- [x] 資料模型（135 個測試通過，100% 覆蓋率）\n- [x] AI 服務（LiteLLM 整合）\n- [x] 系統提示詞管理\n- [x] 設定和例外處理\n- [ ] CLI 摘要指令\n- [ ] 端到端整合測試\n- [ ] 多語言摘要支援（自動偵測）\n- [ ] Google Gemini 模型支援\n\n**P2 階段**（進階功能）：\n- [ ] 可自訂摘要長度（簡短、標準、詳細）\n- [ ] 多 AI 供應商支援：\n  - [ ] OpenAI（GPT-4、GPT-4o）\n  - [ ] Anthropic（Claude 3）\n  - [ ] 本地模型（Ollama、vLLM）\n- [ ] 彈性模型選擇（`--model` 參數）\n\n**P3 階段**（額外功能）：\n- [ ] 同時儲存原文和摘要（`--save-original`）\n- [ ] 自訂系統提示詞\n- [ ] 批次 URL 摘要\n- [ ] 詳細模式（顯示 Token 使用量）\n\n### 未來計畫\n- [ ] JSON 格式輸出（爬取）\n- [ ] 批次處理（從檔案讀取多個 URL）\n- [ ] 非同步並行爬取\n- [ ] 進度報告\n- [ ] 自訂檔案名稱範本\n- [ ] 指數退避重試邏輯\n\n## 貢獻\n\n### 開發工作流程（TDD）\n\n1. **先寫測試**（RED 階段）\n   ```bash\n   # 在 tests/unit/test_feature.py 建立測試\n   uv run pytest tests/unit/test_feature.py\n   # 驗證失敗\n   ```\n\n2. **實作最少程式碼**（GREEN 階段）\n   ```bash\n   # 在 src/ 中加入實作\n   uv run pytest tests/unit/test_feature.py\n   # 驗證通過\n   ```\n\n3. **重構**，保持測試通過\n   ```bash\n   uv run pytest tests/unit -v\n   # 所有測試應該仍然通過\n   ```\n\n4. **提交**完整週期後\n   ```bash\n   git add .\n   git commit -m \"feat: 使用 TDD 新增功能 X\"\n   ```\n\n### 品質檢查清單\n\n提交變更前：\n\n- [ ] 所有測試通過：`uv run pytest -v`\n- [ ] 覆蓋率 ≥80%：`uv run pytest --cov=src --cov-fail-under=80`\n- [ ] 型別檢查通過：`uv run mypy src/ --strict`\n- [ ] 程式檢查通過：`uv run ruff check src/`\n- [ ] 程式碼已格式化：`uv run ruff format src/`\n- [ ] 無安全性問題：`uv run bandit -r src/`\n\n## 文件\n\n### 功能 002 - 基本爬取\n- **規格說明**：[specs/002-python3-uv-n/spec.md](specs/002-python3-uv-n/spec.md)\n- **實作計畫**：[specs/002-python3-uv-n/plan.md](specs/002-python3-uv-n/plan.md)\n- **資料模型**：[specs/002-python3-uv-n/data-model.md](specs/002-python3-uv-n/data-model.md)\n- **研究報告**：[specs/002-python3-uv-n/research.md](specs/002-python3-uv-n/research.md)\n- **快速入門**：[specs/002-python3-uv-n/quickstart.md](specs/002-python3-uv-n/quickstart.md)\n\n### 功能 003 - AI 文章摘要（新！）\n- **規格說明**：[specs/003-markdown-summary-ai/spec.md](specs/003-markdown-summary-ai/spec.md)\n- **實作計畫**：[specs/003-markdown-summary-ai/plan.md](specs/003-markdown-summary-ai/plan.md)\n- **資料模型**：[specs/003-markdown-summary-ai/data-model.md](specs/003-markdown-summary-ai/data-model.md)\n- **快速入門**：[specs/003-markdown-summary-ai/quickstart.md](specs/003-markdown-summary-ai/quickstart.md)\n- **API 契約**：[specs/003-markdown-summary-ai/contracts/](specs/003-markdown-summary-ai/contracts/)\n- **實作指南**：[specs/003-markdown-summary-ai/IMPLEMENTATION_GUIDE.md](specs/003-markdown-summary-ai/IMPLEMENTATION_GUIDE.md)\n- **任務分解**：[specs/003-markdown-summary-ai/tasks.md](specs/003-markdown-summary-ai/tasks.md)\n\n## 授權條款\n\n[在此新增你的授權條款]\n\n## 支援\n\n遇到問題或疑問時：\n1. 查看[疑難排解](#疑難排解)章節\n2. 檢閱 `specs/002-python3-uv-n/` 中的規格文件\n3. 檢查 Firecrawl 日誌：`docker logs firecrawl`\n4. 驗證 `.env` 設定\n\n---\n\n**版本**：0.2.0-dev\n**狀態**：\n- 功能 002（基本爬取）：✅ 完成\n- 功能 003（AI 摘要）：🚧 開發中（43% 完成）\n**目前分支**：`003-markdown-summary-ai`\n**最後更新**：2025-10-12\n\n**實作進度**（功能 003）：\n- ✅ Phase 1: 設定與配置（3/3 任務）\n- ✅ Phase 2: 資料模型（13/15 任務，135 個測試通過）\n- ✅ Phase 3: 核心服務（2/8 任務，AI 服務實作完成）\n- ⏳ 剩餘：CLI 整合、提示詞服務、測試（6 個任務完成 MVP）\n\n詳細進度請參閱：[IMPLEMENTATION_GUIDE.md](specs/003-markdown-summary-ai/IMPLEMENTATION_GUIDE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgn00678465%2Fcrawler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgn00678465%2Fcrawler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgn00678465%2Fcrawler/lists"}