{"id":32441353,"url":"https://github.com/tbdavid2019/ai-sales","last_synced_at":"2026-04-14T18:32:54.564Z","repository":{"id":305812634,"uuid":"1020636256","full_name":"tbdavid2019/ai-sales","owner":"tbdavid2019","description":"ai 接待員/業務員 以shopify為例 (超過6個agnets)","archived":false,"fork":false,"pushed_at":"2025-07-22T04:21:14.000Z","size":154,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-26T01:56:59.062Z","etag":null,"topics":["gradio","llm","multiagent","streamlit"],"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/tbdavid2019.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}},"created_at":"2025-07-16T07:05:45.000Z","updated_at":"2025-07-22T04:21:18.000Z","dependencies_parsed_at":"2025-07-22T06:43:28.394Z","dependency_job_id":"99e4ef28-7fbf-4160-ba1c-bfe3663c510d","html_url":"https://github.com/tbdavid2019/ai-sales","commit_stats":null,"previous_names":["tbdavid2019/ai-sales"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tbdavid2019/ai-sales","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tbdavid2019%2Fai-sales","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tbdavid2019%2Fai-sales/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tbdavid2019%2Fai-sales/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tbdavid2019%2Fai-sales/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tbdavid2019","download_url":"https://codeload.github.com/tbdavid2019/ai-sales/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tbdavid2019%2Fai-sales/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31810737,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: 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":["gradio","llm","multiagent","streamlit"],"created_at":"2025-10-26T01:54:40.811Z","updated_at":"2026-04-14T18:32:54.558Z","avatar_url":"https://github.com/tbdavid2019.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AI Sales Multi-Agent 系統\n\n一個基於 FastAPI 的多 Agent AI 銷售系統，提供 OpenAI 相容的 API 接口。\n\n## 🚀 功能特色\n\n- **OpenAI 相容 API**: 完全相容 OpenAI ChatGPT API，支援無縫整合\n- **多 Agent 架構**: 智能路由系統，自動選擇最適合的 Agent\n- **即時串流回應**: 支援 Server-Sent Events 串流輸出\n- **智能記憶管理**: 基於 Redis 的會話記憶和用戶資料管理\n- **RAG 知識檢索**: 整合向量資料庫進行知識問答\n- **容器化部署**: 使用 Docker Compose 一鍵部署\n\n```\nstreamlit run app_streamlit.py --server.port 8501 --server.address localhost\n```\n\n## 🏗️ 系統架構\n```\n┌─────────────────────────────────────────────────────────────┐\n│                    三個 UI 介面                              │\n├─────────────────┬─────────────────┬─────────────────────────┤\n│   Gradio UI     │   Streamlit UI  │   FastAPI (port 8000)   │\n│   (port 7860)   │   (port 8501)   │   OpenAI Compatible     │\n└─────────────────┴─────────────────┴─────────────────────────┘\n                           │\n                           ▼\n┌─────────────────────────────────────────────────────────────┐\n│            統一核心處理 (ui_handler.py)                      │\n│         process_user_request() 函數                         │\n└─────────────────────────────────────────────────────────────┘\n                           │\n                           ▼\n┌─────────────────────────────────────────────────────────────┐\n│               工作流管理 (workflow_manager)                   │\n└─────────────────────────────────────────────────────────────┘\n                           │\n                           ▼\n┌─────────────────────────────────────────────────────────────┐\n│          各種 Agent (Chat, Card, RAG, Vision, etc.)         │\n└─────────────────────────────────────────────────────────────┘\n\n```\n\n\n\n```\n┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐\n│   LINE Bot      │    │  Telegram Bot   │    │  Web Chat UI    │\n└─────────────────┘    └─────────────────┘    └─────────────────┘\n         │                       │                       │\n         └───────────────────────┼───────────────────────┘\n                                 │\n                 ┌───────────────────────────────┐\n                 │     OpenAI Compatible API     │\n                 └───────────────────────────────┘\n                                 │\n                 ┌───────────────────────────────┐\n                 │        Control Agent          │\n                 └───────────────────────────────┘\n                                 │\n         ┌───────────────┬───────────────┬───────────────┐\n         │               │               │               │\n   ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐\n   │ Chat Agent  │ │ RAG Agent   │ │Card Agent   │ │Calendar     │\n   │             │ │             │ │             │ │Agent        │\n   └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘\n```\n\n## 🛠️ 技術棧\n\n- **API 框架**: FastAPI + Uvicorn\n- **LLM 模型**: Gemini 2.0 Flash, GPT-4, Claude 3\n- **記憶管理**: Redis\n- **向量資料庫**: ChromaDB\n- **部署**: Docker + Docker Compose\n\n## 📦 安裝與部署\n\n### 1. 環境準備\n\n```bash\n# 複製專案\ngit clone \u003crepository-url\u003e\ncd aisales\n\n# 複製環境變數模板\ncp .env.example .env\n```\n\n### 2. 配置環境變數\n\n編輯 `.env` 文件，填入您的 API 金鑰：\n\n```bash\n# 主控 Agent - Gemini\nGEMINI_API_KEY=your_gemini_api_key\n\n# ChatAgent - Gemini  \nCHAT_MODEL_API_KEY=your_gemini_api_key\n\n# RAG Embedding - OpenAI\nOPENAI_API_KEY=your_openai_api_key\n\n# CalendarAgent - OpenAI\nCALENDAR_API_KEY=your_openai_api_key\n\n# CardAgent - OpenAI\nVISION_API_KEY=your_openai_api_key\n\n# RAGAgent - Gemini\nRAG_MODEL_API_KEY=your_gemini_api_key\n\n# Google Calendar API 設定 (可選)\nGOOGLE_CALENDAR_CREDENTIALS_FILE=credentials.json\nGOOGLE_CALENDAR_TOKEN_FILE=token.json\nGOOGLE_CALENDAR_SCOPES=https://www.googleapis.com/auth/calendar.readonly,https://www.googleapis.com/auth/calendar.events\nGOOGLE_CALENDAR_ID=primary\n```\n\n### 3. Google Calendar 整合 (可選)\n\nCalendarAgent 支援真實的 Google Calendar API 整合：\n\n1. **獲取 Google Calendar API 憑證**：\n   - 前往 [Google Cloud Console](https://console.cloud.google.com/)\n   - 建立專案並啟用 Google Calendar API\n   - 建立 OAuth 2.0 憑證並下載 `credentials.json`\n\n2. **設定憑證**：\n   ```bash\n   # 創建憑證資料夾\n   mkdir -p ./credentials\n   \n   # 將憑證檔案放入\n   mv ~/Downloads/credentials.json ./credentials/\n   chmod 600 ./credentials/credentials.json\n   ```\n\n3. **首次授權**：\n   - 第一次使用時會開啟瀏覽器進行授權\n   - 授權後自動產生 `token.json`\n\n4. **降級模式**：\n   - 如果沒有設定 Google Calendar API，會自動使用 Mock 模式\n   - 提供基本的行事曆功能模擬\n\n詳細設定請參考：[Google Calendar 設定指南](GOOGLE_CALENDAR_SETUP.md)\n\n### 4. 知識庫文檔處理\n\nRAGAgent 支援自動 PDF 文檔處理和向量化：\n\n1. **放置 PDF 文檔**：\n   ```bash\n   # 將您的 PDF 文檔放在 documents 資料夾\n   cp /path/to/your/document.pdf ./documents/\n   ```\n\n2. **處理 PDF 文檔**：\n   ```bash\n   # 手動處理所有 PDF\n   python process_pdfs.py\n   \n   # 或啟動自動處理服務\n   python document_service.py\n   ```\n\n3. **支援的文檔類型**：\n   - 產品介紹 PDF\n   - 定價方案 PDF  \n   - 使用手冊 PDF\n   - 常見問題 PDF\n   - 任何文字型 PDF\n\n4. **自動分類和索引**：\n   - 系統會根據檔案名稱自動分類\n   - 長文檔會被分割成適當大小的塊\n   - 生成向量嵌入並儲存到 ChromaDB\n   - 支援增量處理，避免重複處理\n\n5. **文檔更新策略**：\n   - 每小時自動檢查新文檔\n   - 每天午夜重新處理所有文檔\n   - 基於檔案 hash 的智能更新檢測\n\n### 4. 使用 Docker Compose 部署\n\n#### 基本部署\n\n```bash\n# 構建和啟動服務\ndocker-compose up -d\n\n# 查看服務狀態\ndocker-compose ps\n\n# 查看日誌\ndocker-compose logs -f aisales-api\n```\n\n#### 含 Google Calendar 整合的部署\n\n如果您想使用 Google Calendar 功能，需要額外的設定步驟：\n\n1. **本地授權**（首次設定）：\n   ```bash\n   # 1. 先在本地完成 Google Calendar 授權\n   mkdir credentials\n   mv credentials.json credentials/\n   \n   # 2. 本地運行一次進行授權\n   python -c \"\n   import asyncio\n   from app.integrations.google_calendar import google_calendar\n   \n   async def setup():\n       success = await google_calendar.initialize()\n       print(f'授權完成: {success}')\n   \n   asyncio.run(setup())\n   \"\n   \n   # 3. 檢查 token.json 是否生成\n   ls -la credentials/\n   ```\n\n2. **Docker 部署**：\n   ```bash\n   # 確保憑證目錄存在\n   mkdir -p credentials\n   \n   # 將憑證檔案放入 credentials 目錄\n   cp credentials.json credentials/\n   # token.json 會在首次授權後自動生成\n   \n   # 啟動服務\n   docker-compose up -d\n   ```\n\n3. **驗證部署**：\n   ```bash\n   # 檢查服務狀態\n   docker-compose ps\n   \n   # 查看日誌確認 Google Calendar 連接狀態\n   docker-compose logs -f aisales-api | grep -i \"google\\|calendar\"\n   \n   # 測試 API\n   curl -X POST http://localhost:8000/v1/chat/completions \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\n       \"model\": \"aisales-v1\",\n       \"messages\": [{\"role\": \"user\", \"content\": \"明天下午有空嗎？\"}]\n     }'\n   ```\n\n#### 生產環境部署建議\n\n對於生產環境，建議使用 Google Cloud Service Account：\n\n1. **建立 Service Account**：\n   ```bash\n   # 在 Google Cloud Console 建立 Service Account\n   # 下載 service-account-key.json\n   ```\n\n2. **更新環境變數**：\n   ```bash\n   # 在 .env 中設定\n   GOOGLE_CALENDAR_USE_SERVICE_ACCOUNT=true\n   GOOGLE_CALENDAR_SERVICE_ACCOUNT_FILE=/app/credentials/service-account-key.json\n   ```\n\n3. **Docker Compose 設定**：\n   ```yaml\n   # docker-compose.prod.yml\n   services:\n     aisales-api:\n       environment:\n         - GOOGLE_CALENDAR_USE_SERVICE_ACCOUNT=true\n         - GOOGLE_CALENDAR_SERVICE_ACCOUNT_FILE=/app/credentials/service-account-key.json\n       volumes:\n         - ./credentials/service-account-key.json:/app/credentials/service-account-key.json:ro\n   ```\n\n#### 故障排除\n\n1. **Google Calendar 授權失敗**：\n   ```bash\n   # 檢查憑證檔案\n   ls -la credentials/\n   \n   # 檢查容器內的憑證\n   docker-compose exec aisales-api ls -la /app/credentials/\n   \n   # 重新授權\n   docker-compose exec aisales-api python -c \"\n   import asyncio\n   from app.integrations.google_calendar import google_calendar\n   asyncio.run(google_calendar.initialize())\n   \"\n   ```\n\n2. **權限問題**：\n   ```bash\n   # 確保憑證檔案權限正確\n   chmod 600 credentials/credentials.json\n   chmod 600 credentials/token.json\n   ```\n\n3. **容器內無法授權**：\n   - 必須先在本地完成授權\n   - 然後將 `token.json` 掛載到容器中\n   - 或使用 Service Account 進行授權\n\n### 4. 本地開發環境\n\n```bash\n# 安裝依賴\npip install -r requirements.txt\n\n# 啟動開發服務器\npython main.py\n```\n\n## 🔧 使用方法\n\n### API 端點\n\n- **主要端點**: `http://localhost:8000`\n- **📖 Swagger 文檔**: `http://localhost:8000/docs`\n- **📋 OpenAPI 規範**: `http://localhost:8000/openapi.json`\n- **🏥 健康檢查**: `http://localhost:8000/health`\n\n### 📚 Swagger 文檔特色\n\n我們的 Swagger 文檔包含完整的參數說明和使用範例：\n\n#### 🎯 參數詳細說明\n- **模型選擇**: 支援的模型和 Agent 組成\n- **回應模式**: 虛擬人模式 vs 一般文字模式的差異\n- **參數範圍**: 每個參數的有效範圍和建議值\n- **使用場景**: 不同場景下的最佳參數組合\n\n#### 🔧 互動式測試\n- **Try it out**: 直接在文檔中測試 API\n- **範例請求**: 預設的請求範例\n- **回應預覽**: 即時查看 API 回應格式\n- **錯誤處理**: 完整的錯誤回應說明\n\n#### 📋 完整的端點說明\n- **POST /v1/chat/completions**: 聊天完成端點\n- **GET /v1/models**: 模型列表端點\n- **GET /health**: 系統健康檢查\n- **WebSocket /vision/ws**: 視覺分析端點\n\n要查看完整的 Swagger 文檔，請啟動 API 服務後訪問：\n```bash\n# 啟動 API 服務\npython main.py\n\n# 在瀏覽器中打開 Swagger 文檔\nopen http://localhost:8000/docs\n```\n\n### 📋 API 參數詳細說明\n\n#### OpenAI 相容端點\n\n```bash\n# 聊天完成 (非串流)\nPOST /v1/chat/completions\n\n# 聊天完成 (串流)\nPOST /v1/chat/completions (with stream=true)\n\n# 模型列表\nGET /v1/models\n```\n\n#### 💡 核心參數\n\n| 參數名稱 | 類型 | 必填 | 預設值 | 說明 |\n|---------|------|------|--------|------|\n| `model` | string | ✅ | - | 模型名稱，使用 \"aisales-v1\" |\n| `messages` | array | ✅ | - | 對話訊息陣列 |\n| `stream` | boolean | ❌ | false | 是否啟用串流回應 |\n| `temperature` | float | ❌ | 0.7 | 回應創意度 (0.0-1.0) |\n| `max_tokens` | integer | ❌ | 無限制 | 最大回應長度 |\n| `top_p` | float | ❌ | 1.0 | 核心取樣參數 |\n| `user` | string | ❌ | - | 用戶識別碼 |\n\n#### 🎯 模式特化參數建議\n\n**虛擬人模式** (簡短互動):\n```json\n{\n  \"model\": \"aisales-v1\",\n  \"messages\": [...],\n  \"max_tokens\": 50,\n  \"temperature\": 0.8,\n  \"stream\": false\n}\n```\n\n**一般文字模式** (詳細回應):\n```json\n{\n  \"model\": \"aisales-v1\",\n  \"messages\": [...],\n  \"max_tokens\": 500,\n  \"temperature\": 0.7,\n  \"stream\": false\n}\n```\n\n**RAG 知識查詢** (準確回應):\n```json\n{\n  \"model\": \"aisales-v1\",\n  \"messages\": [...],\n  \"max_tokens\": 800,\n  \"temperature\": 0.5,\n  \"stream\": false\n}\n```\n\n#### 🔄 訊息格式\n\n```json\n{\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"系統提示詞 (可選)\"\n    },\n    {\n      \"role\": \"user\", \n      \"content\": \"用戶訊息\"\n    },\n    {\n      \"role\": \"assistant\",\n      \"content\": \"AI 回應\"\n    }\n  ]\n}\n```\n\n#### 📤 回應格式\n\n**非串流回應:**\n```json\n{\n  \"id\": \"chatcmpl-abc123\",\n  \"object\": \"chat.completion\",\n  \"created\": 1677652288,\n  \"model\": \"aisales-v1\",\n  \"choices\": [\n    {\n      \"index\": 0,\n      \"message\": {\n        \"role\": \"assistant\",\n        \"content\": \"AI 回應內容\"\n      },\n      \"finish_reason\": \"stop\"\n    }\n  ],\n  \"usage\": {\n    \"prompt_tokens\": 10,\n    \"completion_tokens\": 20,\n    \"total_tokens\": 30\n  }\n}\n```\n\n**串流回應:**\n```json\ndata: {\"id\":\"chatcmpl-abc123\",\"object\":\"chat.completion.chunk\",\"created\":1677652288,\"model\":\"aisales-v1\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"AI\"},\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-abc123\",\"object\":\"chat.completion.chunk\",\"created\":1677652288,\"model\":\"aisales-v1\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" 回應\"},\"finish_reason\":null}]}\n\ndata: [DONE]\n```\n\n### Gradio Web UI\n\n除了 API 之外，本專案還提供一個互動式的 Gradio Web UI，方便您直接與 AI Sales 系統對話和測試。\n\n**如何啟動:**\n\n```bash\n# 確保您已經安裝了所有依賴\npip install -r requirements.txt\n\n# 啟動 Gradio 應用程式\npython app_gradio.py\n```\n\n啟動後，您可以在瀏覽器中開啟 `http://localhost:7860` 來使用介面。\n\n**Docker 啟動:**\n\n如果您使用 Docker，Gradio 介面也會自動啟動。請確保 `docker-compose.yml` 中已開放 `7860` 連接埠。\n\n```bash\n# 啟動所有服務，包含 Gradio UI\ndocker-compose up -d\n\n# 在瀏覽器中開啟\nhttp://localhost:7860\n```\n\n### OpenAI 相容端點\n\n```bash\n# 聊天完成 (非串流)\nPOST /v1/chat/completions\n\n# 聊天完成 (串流)\nPOST /v1/chat/completions (with stream=true)\n\n# 模型列表\nGET /v1/models\n```\n\n### 使用範例\n\n```python\nimport openai\n\n# 設定 API 基礎 URL\nclient = openai.OpenAI(\n    base_url=\"http://localhost:8000/v1\",\n    api_key=\"your-api-key\"\n)\n\n# 基本聊天請求\nresponse = client.chat.completions.create(\n    model=\"aisales-v1\",\n    messages=[\n        {\"role\": \"user\", \"content\": \"你好，介紹一下你們的產品\"}\n    ],\n    stream=False\n)\n\nprint(response.choices[0].message.content)\n\n# 使用虛擬人模式 (簡短回應)\nresponse = client.chat.completions.create(\n    model=\"aisales-v1\",\n    messages=[\n        {\"role\": \"user\", \"content\": \"你好，介紹一下你們的產品\"}\n    ],\n    max_tokens=50,        # 限制回應長度\n    temperature=0.8,      # 提高創意度\n    stream=False\n)\n\n# 使用一般文字模式 (詳細回應)\nresponse = client.chat.completions.create(\n    model=\"aisales-v1\",\n    messages=[\n        {\"role\": \"user\", \"content\": \"你好，介紹一下你們的產品\"}\n    ],\n    max_tokens=500,       # 允許較長回應\n    temperature=0.7,      # 平衡創意度\n    stream=False\n)\n```\n\n### 參數說明\n\n#### 🎯 回應模式控制\n\n| 參數 | 類型 | 預設值 | 說明 |\n|------|------|--------|------|\n| `max_tokens` | int | 無限制 | 控制回應的最大長度 |\n| `temperature` | float | 0.7 | 控制回應的創意度 (0.0-1.0) |\n| `model` | string | \"aisales-v1\" | 模型名稱 |\n| `stream` | boolean | false | 是否使用串流回應 |\n\n#### 📝 建議設定\n\n**虛擬人模式** (簡短、互動式回應):\n```python\n{\n    \"max_tokens\": 20-200,\n    \"temperature\": 0.8,\n    \"stream\": false\n}\n```\n\n**一般文字模式** (詳細、專業回應):\n```python\n{\n    \"max_tokens\": 100-2000,\n    \"temperature\": 0.7,\n    \"stream\": false\n}\n```\n\n#### 🔧 在 Streamlit UI 中使用\n\n1. **選擇回應模式**：\n   - 一般文字模式：提供詳細、專業的回應\n   - 虛擬人模式：提供簡短、口語化的互動\n\n2. **調整輸出參數**：\n   - 回應長度：控制 AI 輸出的字數\n   - 創意度：調整回應的創意程度\n\n3. **即時預覽**：\n   - 側邊欄顯示當前所有設定\n   - 立即生效，無需重啟\n\n#### 🎨 Gradio UI 中的模式切換\n\n在 Gradio 界面中，您可以：\n- 在「互動控制」標籤中選擇回應模式\n- 系統會自動調整相應的參數設定\n- 支援即時切換，無需重新載入頁面\n\n### 串流使用\n\n```python\n# 串流回應\nstream = client.chat.completions.create(\n    model=\"aisales-v1\",\n    messages=[\n        {\"role\": \"user\", \"content\": \"你好\"}\n    ],\n    stream=True\n)\n\nfor chunk in stream:\n    if chunk.choices[0].delta.content is not None:\n        print(chunk.choices[0].delta.content, end=\"\")\n```\n\n## 🤖 Agent 說明\n\n### ControlAgent (主控制器)\n- **功能**: 分析用戶意圖，決定路由策略\n- **模型**: Gemini 2.0 Flash Lite\n- **職責**: 任務分發、結果整合\n\n### ChatAgent (對話助理)\n- **功能**: 處理一般銷售對話\n- **模型**: Gemini 2.0 Flash Lite\n- **職責**: 銷售話術、客戶互動\n\n### RAGAgent (知識檢索)\n- **功能**: 從知識庫檢索相關資訊\n- **模型**: Gemini 2.0 Flash Lite\n- **職責**: 產品問答、技術支援\n\n### CardAgent (名片識別)\n- **功能**: OCR 名片資訊提取\n- **模型**: GPT-4 Vision\n- **職責**: 圖片分析、客戶資料建檔\n\n### CalendarAgent (行事曆管理)\n- **功能**: 行事曆查詢和會議安排\n- **模型**: GPT-4.1 Mini\n- **整合**: 支援真實 Google Calendar API 或 Mock 模式\n- **職責**: 時間管理、約會安排、衝突檢測\n\n## 📊 監控與日誌\n\n```bash\n# 查看 API 日誌\ndocker-compose logs -f aisales-api\n\n# 查看 Redis 狀態\ndocker-compose exec redis redis-cli ping\n\n# 查看 ChromaDB 狀態\ncurl http://localhost:8001/api/v1/heartbeat\n```\n\n## 🧪 測試\n\n```bash\n# 運行測試\npytest tests/\n\n# 測試覆蓋率\npytest --cov=app tests/\n\n# 健康檢查測試\ncurl http://localhost:8000/health\n```\n\n## 🔗 整合範例\n\n### LINE Bot 整合\n\n```python\nfrom linebot import LineBotApi, WebhookHandler\nfrom linebot.models import TextSendMessage\nimport openai\n\n# 設定 OpenAI 客戶端\nclient = openai.OpenAI(\n    base_url=\"http://localhost:8000/v1\",\n    api_key=\"your-api-key\"\n)\n\n@handler.add(MessageEvent, message=TextMessage)\ndef handle_message(event):\n    # 調用 AI Sales API\n    response = client.chat.completions.create(\n        model=\"aisales-v1\",\n        messages=[\n            {\"role\": \"user\", \"content\": event.message.text}\n        ],\n        user=event.source.user_id\n    )\n    \n    # 回覆用戶\n    line_bot_api.reply_message(\n        event.reply_token,\n        TextSendMessage(text=response.choices[0].message.content)\n    )\n```\n\n## 🧠 LangGraph 工作流系統\n\n### 核心功能\n\n本系統採用 LangGraph 框架實現複雜的 Agent 協作和智能路由：\n\n#### 1. 智能路由決策\n- **意圖分析**: 自動識別用戶輸入的意圖（問候、產品查詢、預約等）\n- **複雜度評估**: 評估查詢的複雜程度，決定單一或並行處理\n- **上下文感知**: 基於對話歷史和用戶檔案進行個性化路由\n\n#### 2. 並行 Agent 協作\n- **智能 Agent 選擇**: 根據輸入內容自動選擇最合適的 Agent 組合\n- **並行執行**: 多個 Agent 同時處理不同方面的查詢\n- **結果聚合**: 智能整合多個 Agent 的回應，提供連貫的答案\n\n#### 3. 高級聚合策略\n- **主要+上下文**: 突出主要回應，補充相關資訊\n- **順序組合**: 按邏輯順序組合多個 Agent 的結果\n- **並行合成**: 使用 LLM 智能合成多個回應\n- **簡單組合**: 按優先級排序組合結果\n\n#### 4. 效能監控與優化\n- **執行時間監控**: 即時監控每個 Agent 的執行效能\n- **降級處理**: 當複雜工作流失敗時，自動降級到基本處理\n- **效能統計**: 記錄和分析工作流的效能指標\n\n### 工作流測試\n\n系統提供專門的測試腳本來驗證 LangGraph 工作流：\n\n```bash\n# 執行 LangGraph 工作流測試\npython test_langgraph_workflow.py\n\n# 測試內容包括：\n# - 基本工作流功能\n# - 並行處理能力\n# - 高級路由決策\n# - 錯誤處理機制\n# - 效能監控\n```\n\n### 路由決策示例\n\n```python\n# 簡單問候 -\u003e 單一 Agent\n用戶輸入: \"你好\"\n路由結果: chat_agent (單一模式)\n\n# 產品查詢 -\u003e 單一 Agent\n用戶輸入: \"介紹一下你們的AI產品\"\n路由結果: rag_agent (單一模式)\n\n# 複雜查詢 -\u003e 並行 Agent\n用戶輸入: \"我想了解產品功能並安排會議\"\n路由結果: rag_agent + calendar_agent (並行模式)\n\n# 圖片+文字 -\u003e 並行 Agent\n用戶輸入: \"分析這張名片並介紹相關產品\"\n路由結果: card_agent + rag_agent (並行模式)\n```\n\n## 🛡️ 安全性\n\n- 環境變數管理敏感資訊\n- Redis 資料加密\n- API 速率限制\n- 輸入驗證和清理\n\n## 📈 擴展功能\n\n- [ ] 支援更多 LLM 模型\n- [ ] 實時語音對話\n- [ ] 多語言支援\n- [ ] CRM 系統整合\n- [ ] 情緒分析\n- [ ] 自定義 Agent 開發\n\n## 🤝 貢獻指南\n\n1. Fork 此專案\n2. 創建功能分支\n3. 提交變更\n4. 發起 Pull Request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftbdavid2019%2Fai-sales","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftbdavid2019%2Fai-sales","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftbdavid2019%2Fai-sales/lists"}