Spaces:
Sleeping
Sleeping
Commit ·
af73daa
1
Parent(s): edc640e
fix and build spec document
Browse files- ARCHITECTURE.md +502 -0
- CONFIGURATION.md +363 -0
- FEATURES.md +409 -0
- GMAIL_API_SETUP.md +26 -0
- GOOGLE_MAPS_INTEGRATION.md +2 -0
- README.md +220 -256
ARCHITECTURE.md
ADDED
|
@@ -0,0 +1,502 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 系統架構
|
| 2 |
+
|
| 3 |
+
本文檔詳細說明 Deep Agentic AI Tool 的系統架構、組件設計和工作流程。
|
| 4 |
+
|
| 5 |
+
## 🏗️ 整體架構
|
| 6 |
+
|
| 7 |
+
系統採用模組化設計,基於 LangGraph 構建,主要組件包括:
|
| 8 |
+
|
| 9 |
+
```
|
| 10 |
+
┌─────────────────────────────────────────────────────────┐
|
| 11 |
+
│ Gradio Web UI │
|
| 12 |
+
│ (gradio_interface.py) │
|
| 13 |
+
└────────────────────┬────────────────────────────────────┘
|
| 14 |
+
│
|
| 15 |
+
┌────────────────────▼────────────────────────────────────┐
|
| 16 |
+
│ LangGraph Agent Graph │
|
| 17 |
+
│ (agent_graph.py) │
|
| 18 |
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
| 19 |
+
│ │ Planner │→ │Research │→ │ Tools │ │
|
| 20 |
+
│ └──────────┘ └──────────┘ └──────────┘ │
|
| 21 |
+
│ │ │ │ │
|
| 22 |
+
│ └─────────────┴─────────────┘ │
|
| 23 |
+
│ │ │
|
| 24 |
+
│ ┌─────▼─────┐ │
|
| 25 |
+
│ │Note Taker │ │
|
| 26 |
+
│ └─────┬─────┘ │
|
| 27 |
+
│ │ │
|
| 28 |
+
│ ┌─────▼─────┐ │
|
| 29 |
+
│ │ Reporter │ │
|
| 30 |
+
│ └───────────┘ │
|
| 31 |
+
└────────────────────┬────────────────────────────────────┘
|
| 32 |
+
│
|
| 33 |
+
┌────────────┼────────────┐
|
| 34 |
+
│ │ │
|
| 35 |
+
┌───────▼───┐ ┌────▼────┐ ┌───▼────────┐
|
| 36 |
+
│ Tools │ │ RAG │ │ LLM │
|
| 37 |
+
│ │ │ System │ │ Utils │
|
| 38 |
+
└───────────┘ └─────────┘ └────────────┘
|
| 39 |
+
```
|
| 40 |
+
|
| 41 |
+
## 📁 專案結構詳解
|
| 42 |
+
|
| 43 |
+
### 核心模組
|
| 44 |
+
|
| 45 |
+
#### `deep_agent_rag/agents/`
|
| 46 |
+
|
| 47 |
+
代理節點實現,每個節點負責特定的任務:
|
| 48 |
+
|
| 49 |
+
- **`planner.py`**:任務規劃節點
|
| 50 |
+
- 分析用戶查詢
|
| 51 |
+
- 識別查詢類型(學術、股票、一般)
|
| 52 |
+
- 生成任務列表
|
| 53 |
+
- 避免不必要的工具調用
|
| 54 |
+
|
| 55 |
+
- **`researcher.py`**:研究執行節點
|
| 56 |
+
- 執行研究任務
|
| 57 |
+
- 動態選擇工具
|
| 58 |
+
- 調用工具並處理結果
|
| 59 |
+
- 維護對話上下文
|
| 60 |
+
|
| 61 |
+
- **`note_taker.py`**:筆記整理節點
|
| 62 |
+
- 整理工具返回結果
|
| 63 |
+
- 生成研究筆記
|
| 64 |
+
- 添加到狀態中的研究筆記列表
|
| 65 |
+
|
| 66 |
+
- **`reporter.py`**:最終報告生成節點
|
| 67 |
+
- 綜合所有研究筆記
|
| 68 |
+
- 生成結構化報告
|
| 69 |
+
- 流式輸出報告內容
|
| 70 |
+
|
| 71 |
+
- **`email_agent.py`**:郵件生成代理
|
| 72 |
+
- 根據提示生成郵件草稿
|
| 73 |
+
- 支援中英文
|
| 74 |
+
- 整合反思評估
|
| 75 |
+
|
| 76 |
+
- **`email_reflection_agent.py`**:郵件反思代理
|
| 77 |
+
- 評估郵件質量
|
| 78 |
+
- 提供改進建議
|
| 79 |
+
- 生成改進版本
|
| 80 |
+
|
| 81 |
+
- **`calendar_agent.py`**:行事曆事件生成代理
|
| 82 |
+
- 解析事件資訊(日期、時間、地點、參與者)
|
| 83 |
+
- 生成事件草稿
|
| 84 |
+
- 整合 Google Maps 驗證
|
| 85 |
+
- 整合反思評估
|
| 86 |
+
|
| 87 |
+
- **`calendar_reflection_agent.py`**:行事曆反思代理
|
| 88 |
+
- 評估事件完整性
|
| 89 |
+
- 提供改進建議
|
| 90 |
+
- 生成改進版本(最多 3 輪迭代)
|
| 91 |
+
|
| 92 |
+
- **`state.py`**:狀態定義
|
| 93 |
+
- `DeepAgentState`:研究代理狀態
|
| 94 |
+
- 包含查詢、消息、任務、筆記等
|
| 95 |
+
|
| 96 |
+
#### `deep_agent_rag/graph/`
|
| 97 |
+
|
| 98 |
+
LangGraph 圖表構建:
|
| 99 |
+
|
| 100 |
+
- **`agent_graph.py`**:圖表構建與路由
|
| 101 |
+
- 定義節點之間的連接
|
| 102 |
+
- 實現條件路由邏輯
|
| 103 |
+
- 管理檢查點(checkpoint)
|
| 104 |
+
|
| 105 |
+
**工作流程:**
|
| 106 |
+
```
|
| 107 |
+
START → Planner → Research Agent
|
| 108 |
+
↓
|
| 109 |
+
Tools (if needed)
|
| 110 |
+
↓
|
| 111 |
+
Note Taking
|
| 112 |
+
↓
|
| 113 |
+
Final Report → END
|
| 114 |
+
```
|
| 115 |
+
|
| 116 |
+
#### `deep_agent_rag/tools/`
|
| 117 |
+
|
| 118 |
+
工具定義,提供各種功能:
|
| 119 |
+
|
| 120 |
+
- **`agent_tools.py`**:研究工具
|
| 121 |
+
- `query_stock_info`:股票查詢
|
| 122 |
+
- `search_web`:網路搜尋(Tavily)
|
| 123 |
+
- `query_pdf_knowledge_base`:PDF 知識庫查詢(RAG)
|
| 124 |
+
|
| 125 |
+
- **`email_tool.py`**:郵件工具
|
| 126 |
+
- `send_email`:發送郵件(Gmail API)
|
| 127 |
+
|
| 128 |
+
- **`calendar_tool.py`**:行事曆工具
|
| 129 |
+
- `create_calendar_event`:創建事件
|
| 130 |
+
- `update_calendar_event`:更新事件
|
| 131 |
+
- `delete_calendar_event`:刪除事件
|
| 132 |
+
|
| 133 |
+
- **`googlemaps_tool.py`**:Google Maps 工具
|
| 134 |
+
- `enrich_location_info`:地點驗證與標準化
|
| 135 |
+
- 計算交通時間
|
| 136 |
+
- 建議出發時間
|
| 137 |
+
|
| 138 |
+
#### `deep_agent_rag/models/`
|
| 139 |
+
|
| 140 |
+
模型包裝器:
|
| 141 |
+
|
| 142 |
+
- **`mlx_chat_model.py`**:MLX 模型整合
|
| 143 |
+
- 將 MLX 模型包裝為 LangChain 兼容格式
|
| 144 |
+
- 支援流式輸出
|
| 145 |
+
- 處理模型載入和推理
|
| 146 |
+
|
| 147 |
+
#### `deep_agent_rag/rag/`
|
| 148 |
+
|
| 149 |
+
RAG 系統:
|
| 150 |
+
|
| 151 |
+
- **`rag_system.py`**:RAG 初始化和檢索
|
| 152 |
+
- PDF 載入和分塊
|
| 153 |
+
- 向量化(使用 Jina embeddings)
|
| 154 |
+
- 向量數據庫(ChromaDB)
|
| 155 |
+
- 語義搜尋
|
| 156 |
+
|
| 157 |
+
#### `deep_agent_rag/ui/`
|
| 158 |
+
|
| 159 |
+
用戶界面:
|
| 160 |
+
|
| 161 |
+
- **`gradio_interface.py`**:Gradio Web UI
|
| 162 |
+
- 研究代理界面
|
| 163 |
+
- 郵件工具界面
|
| 164 |
+
- 行事曆工具界面
|
| 165 |
+
- 流式更新處理
|
| 166 |
+
|
| 167 |
+
#### `deep_agent_rag/utils/`
|
| 168 |
+
|
| 169 |
+
工具函數:
|
| 170 |
+
|
| 171 |
+
- **`llm_utils.py`**:LLM 實例管理
|
| 172 |
+
- `get_llm()`:獲取 LLM 實例(自動選擇 Groq 或 MLX)
|
| 173 |
+
- `handle_groq_error()`:處理 Groq API 錯誤
|
| 174 |
+
- `is_using_local_llm()`:檢查是否使用本地模型
|
| 175 |
+
- `get_llm_type()`:獲取當前 LLM 類型
|
| 176 |
+
|
| 177 |
+
#### `deep_agent_rag/config.py`
|
| 178 |
+
|
| 179 |
+
系統配置:
|
| 180 |
+
|
| 181 |
+
- MLX 模型配置
|
| 182 |
+
- RAG 配置
|
| 183 |
+
- Agent 配置
|
| 184 |
+
- API 配置(Groq、Gmail、Calendar、Google Maps)
|
| 185 |
+
- 外部 SSD 路徑配置
|
| 186 |
+
|
| 187 |
+
## 🔄 工作流程詳解
|
| 188 |
+
|
| 189 |
+
### 深度研究代理工作流程
|
| 190 |
+
|
| 191 |
+
```
|
| 192 |
+
1. 用戶輸入查詢
|
| 193 |
+
↓
|
| 194 |
+
2. Planner 節點
|
| 195 |
+
- 分析查詢類型
|
| 196 |
+
- 生成任務列表
|
| 197 |
+
↓
|
| 198 |
+
3. Research Agent 節點
|
| 199 |
+
- 選擇合適的工具
|
| 200 |
+
- 調用工具
|
| 201 |
+
↓
|
| 202 |
+
4. Tools 節點(如果需要)
|
| 203 |
+
- 執行工具調用
|
| 204 |
+
- 返回結果
|
| 205 |
+
↓
|
| 206 |
+
5. Research Agent 節點(繼續)
|
| 207 |
+
- 處理工具結果
|
| 208 |
+
- 決定是否需要更多工具調用
|
| 209 |
+
↓
|
| 210 |
+
6. Note Taking 節點
|
| 211 |
+
- 整理工具結果
|
| 212 |
+
- 生成研究筆記
|
| 213 |
+
↓
|
| 214 |
+
7. 檢查是否還有未完成任務
|
| 215 |
+
- 是 → 返回 Research Agent
|
| 216 |
+
- 否 → 繼續
|
| 217 |
+
↓
|
| 218 |
+
8. Final Report 節點
|
| 219 |
+
- 綜合所有筆記
|
| 220 |
+
- 生成最終報告
|
| 221 |
+
↓
|
| 222 |
+
9. 返回結果給用戶
|
| 223 |
+
```
|
| 224 |
+
|
| 225 |
+
### 郵件生成工作流程
|
| 226 |
+
|
| 227 |
+
```
|
| 228 |
+
1. 用戶輸入郵件提示和收件人
|
| 229 |
+
↓
|
| 230 |
+
2. Email Agent
|
| 231 |
+
- 生成郵件草稿(主題和正文)
|
| 232 |
+
↓
|
| 233 |
+
3. Email Reflection Agent(可選)
|
| 234 |
+
- 評估郵件質量
|
| 235 |
+
- 生成改進建議
|
| 236 |
+
- 可選生成改進版本
|
| 237 |
+
↓
|
| 238 |
+
4. 顯示結果給用戶
|
| 239 |
+
- 原始版本
|
| 240 |
+
- 反思評估結果
|
| 241 |
+
- 改進版本(如有)
|
| 242 |
+
↓
|
| 243 |
+
5. 用戶檢查和編輯
|
| 244 |
+
↓
|
| 245 |
+
6. 用戶確認發送
|
| 246 |
+
↓
|
| 247 |
+
7. Email Tool
|
| 248 |
+
- 使用 Gmail API 發送郵件
|
| 249 |
+
```
|
| 250 |
+
|
| 251 |
+
### 行事曆事件生成工作流程
|
| 252 |
+
|
| 253 |
+
```
|
| 254 |
+
1. 用戶輸入事件提示(或使用快速選擇)
|
| 255 |
+
↓
|
| 256 |
+
2. Calendar Agent
|
| 257 |
+
- 解析事件資訊(日期、時間、地點、參與者)
|
| 258 |
+
- 生成事件草稿
|
| 259 |
+
↓
|
| 260 |
+
3. Google Maps Tool(如果配置)
|
| 261 |
+
- 驗證和標準化地址
|
| 262 |
+
- 計算交通時間
|
| 263 |
+
- 建議出發時間
|
| 264 |
+
↓
|
| 265 |
+
4. Calendar Reflection Agent(最多 3 輪迭代)
|
| 266 |
+
- 第一輪:評估事件完整性
|
| 267 |
+
- 如有改進建議 → 生成改進版本
|
| 268 |
+
- 第二輪:評估改進版本
|
| 269 |
+
- 如有改進建議 → 生成改進版本
|
| 270 |
+
- 第三輪:最終評估
|
| 271 |
+
↓
|
| 272 |
+
5. 檢查缺失資訊
|
| 273 |
+
- 如有缺失(日期、時間)→ 顯示下拉選單
|
| 274 |
+
- 用戶選擇後填充
|
| 275 |
+
↓
|
| 276 |
+
6. 顯示結果給用戶
|
| 277 |
+
- 事件詳情
|
| 278 |
+
- 反思評估結果
|
| 279 |
+
- 地點驗證資訊(如有)
|
| 280 |
+
↓
|
| 281 |
+
7. 用戶檢查和編輯
|
| 282 |
+
↓
|
| 283 |
+
8. 用戶確認創建
|
| 284 |
+
↓
|
| 285 |
+
9. Calendar Tool
|
| 286 |
+
- 使用 Google Calendar API 創建事件
|
| 287 |
+
```
|
| 288 |
+
|
| 289 |
+
## 🔌 外部服務整合
|
| 290 |
+
|
| 291 |
+
### Groq API
|
| 292 |
+
|
| 293 |
+
- **用途**:快速 LLM 推理
|
| 294 |
+
- **模型**:`llama-3.3-70b-versatile`
|
| 295 |
+
- **配置**:`GROQ_API_KEY` 環境變數
|
| 296 |
+
- **備援**:自動切換到本地 MLX 模型
|
| 297 |
+
|
| 298 |
+
### Gmail API
|
| 299 |
+
|
| 300 |
+
- **用途**:發送郵件
|
| 301 |
+
- **認證**:OAuth2
|
| 302 |
+
- **配置**:`GMAIL_CREDENTIALS_FILE`、`GMAIL_TOKEN_FILE`
|
| 303 |
+
- **權限**:`gmail.send`
|
| 304 |
+
|
| 305 |
+
### Google Calendar API
|
| 306 |
+
|
| 307 |
+
- **用途**:管理行事曆事件
|
| 308 |
+
- **認證**:OAuth2(與 Gmail 共用憑證)
|
| 309 |
+
- **配置**:`CALENDAR_CREDENTIALS_FILE`、`CALENDAR_TOKEN_FILE`
|
| 310 |
+
- **權限**:`calendar`
|
| 311 |
+
|
| 312 |
+
### Google Maps API
|
| 313 |
+
|
| 314 |
+
- **用途**:地點驗證和交通時間計算
|
| 315 |
+
- **認證**:API Key
|
| 316 |
+
- **配置**:`NORMAL_GOOGLE_MAPS_API_KEY`
|
| 317 |
+
- **API**:Geocoding API、Directions API
|
| 318 |
+
|
| 319 |
+
### Tavily API
|
| 320 |
+
|
| 321 |
+
- **用途**:網路搜尋
|
| 322 |
+
- **認證**:API Key
|
| 323 |
+
- **配置**:`TAVILY_API_KEY`
|
| 324 |
+
|
| 325 |
+
### ChromaDB
|
| 326 |
+
|
| 327 |
+
- **用途**:向量數據庫(RAG)
|
| 328 |
+
- **存儲**:本地文件系統
|
| 329 |
+
- **配置**:自動管理
|
| 330 |
+
|
| 331 |
+
## 🧩 模組化設計
|
| 332 |
+
|
| 333 |
+
### 狀態管理
|
| 334 |
+
|
| 335 |
+
系統使用 LangGraph 的狀態管理:
|
| 336 |
+
|
| 337 |
+
- **檢查點(Checkpoint)**:保存會話狀態
|
| 338 |
+
- **線程 ID**:區分不同會話
|
| 339 |
+
- **狀態持久化**:使用 MemorySaver
|
| 340 |
+
|
| 341 |
+
### 工具系統
|
| 342 |
+
|
| 343 |
+
- **動態工具綁定**:在運行時綁定工具到 LLM
|
| 344 |
+
- **工具自動發現**:通過 `get_tools_list()` 統一管理
|
| 345 |
+
- **工具結果處理**:自動處理和格式化
|
| 346 |
+
|
| 347 |
+
### LLM 管理
|
| 348 |
+
|
| 349 |
+
- **動態切換**:運行時自動切換 LLM 後端
|
| 350 |
+
- **錯誤處理**:自動處理 API 錯誤並切換
|
| 351 |
+
- **統一接口**:所有節點使用相同的 LLM 接口
|
| 352 |
+
|
| 353 |
+
## 🔧 開發指南
|
| 354 |
+
|
| 355 |
+
### 添加新工具
|
| 356 |
+
|
| 357 |
+
1. **創建工具函數**
|
| 358 |
+
|
| 359 |
+
在 `deep_agent_rag/tools/` 中創建新文件或添加到現有文件:
|
| 360 |
+
|
| 361 |
+
```python
|
| 362 |
+
from langchain_core.tools import tool
|
| 363 |
+
|
| 364 |
+
@tool
|
| 365 |
+
def my_new_tool(param: str) -> str:
|
| 366 |
+
"""工具描述,LLM 會看到這個描述"""
|
| 367 |
+
# 實現邏輯
|
| 368 |
+
return result
|
| 369 |
+
```
|
| 370 |
+
|
| 371 |
+
2. **添加到工具列表**
|
| 372 |
+
|
| 373 |
+
在 `agent_tools.py` 的 `get_tools_list()` 函數中添加:
|
| 374 |
+
|
| 375 |
+
```python
|
| 376 |
+
def get_tools_list(rag_retriever=None):
|
| 377 |
+
tools = [
|
| 378 |
+
query_stock_info,
|
| 379 |
+
search_web,
|
| 380 |
+
query_pdf_knowledge_base,
|
| 381 |
+
my_new_tool, # 添加新工具
|
| 382 |
+
]
|
| 383 |
+
# ...
|
| 384 |
+
```
|
| 385 |
+
|
| 386 |
+
3. **代理自動使用**
|
| 387 |
+
|
| 388 |
+
代理會自動發現並使用新工具,無需修改其他代碼。
|
| 389 |
+
|
| 390 |
+
### 添加新代理節點
|
| 391 |
+
|
| 392 |
+
1. **創建節點函數**
|
| 393 |
+
|
| 394 |
+
在 `deep_agent_rag/agents/` 中創建新文件:
|
| 395 |
+
|
| 396 |
+
```python
|
| 397 |
+
from ..agents.state import DeepAgentState
|
| 398 |
+
|
| 399 |
+
def my_new_node(state: DeepAgentState, llm=None):
|
| 400 |
+
"""新節點邏輯"""
|
| 401 |
+
# 處理狀態
|
| 402 |
+
# 返回更新後的狀態
|
| 403 |
+
return {"messages": [...], ...}
|
| 404 |
+
```
|
| 405 |
+
|
| 406 |
+
2. **添加到圖表**
|
| 407 |
+
|
| 408 |
+
在 `agent_graph.py` 的 `build_agent_graph()` 函數中:
|
| 409 |
+
|
| 410 |
+
```python
|
| 411 |
+
def my_node_wrapper(state):
|
| 412 |
+
llm = get_llm()
|
| 413 |
+
return my_new_node(state, llm=llm)
|
| 414 |
+
|
| 415 |
+
builder.add_node("my_node", my_node_wrapper)
|
| 416 |
+
builder.add_edge("previous_node", "my_node")
|
| 417 |
+
```
|
| 418 |
+
|
| 419 |
+
### 修改 UI
|
| 420 |
+
|
| 421 |
+
編輯 `gradio_interface.py`:
|
| 422 |
+
|
| 423 |
+
- **添加新界面**:創建新函數(例如:`_create_my_interface()`)
|
| 424 |
+
- **添加到主界面**:在 `create_gradio_interface()` 中添加 Tab
|
| 425 |
+
- **處理事件**:使用 Gradio 的事件處理機制
|
| 426 |
+
|
| 427 |
+
### 配置管理
|
| 428 |
+
|
| 429 |
+
所有配置在 `config.py` 中:
|
| 430 |
+
|
| 431 |
+
- **添加新配置**:直接添加變數
|
| 432 |
+
- **環境變數**:使用 `os.getenv()` 讀取
|
| 433 |
+
- **預設值**:提供合理的預設值
|
| 434 |
+
|
| 435 |
+
## 🚀 性能優化
|
| 436 |
+
|
| 437 |
+
### LLM 選擇
|
| 438 |
+
|
| 439 |
+
- **Groq API**:快速,適合生產環境
|
| 440 |
+
- **本地 MLX**:隱私保護,適合敏感場景
|
| 441 |
+
- **自動切換**:根據可用性自動選擇
|
| 442 |
+
|
| 443 |
+
### 緩存策略
|
| 444 |
+
|
| 445 |
+
- **模型緩存**:使用外部 SSD(如果配置)
|
| 446 |
+
- **RAG 向量庫**:持久化到本地
|
| 447 |
+
- **OAuth Token**:自動刷新
|
| 448 |
+
|
| 449 |
+
### 並發處理
|
| 450 |
+
|
| 451 |
+
- **Gradio 會話**:每個用戶獨立的 thread_id
|
| 452 |
+
- **狀態隔離**:使用檢查點系統
|
| 453 |
+
- **工具調用**:順序執行,避免衝突
|
| 454 |
+
|
| 455 |
+
## 🔒 安全考慮
|
| 456 |
+
|
| 457 |
+
1. **憑證管理**
|
| 458 |
+
- 憑證文件不應提交到版本控制
|
| 459 |
+
- 使用 `.gitignore` 排除敏感文件
|
| 460 |
+
|
| 461 |
+
2. **API 金鑰**
|
| 462 |
+
- 使用環境變數存儲
|
| 463 |
+
- 不在代碼中硬編碼
|
| 464 |
+
|
| 465 |
+
3. **OAuth 授權**
|
| 466 |
+
- 自動刷新 token
|
| 467 |
+
- 安全的 token 存儲
|
| 468 |
+
|
| 469 |
+
4. **用戶數據**
|
| 470 |
+
- 會話狀態隔離
|
| 471 |
+
- 不持久化敏感資訊
|
| 472 |
+
|
| 473 |
+
## 📊 監控與日誌
|
| 474 |
+
|
| 475 |
+
- **控制台輸出**:關鍵步驟的日誌
|
| 476 |
+
- **錯誤處理**:友好的錯誤訊息
|
| 477 |
+
- **狀態顯示**:UI 中顯示當前狀態
|
| 478 |
+
|
| 479 |
+
## 🔮 未來擴展
|
| 480 |
+
|
| 481 |
+
可能的擴展方向:
|
| 482 |
+
|
| 483 |
+
1. **更多工具**
|
| 484 |
+
- 文件處理工具
|
| 485 |
+
- 數據分析工具
|
| 486 |
+
- 圖像處理工具
|
| 487 |
+
|
| 488 |
+
2. **更多代理**
|
| 489 |
+
- 任務管理代理
|
| 490 |
+
- 數據分析代理
|
| 491 |
+
- 內容生成代理
|
| 492 |
+
|
| 493 |
+
3. **增強功能**
|
| 494 |
+
- 多語言支援
|
| 495 |
+
- 語音輸入/輸出
|
| 496 |
+
- 移動端應用
|
| 497 |
+
|
| 498 |
+
4. **性能優化**
|
| 499 |
+
- 並發工具調用
|
| 500 |
+
- 更智能的緩存
|
| 501 |
+
- 模型量化優化
|
| 502 |
+
|
CONFIGURATION.md
ADDED
|
@@ -0,0 +1,363 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 配置指南
|
| 2 |
+
|
| 3 |
+
本文檔詳細說明 Deep Agentic AI Tool 的所有配置選項。
|
| 4 |
+
|
| 5 |
+
## 📋 配置方式
|
| 6 |
+
|
| 7 |
+
系統配置有兩種方式:
|
| 8 |
+
|
| 9 |
+
1. **環境變數**:在 `.env` 文件中設置(推薦)
|
| 10 |
+
2. **代碼配置**:在 `deep_agent_rag/config.py` 中直接修改
|
| 11 |
+
|
| 12 |
+
## 🔧 環境變數配置
|
| 13 |
+
|
| 14 |
+
在專案根目錄創建 `.env` 文件:
|
| 15 |
+
|
| 16 |
+
```env
|
| 17 |
+
# ============================================
|
| 18 |
+
# LLM 配置
|
| 19 |
+
# ============================================
|
| 20 |
+
|
| 21 |
+
# Groq API(可選,用於快速推理)
|
| 22 |
+
GROQ_API_KEY=your_groq_api_key_here
|
| 23 |
+
|
| 24 |
+
# ============================================
|
| 25 |
+
# 搜尋 API 配置
|
| 26 |
+
# ============================================
|
| 27 |
+
|
| 28 |
+
# Tavily API(可選,用於網路搜尋)
|
| 29 |
+
TAVILY_API_KEY=your_tavily_api_key_here
|
| 30 |
+
|
| 31 |
+
# ============================================
|
| 32 |
+
# Google API 配置
|
| 33 |
+
# ============================================
|
| 34 |
+
|
| 35 |
+
# Gmail API 憑證文件(可選,預設:credentials.json)
|
| 36 |
+
GMAIL_CREDENTIALS_FILE=credentials.json
|
| 37 |
+
GMAIL_TOKEN_FILE=token.json
|
| 38 |
+
|
| 39 |
+
# Calendar API 憑證文件(可選,可與 Gmail 共用)
|
| 40 |
+
CALENDAR_CREDENTIALS_FILE=credentials.json
|
| 41 |
+
CALENDAR_TOKEN_FILE=token.json
|
| 42 |
+
|
| 43 |
+
# Google Maps API(可選,用於行事曆地點驗證)
|
| 44 |
+
NORMAL_GOOGLE_MAPS_API_KEY=your_google_maps_api_key_here
|
| 45 |
+
|
| 46 |
+
# 用戶常用位置(可選,用於計算交通時間)
|
| 47 |
+
USER_HOME_ADDRESS=台北市信義區信義路五段7號
|
| 48 |
+
USER_OFFICE_ADDRESS=台北市大安區敦化南路二段216號
|
| 49 |
+
```
|
| 50 |
+
|
| 51 |
+
## ⚙️ 代碼配置
|
| 52 |
+
|
| 53 |
+
所有配置選項在 `deep_agent_rag/config.py` 中定義。
|
| 54 |
+
|
| 55 |
+
### MLX 模型配置
|
| 56 |
+
|
| 57 |
+
```python
|
| 58 |
+
# MLX 模型 ID
|
| 59 |
+
MLX_MODEL_ID = "mlx-community/Qwen2.5-Coder-7B-Instruct-4bit"
|
| 60 |
+
|
| 61 |
+
# 最大生成 tokens
|
| 62 |
+
MLX_MAX_TOKENS = 2048
|
| 63 |
+
|
| 64 |
+
# 溫度參數(控制隨機性,0.0-1.0)
|
| 65 |
+
MLX_TEMPERATURE = 0.7
|
| 66 |
+
```
|
| 67 |
+
|
| 68 |
+
**說明:**
|
| 69 |
+
- `MLX_MODEL_ID`:HuggingFace 模型 ID,必須是 MLX 兼容格式
|
| 70 |
+
- `MLX_MAX_TOKENS`:生成的最大 token 數,較大值會使用更多記憶體
|
| 71 |
+
- `MLX_TEMPERATURE`:較低值(0.1-0.3)更確定性,較高值(0.7-1.0)更創造性
|
| 72 |
+
|
| 73 |
+
### Groq API 配置
|
| 74 |
+
|
| 75 |
+
```python
|
| 76 |
+
# Groq API 金鑰(從環境變數讀取)
|
| 77 |
+
GROQ_API_KEY = os.getenv("GROQ_API_KEY", "")
|
| 78 |
+
|
| 79 |
+
# Groq 模型名稱
|
| 80 |
+
GROQ_MODEL = "llama-3.3-70b-versatile"
|
| 81 |
+
|
| 82 |
+
# 最大生成 tokens
|
| 83 |
+
GROQ_MAX_TOKENS = 2048
|
| 84 |
+
|
| 85 |
+
# 溫度參數
|
| 86 |
+
GROQ_TEMPERATURE = 0.7
|
| 87 |
+
|
| 88 |
+
# 是否優先使用 Groq API
|
| 89 |
+
USE_GROQ_FIRST = True
|
| 90 |
+
```
|
| 91 |
+
|
| 92 |
+
**說明:**
|
| 93 |
+
- `GROQ_API_KEY`:從環境變數讀取,如果未設置則為空字串
|
| 94 |
+
- `GROQ_MODEL`:Groq 支援的模型,可選其他模型
|
| 95 |
+
- `USE_GROQ_FIRST`:設為 `True` 時優先使用 Groq,否則優先使用本地模型
|
| 96 |
+
|
| 97 |
+
### RAG 配置
|
| 98 |
+
|
| 99 |
+
```python
|
| 100 |
+
# PDF 文件路徑
|
| 101 |
+
PDF_PATH = "./data/Tree_of_Thoughts.pdf"
|
| 102 |
+
|
| 103 |
+
# 嵌入模型
|
| 104 |
+
EMBEDDING_MODEL = "jinaai/jina-embeddings-v3"
|
| 105 |
+
|
| 106 |
+
# 文本分塊大小
|
| 107 |
+
CHUNK_SIZE = 1000
|
| 108 |
+
|
| 109 |
+
# 分塊重疊大小
|
| 110 |
+
CHUNK_OVERLAP = 200
|
| 111 |
+
|
| 112 |
+
# 檢索結果數量
|
| 113 |
+
RETRIEVER_K = 3
|
| 114 |
+
```
|
| 115 |
+
|
| 116 |
+
**說明:**
|
| 117 |
+
- `PDF_PATH`:PDF 文件的相對或絕對路徑
|
| 118 |
+
- `EMBEDDING_MODEL`:用於向量化的嵌入模型
|
| 119 |
+
- `CHUNK_SIZE`:每個文本塊的大小(字符數)
|
| 120 |
+
- `CHUNK_OVERLAP`:相鄰塊之間的重疊大小,有助於保持上下文
|
| 121 |
+
- `RETRIEVER_K`:每次檢索返回的結果數量
|
| 122 |
+
|
| 123 |
+
**調整建議:**
|
| 124 |
+
- 較大的 `CHUNK_SIZE`:適合長文檔,但可能包含無關資訊
|
| 125 |
+
- 較小的 `CHUNK_SIZE`:更精確,但可能丟失上下文
|
| 126 |
+
- 較大的 `CHUNK_OVERLAP`:更好的上下文連續性,但增加存儲
|
| 127 |
+
- 較大的 `RETRIEVER_K`:更多相關結果,但可能包含無關內容
|
| 128 |
+
|
| 129 |
+
### Agent 配置
|
| 130 |
+
|
| 131 |
+
```python
|
| 132 |
+
# 最大迭代次數(整體)
|
| 133 |
+
MAX_ITERATIONS = 5
|
| 134 |
+
|
| 135 |
+
# 最大研究迭代次數
|
| 136 |
+
MAX_RESEARCH_ITERATIONS = 20
|
| 137 |
+
|
| 138 |
+
# 反思的最大迭代次數(通用)
|
| 139 |
+
MAX_REFLECTION_ITERATION = 0
|
| 140 |
+
```
|
| 141 |
+
|
| 142 |
+
**說明:**
|
| 143 |
+
- `MAX_ITERATIONS`:整個代理流程的最大迭代次數
|
| 144 |
+
- `MAX_RESEARCH_ITERATIONS`:研究代理節點的最大迭代次數
|
| 145 |
+
- `MAX_REFLECTION_ITERATION`:反思代理的最大迭代次數(0 表示不進行反思)
|
| 146 |
+
|
| 147 |
+
**調整建議:**
|
| 148 |
+
- 較大的值:允許更深入的研究,但可能耗時更長
|
| 149 |
+
- 較小的值:更快完成,但可能不夠深入
|
| 150 |
+
|
| 151 |
+
### Email 配置
|
| 152 |
+
|
| 153 |
+
```python
|
| 154 |
+
# 發件人郵箱地址
|
| 155 |
+
EMAIL_SENDER = "matthuang46@gmail.com"
|
| 156 |
+
|
| 157 |
+
# Gmail API 憑證文件
|
| 158 |
+
GMAIL_CREDENTIALS_FILE = os.getenv("GMAIL_CREDENTIALS_FILE", "credentials_matthuang.json")
|
| 159 |
+
|
| 160 |
+
# Gmail API Token 文件
|
| 161 |
+
GMAIL_TOKEN_FILE = os.getenv("GMAIL_TOKEN_FILE", "token.json")
|
| 162 |
+
|
| 163 |
+
# Gmail API 權限範圍
|
| 164 |
+
GMAIL_SCOPES = ['https://www.googleapis.com/auth/gmail.send']
|
| 165 |
+
```
|
| 166 |
+
|
| 167 |
+
**說明:**
|
| 168 |
+
- `EMAIL_SENDER`:發送郵件的 Gmail 地址
|
| 169 |
+
- `GMAIL_CREDENTIALS_FILE`:OAuth2 憑證文件路徑
|
| 170 |
+
- `GMAIL_TOKEN_FILE`:Token 存儲文件路徑
|
| 171 |
+
- `GMAIL_SCOPES`:API 權限範圍,目前只請求發送郵件權限
|
| 172 |
+
|
| 173 |
+
**擴展權限:**
|
| 174 |
+
如果需要讀取郵件等功能,可以添加更多 scope:
|
| 175 |
+
```python
|
| 176 |
+
GMAIL_SCOPES = [
|
| 177 |
+
'https://www.googleapis.com/auth/gmail.send',
|
| 178 |
+
'https://www.googleapis.com/auth/gmail.readonly',
|
| 179 |
+
]
|
| 180 |
+
```
|
| 181 |
+
|
| 182 |
+
### Calendar 配置
|
| 183 |
+
|
| 184 |
+
```python
|
| 185 |
+
# Calendar API 憑證文件(可與 Gmail 共用)
|
| 186 |
+
CALENDAR_CREDENTIALS_FILE = os.getenv("CALENDAR_CREDENTIALS_FILE", "credentials_matthuang.json")
|
| 187 |
+
|
| 188 |
+
# Calendar API Token 文件(可與 Gmail 共用)
|
| 189 |
+
CALENDAR_TOKEN_FILE = os.getenv("CALENDAR_TOKEN_FILE", "token.json")
|
| 190 |
+
|
| 191 |
+
# Calendar API 權限範圍
|
| 192 |
+
CALENDAR_SCOPES = ['https://www.googleapis.com/auth/calendar']
|
| 193 |
+
```
|
| 194 |
+
|
| 195 |
+
**說明:**
|
| 196 |
+
- Calendar API 可以與 Gmail API 共用相同的 OAuth2 憑證
|
| 197 |
+
- `CALENDAR_SCOPES`:目前請求完整的 Calendar 權限
|
| 198 |
+
|
| 199 |
+
### Google Maps 配置
|
| 200 |
+
|
| 201 |
+
```python
|
| 202 |
+
# Google Maps API 金鑰
|
| 203 |
+
NORMAL_GOOGLE_MAPS_API_KEY = os.getenv("NORMAL_GOOGLE_MAPS_API_KEY", "")
|
| 204 |
+
|
| 205 |
+
# 用戶常用位置(用於計算交通時間)
|
| 206 |
+
USER_HOME_ADDRESS = os.getenv("USER_HOME_ADDRESS", "")
|
| 207 |
+
USER_OFFICE_ADDRESS = os.getenv("USER_OFFICE_ADDRESS", "")
|
| 208 |
+
```
|
| 209 |
+
|
| 210 |
+
**說明:**
|
| 211 |
+
- `NORMAL_GOOGLE_MAPS_API_KEY`:Google Maps API 金鑰(必需,用於地點驗證)
|
| 212 |
+
- `USER_HOME_ADDRESS`:家庭地址(可選,用於計算交通時間)
|
| 213 |
+
- `USER_OFFICE_ADDRESS`:辦公室地址(可選,優先使用)
|
| 214 |
+
|
| 215 |
+
**地址格式:**
|
| 216 |
+
- 支援多種格式:完整地址、地標名稱、座標等
|
| 217 |
+
- 例如:`"台北市信義區信義路五段7號"`、`"台北101"`、`"25.0330,121.5654"`
|
| 218 |
+
|
| 219 |
+
### 外部 SSD 配置
|
| 220 |
+
|
| 221 |
+
```python
|
| 222 |
+
# 外接 SSD 路徑
|
| 223 |
+
EXTERNAL_SSD_PATH = "/Volumes/T7_SSD"
|
| 224 |
+
|
| 225 |
+
# HuggingFace 緩存目錄
|
| 226 |
+
HF_CACHE_DIR = os.path.join(EXTERNAL_SSD_PATH, "huggingface_cache")
|
| 227 |
+
```
|
| 228 |
+
|
| 229 |
+
**說明:**
|
| 230 |
+
- 如果配置了外部 SSD,模型會緩存到外部 SSD
|
| 231 |
+
- 節省本地磁碟空間
|
| 232 |
+
- 如果找不到外部 SSD,會使用預設緩存目錄
|
| 233 |
+
|
| 234 |
+
**修改路徑:**
|
| 235 |
+
根據您的實際 SSD 掛載路徑修改 `EXTERNAL_SSD_PATH`。
|
| 236 |
+
|
| 237 |
+
## 🔍 配置驗證
|
| 238 |
+
|
| 239 |
+
### 檢查配置是否正確
|
| 240 |
+
|
| 241 |
+
1. **檢查環境變數**
|
| 242 |
+
|
| 243 |
+
```bash
|
| 244 |
+
# 在專案根目錄
|
| 245 |
+
cat .env
|
| 246 |
+
```
|
| 247 |
+
|
| 248 |
+
2. **檢查 Python 配置**
|
| 249 |
+
|
| 250 |
+
```python
|
| 251 |
+
# 在 Python 中
|
| 252 |
+
from deep_agent_rag.config import *
|
| 253 |
+
print(f"Groq API Key: {'已設置' if GROQ_API_KEY else '未設置'}")
|
| 254 |
+
print(f"MLX Model: {MLX_MODEL_ID}")
|
| 255 |
+
print(f"PDF Path: {PDF_PATH}")
|
| 256 |
+
```
|
| 257 |
+
|
| 258 |
+
3. **測試 API 連接**
|
| 259 |
+
|
| 260 |
+
- **Groq API**:運行研究代理,查看是否使用 Groq
|
| 261 |
+
- **Gmail API**:嘗試發送測試郵件
|
| 262 |
+
- **Calendar API**:嘗試創建測試事件
|
| 263 |
+
- **Google Maps API**:創建包含地點的事件,查看是否驗證成功
|
| 264 |
+
|
| 265 |
+
## 🎯 配置最佳實踐
|
| 266 |
+
|
| 267 |
+
### 開發環境
|
| 268 |
+
|
| 269 |
+
```env
|
| 270 |
+
# 使用本地 MLX 模型(無需 API 金鑰)
|
| 271 |
+
# 不設置 GROQ_API_KEY
|
| 272 |
+
|
| 273 |
+
# 可選:設置 Tavily API 用於網路搜尋
|
| 274 |
+
TAVILY_API_KEY=your_key_here
|
| 275 |
+
```
|
| 276 |
+
|
| 277 |
+
### 生產環境
|
| 278 |
+
|
| 279 |
+
```env
|
| 280 |
+
# 使用 Groq API(更快)
|
| 281 |
+
GROQ_API_KEY=your_key_here
|
| 282 |
+
|
| 283 |
+
# 設置所有必要的 API 金鑰
|
| 284 |
+
TAVILY_API_KEY=your_key_here
|
| 285 |
+
NORMAL_GOOGLE_MAPS_API_KEY=your_key_here
|
| 286 |
+
|
| 287 |
+
# 設置常用位置
|
| 288 |
+
USER_OFFICE_ADDRESS=your_office_address
|
| 289 |
+
```
|
| 290 |
+
|
| 291 |
+
### 隱私敏感環境
|
| 292 |
+
|
| 293 |
+
```env
|
| 294 |
+
# 不使用任何外部 API
|
| 295 |
+
# 只使用本地 MLX 模型
|
| 296 |
+
|
| 297 |
+
# 不設置任何 API 金鑰
|
| 298 |
+
```
|
| 299 |
+
|
| 300 |
+
## ⚠️ 常見配置問題
|
| 301 |
+
|
| 302 |
+
### 1. API 金鑰未設置
|
| 303 |
+
|
| 304 |
+
**問題**:功能無法使用(例如:網路搜尋、地點驗證)
|
| 305 |
+
|
| 306 |
+
**解決**:
|
| 307 |
+
- 檢查 `.env` 文件是否存在
|
| 308 |
+
- 檢查環境變數名稱是否正確
|
| 309 |
+
- 確認 API 金鑰是否有效
|
| 310 |
+
|
| 311 |
+
### 2. 憑證文件找不到
|
| 312 |
+
|
| 313 |
+
**問題**:Gmail/Calendar API 無法使用
|
| 314 |
+
|
| 315 |
+
**解決**:
|
| 316 |
+
- 確認 `credentials.json` 在專案根目錄
|
| 317 |
+
- 檢查 `GMAIL_CREDENTIALS_FILE` 路徑是否正確
|
| 318 |
+
- 參考 [Gmail API 設置指南](GMAIL_API_SETUP.md)
|
| 319 |
+
|
| 320 |
+
### 3. 模型緩存問題
|
| 321 |
+
|
| 322 |
+
**問題**:模型載入失敗或緩存損壞
|
| 323 |
+
|
| 324 |
+
**解決**:
|
| 325 |
+
- 刪除緩存目錄重新下載
|
| 326 |
+
- 檢查磁碟空間是否足夠
|
| 327 |
+
- 如果使用外部 SSD,確認 SSD 已正確掛載
|
| 328 |
+
|
| 329 |
+
### 4. PDF 文件找不到
|
| 330 |
+
|
| 331 |
+
**問題**:RAG 系統無法載入 PDF
|
| 332 |
+
|
| 333 |
+
**解決**:
|
| 334 |
+
- 確認 PDF 文件存在於指定路徑
|
| 335 |
+
- 檢查 `PDF_PATH` 是否為相對路徑(相對於專案根目錄)
|
| 336 |
+
- 或使用絕對路徑
|
| 337 |
+
|
| 338 |
+
## 📝 配置備份
|
| 339 |
+
|
| 340 |
+
建議將配置備份:
|
| 341 |
+
|
| 342 |
+
1. **環境變數備份**:保存 `.env` 文件(但不要提交敏感資訊)
|
| 343 |
+
2. **代碼配置備份**:`config.py` 可以提交到版本控制
|
| 344 |
+
3. **憑證備份**:安全存儲 `credentials.json`(不要提交到版本控制)
|
| 345 |
+
|
| 346 |
+
## 🔐 安全建議
|
| 347 |
+
|
| 348 |
+
1. **不要提交敏感資訊**
|
| 349 |
+
- 將 `.env` 添加到 `.gitignore`
|
| 350 |
+
- 將 `credentials.json` 和 `token.json` 添加到 `.gitignore`
|
| 351 |
+
|
| 352 |
+
2. **使用環境變數**
|
| 353 |
+
- 優先使用環境變數而非硬編碼
|
| 354 |
+
- 在生產環境使用密鑰管理服務
|
| 355 |
+
|
| 356 |
+
3. **限制 API 權限**
|
| 357 |
+
- 在 Google Cloud Console 中限制 API Key 使用
|
| 358 |
+
- 只請求必要的 OAuth scope
|
| 359 |
+
|
| 360 |
+
4. **定期輪換金鑰**
|
| 361 |
+
- 定期更新 API 金鑰
|
| 362 |
+
- 監控 API 使用情況
|
| 363 |
+
|
FEATURES.md
ADDED
|
@@ -0,0 +1,409 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 功能詳述
|
| 2 |
+
|
| 3 |
+
本文檔詳細說明 Deep Agentic AI Tool 的所有功能和使用範例。
|
| 4 |
+
|
| 5 |
+
## 🔍 深度研究代理 (Deep Research Agent)
|
| 6 |
+
|
| 7 |
+
### 功能概述
|
| 8 |
+
|
| 9 |
+
深度研究代理是一個智能多步驟研究系統,能夠自動分解複雜問題、選擇合適的工具、執行研究任務,並生成完整的研究報告。
|
| 10 |
+
|
| 11 |
+
### 核心特性
|
| 12 |
+
|
| 13 |
+
1. **智能任務分解**
|
| 14 |
+
- 自動識別查詢類型(學術、股票相關、一般查詢)
|
| 15 |
+
- 根據查詢類型生成適當的任務列表
|
| 16 |
+
- 避免不必要的工具調用
|
| 17 |
+
|
| 18 |
+
2. **動態工具選擇**
|
| 19 |
+
- 股票查詢工具(yfinance)
|
| 20 |
+
- 網路搜尋工具(Tavily API)
|
| 21 |
+
- PDF 知識庫工具(RAG 系統)
|
| 22 |
+
|
| 23 |
+
3. **即時進度追蹤**
|
| 24 |
+
- 顯示當前執行的節點
|
| 25 |
+
- 任務完成進度
|
| 26 |
+
- 研究筆記即時更新
|
| 27 |
+
|
| 28 |
+
4. **流式報告生成**
|
| 29 |
+
- 逐句流式顯示最終報告
|
| 30 |
+
- 支援中英文標點符號
|
| 31 |
+
- 完整的結構化報告
|
| 32 |
+
|
| 33 |
+
### 使用範例
|
| 34 |
+
|
| 35 |
+
#### 學術/理論問題
|
| 36 |
+
|
| 37 |
+
**輸入:**
|
| 38 |
+
```
|
| 39 |
+
解釋 Tree of Thoughts 並深入比較它與 Chain of Thought
|
| 40 |
+
```
|
| 41 |
+
|
| 42 |
+
**系統處理:**
|
| 43 |
+
1. 識別為學術查詢
|
| 44 |
+
2. 使用 PDF 知識庫工具檢索相關內容
|
| 45 |
+
3. 生成比較分析報告
|
| 46 |
+
|
| 47 |
+
**輸入:**
|
| 48 |
+
```
|
| 49 |
+
分析 Tree of Thoughts 方法的優缺點
|
| 50 |
+
```
|
| 51 |
+
|
| 52 |
+
#### 股票相關問題
|
| 53 |
+
|
| 54 |
+
**輸入:**
|
| 55 |
+
```
|
| 56 |
+
比較微軟 (MSFT) 和谷歌 (GOOGL) 在 AI 領域的表現
|
| 57 |
+
```
|
| 58 |
+
|
| 59 |
+
**系統處理:**
|
| 60 |
+
1. 識別為股票查詢
|
| 61 |
+
2. 使用股票查詢工具獲取兩家公司數據
|
| 62 |
+
3. 使用網路搜尋工具獲取最新 AI 相關新聞
|
| 63 |
+
4. 生成比較分析報告
|
| 64 |
+
|
| 65 |
+
**輸入:**
|
| 66 |
+
```
|
| 67 |
+
查詢蘋果 (AAPL) 的財務狀況和近期發展
|
| 68 |
+
```
|
| 69 |
+
|
| 70 |
+
#### 綜合問題
|
| 71 |
+
|
| 72 |
+
**輸入:**
|
| 73 |
+
```
|
| 74 |
+
比較微軟 (MSFT) 和谷歌 (GOOGL) 在 AI 領域,並結合 Tree of Thoughts 方法論
|
| 75 |
+
```
|
| 76 |
+
|
| 77 |
+
**系統處理:**
|
| 78 |
+
1. 識別為綜合查詢
|
| 79 |
+
2. 同時使用股票查詢、網路搜尋和 PDF 知識庫工具
|
| 80 |
+
3. 生成綜合分析報告
|
| 81 |
+
|
| 82 |
+
### 工作流程
|
| 83 |
+
|
| 84 |
+
1. **規劃節點 (Planner)**
|
| 85 |
+
- 分析查詢並分解為研究任務
|
| 86 |
+
- 生成任務列表
|
| 87 |
+
|
| 88 |
+
2. **研究代理節點 (Research Agent)**
|
| 89 |
+
- 執行研究任務
|
| 90 |
+
- 動態選擇並調用工具
|
| 91 |
+
- 維護對話上下文
|
| 92 |
+
|
| 93 |
+
3. **工具節點 (Tools)**
|
| 94 |
+
- 執行工具調用
|
| 95 |
+
- 返回結果
|
| 96 |
+
|
| 97 |
+
4. **筆記整理節點 (Note Taking)**
|
| 98 |
+
- 整理工具結果
|
| 99 |
+
- 添加到研究筆記
|
| 100 |
+
|
| 101 |
+
5. **最終報告節點 (Final Report)**
|
| 102 |
+
- 綜合所有研究筆記
|
| 103 |
+
- 生成結構化報告
|
| 104 |
+
|
| 105 |
+
## 📧 智能郵件助手 (Email Agent)
|
| 106 |
+
|
| 107 |
+
### 功能概述
|
| 108 |
+
|
| 109 |
+
智能郵件助手使用 AI 自動生成郵件草稿,支援 Gmail API 發送,並提供 AI 反思評估功能以改進郵件質量。
|
| 110 |
+
|
| 111 |
+
### 核心特性
|
| 112 |
+
|
| 113 |
+
1. **AI 自動生成**
|
| 114 |
+
- 根據簡單提示生成完整郵件
|
| 115 |
+
- 支援中英文郵件
|
| 116 |
+
- 自動生成主題和正文
|
| 117 |
+
|
| 118 |
+
2. **AI 反思評估**
|
| 119 |
+
- 自動評估郵件質量
|
| 120 |
+
- 提供改進建議
|
| 121 |
+
- 可選自動改進(生成改進版本)
|
| 122 |
+
|
| 123 |
+
3. **Gmail API 整合**
|
| 124 |
+
- 使用官方 API 發送,避免垃圾郵件分類
|
| 125 |
+
- OAuth2 認證,無需儲存密碼
|
| 126 |
+
- 更可靠的錯誤處理
|
| 127 |
+
|
| 128 |
+
4. **可編輯草稿**
|
| 129 |
+
- 生成後可檢查和修改
|
| 130 |
+
- 確認無誤後發送
|
| 131 |
+
|
| 132 |
+
### 使用範例
|
| 133 |
+
|
| 134 |
+
#### 基本使用
|
| 135 |
+
|
| 136 |
+
**輸入提示:**
|
| 137 |
+
```
|
| 138 |
+
寫一封感謝信,感謝對方在專案上的幫助
|
| 139 |
+
```
|
| 140 |
+
|
| 141 |
+
**收件人:**
|
| 142 |
+
```
|
| 143 |
+
colleague@example.com
|
| 144 |
+
```
|
| 145 |
+
|
| 146 |
+
**系統處理:**
|
| 147 |
+
1. 生成郵件主題和正文
|
| 148 |
+
2. 進行 AI 反思評估
|
| 149 |
+
3. 如有改進建議,顯示評估結果
|
| 150 |
+
4. 用戶可選擇使用改進版本或原始版本
|
| 151 |
+
|
| 152 |
+
#### 商務郵件
|
| 153 |
+
|
| 154 |
+
**輸入提示:**
|
| 155 |
+
```
|
| 156 |
+
邀請某人參加下週的產品發布會
|
| 157 |
+
```
|
| 158 |
+
|
| 159 |
+
**收件人:**
|
| 160 |
+
```
|
| 161 |
+
client@example.com
|
| 162 |
+
```
|
| 163 |
+
|
| 164 |
+
#### 進度查詢
|
| 165 |
+
|
| 166 |
+
**輸入提示:**
|
| 167 |
+
```
|
| 168 |
+
詢問專案進度並提供更新
|
| 169 |
+
```
|
| 170 |
+
|
| 171 |
+
**收件人:**
|
| 172 |
+
```
|
| 173 |
+
team@example.com
|
| 174 |
+
```
|
| 175 |
+
|
| 176 |
+
### AI 反思評估
|
| 177 |
+
|
| 178 |
+
系統會自動評估生成的郵件:
|
| 179 |
+
|
| 180 |
+
- **完整性**:是否包含所有必要資訊
|
| 181 |
+
- **語氣**:是否適合收件人和情境
|
| 182 |
+
- **結構**:邏輯是否清晰
|
| 183 |
+
- **專業性**:是否符合商務郵件標準
|
| 184 |
+
|
| 185 |
+
如果評估發現需要改進,系統會:
|
| 186 |
+
1. 顯示評估結果和改進建議
|
| 187 |
+
2. 可選自動生成改進版本
|
| 188 |
+
3. 用戶可選擇使用改進版本或原始版本
|
| 189 |
+
|
| 190 |
+
### 設置要求
|
| 191 |
+
|
| 192 |
+
- Gmail API 憑證(參考 [Gmail API 設置](GMAIL_API_SETUP.md))
|
| 193 |
+
- OAuth2 授權(首次使用時自動觸發)
|
| 194 |
+
|
| 195 |
+
## 📅 智能行事曆管理 (Calendar Agent)
|
| 196 |
+
|
| 197 |
+
### 功能概述
|
| 198 |
+
|
| 199 |
+
智能行事曆管理使用 AI 自動生成行事曆事件,整合 Google Calendar API 和 Google Maps,提供地點驗證、交通時間計算等功能。
|
| 200 |
+
|
| 201 |
+
### 核心特性
|
| 202 |
+
|
| 203 |
+
1. **AI 自動生成事件**
|
| 204 |
+
- 根據完整提示生成事件
|
| 205 |
+
- 自動解析日期、時間、地點、參與者
|
| 206 |
+
- 支援相對日期(今天、明天、後天)
|
| 207 |
+
|
| 208 |
+
2. **AI 反思評估與改進**
|
| 209 |
+
- 最多 3 輪迭代反思
|
| 210 |
+
- 自動評估事件完整性
|
| 211 |
+
- 自動生成改進版本
|
| 212 |
+
|
| 213 |
+
3. **Google Maps 整合**
|
| 214 |
+
- 自動驗證和標準化地址
|
| 215 |
+
- 計算交通時間
|
| 216 |
+
- 建議出發��間
|
| 217 |
+
|
| 218 |
+
4. **智能缺失資訊處理**
|
| 219 |
+
- 自動檢測缺失資訊(日期、時間)
|
| 220 |
+
- 提供下拉選單供選擇
|
| 221 |
+
- 確認後自動填充
|
| 222 |
+
|
| 223 |
+
5. **快速選擇按鈕**
|
| 224 |
+
- 團隊會議
|
| 225 |
+
- 客戶拜訪
|
| 226 |
+
- 午餐會議
|
| 227 |
+
- 一對一會議
|
| 228 |
+
- 項目討論
|
| 229 |
+
- 培訓/學習
|
| 230 |
+
- 社交活動
|
| 231 |
+
- 自定義輸入
|
| 232 |
+
|
| 233 |
+
### 使用範例
|
| 234 |
+
|
| 235 |
+
#### 基本使用
|
| 236 |
+
|
| 237 |
+
**輸入提示:**
|
| 238 |
+
```
|
| 239 |
+
明天下午2點團隊會議,討論專案進度,地點在會議室A
|
| 240 |
+
```
|
| 241 |
+
|
| 242 |
+
**系統處理:**
|
| 243 |
+
1. 解析日期:明天
|
| 244 |
+
2. 解析時間:下午2點
|
| 245 |
+
3. 解析事件:團隊會議
|
| 246 |
+
4. 解析地點:會議室A
|
| 247 |
+
5. 生成事件草稿
|
| 248 |
+
6. 進行 AI 反思評估
|
| 249 |
+
7. 驗證地點(如果配置了 Google Maps API)
|
| 250 |
+
8. 計算交通時間(如果配置了常用位置)
|
| 251 |
+
|
| 252 |
+
#### 包含參與者
|
| 253 |
+
|
| 254 |
+
**輸入提示:**
|
| 255 |
+
```
|
| 256 |
+
後天上午10點客戶拜訪,地點在台北101,參與者包括 john@example.com 和 mary@example.com
|
| 257 |
+
```
|
| 258 |
+
|
| 259 |
+
**系統處理:**
|
| 260 |
+
1. 解析所有資訊
|
| 261 |
+
2. 驗證並標準化地址(台北101 → 完整地址)
|
| 262 |
+
3. 計算從辦公室到台北101的交通時間
|
| 263 |
+
4. 建議出發時間(提前10分鐘到達)
|
| 264 |
+
|
| 265 |
+
#### 使用快速選擇
|
| 266 |
+
|
| 267 |
+
1. 點擊快速選擇按鈕(例如:"📋 團隊會議")
|
| 268 |
+
2. 系統自動填充提示
|
| 269 |
+
3. 點擊「生成事件草稿」
|
| 270 |
+
4. 如有缺失資訊,系統會提示選擇
|
| 271 |
+
|
| 272 |
+
### AI 反思評估
|
| 273 |
+
|
| 274 |
+
系統會進行最多 3 輪迭代反思:
|
| 275 |
+
|
| 276 |
+
1. **第一輪評估**
|
| 277 |
+
- 評估事件完整性
|
| 278 |
+
- 檢查是否有缺失資訊
|
| 279 |
+
- 評估事件描述是否清晰
|
| 280 |
+
|
| 281 |
+
2. **改進生成**
|
| 282 |
+
- 如有改進建議,自動生成改進版本
|
| 283 |
+
- 改進版本會再次評估
|
| 284 |
+
|
| 285 |
+
3. **迭代優化**
|
| 286 |
+
- 重複評估和改進過程
|
| 287 |
+
- 直到 AI 認為滿意或達到最大迭代次數
|
| 288 |
+
|
| 289 |
+
### Google Maps 整合
|
| 290 |
+
|
| 291 |
+
#### 地點驗證
|
| 292 |
+
|
| 293 |
+
**輸入:**
|
| 294 |
+
```
|
| 295 |
+
明天下午2點會議,地點在台北101
|
| 296 |
+
```
|
| 297 |
+
|
| 298 |
+
**系統處理:**
|
| 299 |
+
1. 驗證地址是否存在
|
| 300 |
+
2. 標準化為完整格式:`台北市信義區市府路45號(台北101)`
|
| 301 |
+
3. 獲取準確座標
|
| 302 |
+
|
| 303 |
+
#### 交通時間計算
|
| 304 |
+
|
| 305 |
+
**前提條件:**
|
| 306 |
+
- 配置了 `USER_HOME_ADDRESS` 或 `USER_OFFICE_ADDRESS`
|
| 307 |
+
- 配置了 `NORMAL_GOOGLE_MAPS_API_KEY`
|
| 308 |
+
|
| 309 |
+
**系統處理:**
|
| 310 |
+
1. 計算從預設位置到事件地點的距離
|
| 311 |
+
2. 根據事件時間計算交通時間
|
| 312 |
+
3. 建議出發時間(提前10分鐘到達)
|
| 313 |
+
|
| 314 |
+
**顯示結果:**
|
| 315 |
+
```
|
| 316 |
+
✅ 地址已驗證:台北市信義區市府路45號(台北101)
|
| 317 |
+
📍 從您的預設位置出發,預計需要 25 分鐘(12.5 公里)
|
| 318 |
+
⏰ 建議出發時間:2026-01-26 13:35
|
| 319 |
+
```
|
| 320 |
+
|
| 321 |
+
### 事件管理功能
|
| 322 |
+
|
| 323 |
+
- **創建事件**:生成並創建新事件
|
| 324 |
+
- **更新事件**:修改現有事件(需要事件 ID)
|
| 325 |
+
- **刪除事件**:刪除現有事件(需要事件 ID)
|
| 326 |
+
|
| 327 |
+
### 設置要求
|
| 328 |
+
|
| 329 |
+
- Google Calendar API 憑證(與 Gmail API 共用)
|
| 330 |
+
- Google Maps API 金鑰(可選,用於地點驗證)
|
| 331 |
+
- 用戶常用位置(可選,用於交通時間計算)
|
| 332 |
+
|
| 333 |
+
詳細設置請參考:
|
| 334 |
+
- [Gmail API 設置](GMAIL_API_SETUP.md)(Calendar API 設置相同)
|
| 335 |
+
- [Google Maps 整合說明](GOOGLE_MAPS_INTEGRATION.md)
|
| 336 |
+
|
| 337 |
+
## 📊 研究工具集
|
| 338 |
+
|
| 339 |
+
### 股票查詢工具
|
| 340 |
+
|
| 341 |
+
**功能:**
|
| 342 |
+
- 即時股票數據檢索
|
| 343 |
+
- 公司財務數據和營運狀況
|
| 344 |
+
- 市值、P/E 比、營收成長
|
| 345 |
+
- 業務摘要和分析
|
| 346 |
+
|
| 347 |
+
**使用範例:**
|
| 348 |
+
- 查詢單一股票:`查詢蘋果 (AAPL) 的財務狀況`
|
| 349 |
+
- 比較多個股票:`比較微軟 (MSFT) 和谷歌 (GOOGL)`
|
| 350 |
+
|
| 351 |
+
### 網路搜尋工具
|
| 352 |
+
|
| 353 |
+
**功能:**
|
| 354 |
+
- 使用 Tavily Search API
|
| 355 |
+
- 獲取最新新聞和資訊
|
| 356 |
+
- 支援多語言搜尋
|
| 357 |
+
|
| 358 |
+
**使用範例:**
|
| 359 |
+
- 搜尋最新資訊:`搜尋 AI 領域的最新發展`
|
| 360 |
+
- 獲取新聞:`查找關於 ChatGPT 的最新新聞`
|
| 361 |
+
|
| 362 |
+
### PDF 知識庫工具
|
| 363 |
+
|
| 364 |
+
**功能:**
|
| 365 |
+
- 向量化語義搜尋
|
| 366 |
+
- 目前包含 "Tree of Thoughts" 研究論文
|
| 367 |
+
- 可擴展到其他 PDF 文檔
|
| 368 |
+
|
| 369 |
+
**使用範例:**
|
| 370 |
+
- 查詢論文內容:`解釋 Tree of Thoughts 方法`
|
| 371 |
+
- 比較概念:`比較 Tree of Thoughts 和 Chain of Thought`
|
| 372 |
+
|
| 373 |
+
## 🔄 LLM 配置
|
| 374 |
+
|
| 375 |
+
系統支援多種 LLM 後端,並自動切換:
|
| 376 |
+
|
| 377 |
+
1. **主要:Groq API**(快速,需要 API 金鑰)
|
| 378 |
+
- 模型:`llama-3.3-70b-versatile`
|
| 379 |
+
- 如果設置了 `GROQ_API_KEY` 則自動使用
|
| 380 |
+
|
| 381 |
+
2. **備援:本地 MLX 模型**(保護隱私,無需 API 金鑰)
|
| 382 |
+
- 模型:`mlx-community/Qwen2.5-Coder-7B-Instruct-4bit`
|
| 383 |
+
- 當 Groq API 不可用或額度用完時自動使用
|
| 384 |
+
|
| 385 |
+
系統會根據可用性自動切換後端。
|
| 386 |
+
|
| 387 |
+
## 💡 使用技巧
|
| 388 |
+
|
| 389 |
+
1. **研究查詢**
|
| 390 |
+
- 使用具體的問題描述
|
| 391 |
+
- 包含股票代碼(如果查詢股票)
|
| 392 |
+
- 明確指出需要比較的內容
|
| 393 |
+
|
| 394 |
+
2. **郵件生成**
|
| 395 |
+
- 提供上下文資訊(例如:專案名稱、時間)
|
| 396 |
+
- 指定郵件語氣(正式、友好等)
|
| 397 |
+
- 檢查 AI 反思評估結果
|
| 398 |
+
|
| 399 |
+
3. **行事曆事件**
|
| 400 |
+
- 使用完整提示(包含所有必要資訊)
|
| 401 |
+
- 使用快速選擇按鈕快速開始
|
| 402 |
+
- 檢查地點驗證和交通時間資訊
|
| 403 |
+
- 如有缺失資訊,使用系統提供的下拉選單
|
| 404 |
+
|
| 405 |
+
4. **性能優化**
|
| 406 |
+
- 使用 Groq API 獲得更快結果
|
| 407 |
+
- 本地 MLX 模型適合隱私敏感場景
|
| 408 |
+
- 系統會自動選擇最佳後端
|
| 409 |
+
|
GMAIL_API_SETUP.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
| 1 |
# Gmail API 設置指南
|
| 2 |
|
|
|
|
|
|
|
| 3 |
本系統使用 Gmail API 發送郵件,相比傳統 SMTP 方式,可以避免被歸類為垃圾郵件的風險。
|
| 4 |
|
| 5 |
## 📋 設置步驟
|
|
@@ -101,6 +103,30 @@ GMAIL_TOKEN_FILE=token.json
|
|
| 101 |
4. 點擊「📧 生成並發送郵件」
|
| 102 |
5. 如果設置正確,郵件會成功發送並顯示 Message ID
|
| 103 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 104 |
## 🆚 Gmail API vs SMTP
|
| 105 |
|
| 106 |
使用 Gmail API 的優勢:
|
|
|
|
| 1 |
# Gmail API 設置指南
|
| 2 |
|
| 3 |
+
> 📚 **相關文檔**:[主 README](README.md) | [功能詳述](FEATURES.md#智能郵件助手) | [配置指南](CONFIGURATION.md#email-配置)
|
| 4 |
+
|
| 5 |
本系統使用 Gmail API 發送郵件,相比傳統 SMTP 方式,可以避免被歸類為垃圾郵件的風險。
|
| 6 |
|
| 7 |
## 📋 設置步驟
|
|
|
|
| 103 |
4. 點擊「📧 生成並發送郵件」
|
| 104 |
5. 如果設置正確,郵件會成功發送並顯示 Message ID
|
| 105 |
|
| 106 |
+
## 📅 Google Calendar API 設置
|
| 107 |
+
|
| 108 |
+
**注意**:Google Calendar API 與 Gmail API 共用相同的 OAuth2 憑證。
|
| 109 |
+
|
| 110 |
+
### 啟用 Calendar API
|
| 111 |
+
|
| 112 |
+
1. 在 Google Cloud Console 中,進入「API 和服務」>「資料庫」
|
| 113 |
+
2. 搜尋「Google Calendar API」
|
| 114 |
+
3. 點擊「Google Calendar API」並點擊「啟用」
|
| 115 |
+
|
| 116 |
+
### 共用憑證
|
| 117 |
+
|
| 118 |
+
- Calendar API 使用與 Gmail API 相同的 `credentials.json` 文件
|
| 119 |
+
- 首次使用 Calendar 功能時,系統會自動請求 Calendar 權限
|
| 120 |
+
- Token 會存儲在同一個 `token.json` 文件中
|
| 121 |
+
|
| 122 |
+
### 權限範圍
|
| 123 |
+
|
| 124 |
+
系統會自動請求以下權限:
|
| 125 |
+
- `gmail.send`:發送郵件
|
| 126 |
+
- `calendar`:完整的 Calendar 權限(創建、更新、刪除事件)
|
| 127 |
+
|
| 128 |
+
**詳細使用說明請參考**:[功能詳述 - 智能行事曆管理](FEATURES.md#智能行事曆管理)
|
| 129 |
+
|
| 130 |
## 🆚 Gmail API vs SMTP
|
| 131 |
|
| 132 |
使用 Gmail API 的優勢:
|
GOOGLE_MAPS_INTEGRATION.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
| 1 |
# Google Maps API 整合說明
|
| 2 |
|
|
|
|
|
|
|
| 3 |
本系統已整合 Google Maps API,為行事曆事件提供智能地點驗證、標準化和交通時間計算功能。
|
| 4 |
|
| 5 |
## 🎯 功能特色
|
|
|
|
| 1 |
# Google Maps API 整合說明
|
| 2 |
|
| 3 |
+
> 📚 **相關文檔**:[主 README](README.md) | [功能詳述](FEATURES.md#智能行事曆管理) | [配置指南](CONFIGURATION.md#google-maps-配置)
|
| 4 |
+
|
| 5 |
本系統已整合 Google Maps API,為行事曆事件提供智能地點驗證、標準化和交通時間計算功能。
|
| 6 |
|
| 7 |
## 🎯 功能特色
|
README.md
CHANGED
|
@@ -1,337 +1,301 @@
|
|
| 1 |
# Deep Agentic AI Tool
|
| 2 |
|
| 3 |
-
|
| 4 |
|
| 5 |
-
## 🚀
|
| 6 |
|
| 7 |
-
###
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
-
|
| 10 |
-
- Automatic task decomposition based on query type
|
| 11 |
-
- Smart tool selection (stocks, web search, PDF knowledge base)
|
| 12 |
-
- Real-time progress tracking and note-taking
|
| 13 |
-
- Comprehensive final report generation
|
| 14 |
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
| 19 |
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
- Retrieves up-to-date information from the web
|
| 23 |
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
- Gmail API integration (avoids spam classification)
|
| 32 |
-
- Support for both Chinese and English emails
|
| 33 |
-
- Editable drafts before sending
|
| 34 |
|
| 35 |
-
###
|
|
|
|
|
|
|
|
|
|
| 36 |
|
| 37 |
-
|
| 38 |
-
- **Groq API Fallback**: Automatic fallback to Groq API when local model is unavailable
|
| 39 |
-
- **LangGraph Orchestration**: Sophisticated agent workflow management
|
| 40 |
-
- **Gradio Web Interface**: Modern, user-friendly web UI with real-time updates
|
| 41 |
-
- **Modular Architecture**: Clean, extensible codebase structure
|
| 42 |
|
| 43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
|
| 45 |
- Python >= 3.13
|
| 46 |
-
- macOS
|
| 47 |
-
- Google Cloud
|
| 48 |
-
- Tavily API
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
git clone <repository-url>
|
| 55 |
-
cd Deep_Agentic_AI_Tool
|
| 56 |
-
```
|
| 57 |
-
|
| 58 |
-
2. **Install dependencies**:
|
| 59 |
-
```bash
|
| 60 |
-
# Using uv (recommended)
|
| 61 |
-
uv sync
|
| 62 |
-
|
| 63 |
-
# Or using pip
|
| 64 |
-
pip install -e .
|
| 65 |
-
```
|
| 66 |
-
|
| 67 |
-
3. **Set up environment variables** (create a `.env` file in the root directory):
|
| 68 |
-
```env
|
| 69 |
-
# Optional: Groq API (for faster inference)
|
| 70 |
-
GROQ_API_KEY=your_groq_api_key_here
|
| 71 |
-
|
| 72 |
-
# Optional: Tavily API (for web search)
|
| 73 |
-
TAVILY_API_KEY=your_tavily_api_key_here
|
| 74 |
-
|
| 75 |
-
# Optional: Gmail API credentials
|
| 76 |
-
GMAIL_CREDENTIALS_FILE=credentials.json
|
| 77 |
-
GMAIL_TOKEN_FILE=token.json
|
| 78 |
-
```
|
| 79 |
-
|
| 80 |
-
4. **Prepare PDF data** (optional):
|
| 81 |
-
- Place your PDF files in the `data/` directory
|
| 82 |
-
- The system currently uses `data/Tree_of_Thoughts.pdf` by default
|
| 83 |
-
- You can modify the path in `deep_agent_rag/config.py`
|
| 84 |
-
|
| 85 |
-
5. **Set up Gmail API** (optional, for email features):
|
| 86 |
-
- Follow the instructions in `GMAIL_API_SETUP.md`
|
| 87 |
-
- Download OAuth2 credentials and save as `credentials.json` in the root directory
|
| 88 |
-
|
| 89 |
-
## 🎯 Usage
|
| 90 |
-
|
| 91 |
-
### Starting the Application
|
| 92 |
-
|
| 93 |
-
Run the main application:
|
| 94 |
|
| 95 |
```bash
|
| 96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
```
|
| 98 |
|
| 99 |
-
|
| 100 |
-
- Local: `http://localhost:7860`
|
| 101 |
-
- Network: `http://0.0.0.0:7860`
|
| 102 |
|
| 103 |
-
|
| 104 |
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
4. Watch real-time updates:
|
| 109 |
-
- **Current Status**: Shows which agent node is executing
|
| 110 |
-
- **Task List**: Displays the research plan and progress
|
| 111 |
-
- **Research Notes**: Real-time notes from the research process
|
| 112 |
-
- **Final Report**: Comprehensive research report (streamed sentence by sentence)
|
| 113 |
|
| 114 |
-
#
|
|
|
|
| 115 |
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
- "Analyze the advantages and disadvantages of the Tree of Thoughts method"
|
| 119 |
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
|
| 124 |
-
|
| 125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
|
| 127 |
-
|
| 128 |
|
| 129 |
-
|
| 130 |
-
2. Enter an email prompt (e.g., "Write a thank you letter")
|
| 131 |
-
3. Enter the recipient's email address
|
| 132 |
-
4. Click **"📝 生成郵件草稿"** (Generate Email Draft)
|
| 133 |
-
5. Review and edit the generated subject and body
|
| 134 |
-
6. Click **"📧 發送郵件"** (Send Email) to send
|
| 135 |
|
| 136 |
-
|
|
|
|
|
|
|
| 137 |
|
| 138 |
-
|
| 139 |
-
- "Invite someone to next week's product launch"
|
| 140 |
-
- "Ask about project progress and provide updates"
|
| 141 |
|
| 142 |
-
|
|
|
|
|
|
|
| 143 |
|
| 144 |
-
###
|
| 145 |
|
|
|
|
|
|
|
| 146 |
```
|
| 147 |
-
Deep_Agentic_AI_Tool/
|
| 148 |
-
├── deep_agent_rag/ # Main package
|
| 149 |
-
│ ├── agents/ # Agent nodes
|
| 150 |
-
│ │ ├── planner.py # Task planning node
|
| 151 |
-
│ │ ├── researcher.py # Research execution node
|
| 152 |
-
│ │ ├── note_taker.py # Note-taking node
|
| 153 |
-
│ │ ├── reporter.py # Final report generation
|
| 154 |
-
│ │ ├── email_agent.py # Email generation agent
|
| 155 |
-
│ │ └── state.py # State definition
|
| 156 |
-
│ ├── graph/ # LangGraph orchestration
|
| 157 |
-
│ │ └── agent_graph.py # Graph construction and routing
|
| 158 |
-
│ ├── models/ # Model wrappers
|
| 159 |
-
│ │ └── mlx_chat_model.py # MLX model integration
|
| 160 |
-
│ ├── rag/ # RAG system
|
| 161 |
-
│ │ └── rag_system.py # PDF loading and retrieval
|
| 162 |
-
│ ├── tools/ # Tool definitions
|
| 163 |
-
│ │ ├── agent_tools.py # Stock, web search, PDF tools
|
| 164 |
-
│ │ └── email_tool.py # Email sending tool
|
| 165 |
-
│ ├── ui/ # User interface
|
| 166 |
-
│ │ └── gradio_interface.py # Gradio web UI
|
| 167 |
-
│ ├── utils/ # Utilities
|
| 168 |
-
│ │ └── llm_utils.py # LLM instance management
|
| 169 |
-
│ └── config.py # Configuration
|
| 170 |
-
├── data/ # Data directory
|
| 171 |
-
│ └── Tree_of_Thoughts.pdf
|
| 172 |
-
├── Deep_Agent_Gradio_RAG_localLLM_main.py # Main entry point
|
| 173 |
-
├── main.py # Simple entry point
|
| 174 |
-
├── pyproject.toml # Project dependencies
|
| 175 |
-
└── README.md # This file
|
| 176 |
-
```
|
| 177 |
-
|
| 178 |
-
### Agent Workflow
|
| 179 |
-
|
| 180 |
-
The system uses a multi-agent workflow orchestrated by LangGraph:
|
| 181 |
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
- Avoids unnecessary tool calls
|
| 186 |
|
| 187 |
-
|
| 188 |
-
- Dynamically selects and calls appropriate tools
|
| 189 |
-
- Can call multiple tools in sequence
|
| 190 |
-
- Maintains conversation context
|
| 191 |
|
| 192 |
-
|
| 193 |
-
- Stock query tool
|
| 194 |
-
- Web search tool
|
| 195 |
-
- PDF knowledge base tool
|
| 196 |
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 200 |
|
| 201 |
-
|
| 202 |
-
- Synthesizes all research notes
|
| 203 |
-
- Creates structured final report
|
| 204 |
|
| 205 |
-
###
|
| 206 |
|
| 207 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 208 |
|
| 209 |
-
|
| 210 |
-
- Model: `llama-3.3-70b-versatile`
|
| 211 |
-
- Automatically used if `GROQ_API_KEY` is set
|
| 212 |
|
| 213 |
-
|
| 214 |
-
- Model: `mlx-community/Qwen2.5-Coder-7B-Instruct-4bit`
|
| 215 |
-
- Automatically used when Groq API is unavailable or quota exhausted
|
| 216 |
|
| 217 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 218 |
|
| 219 |
-
#
|
| 220 |
|
| 221 |
-
|
| 222 |
|
| 223 |
-
### MLX Model Settings
|
| 224 |
-
```python
|
| 225 |
-
MLX_MODEL_ID = "mlx-community/Qwen2.5-Coder-7B-Instruct-4bit"
|
| 226 |
-
MLX_MAX_TOKENS = 2048
|
| 227 |
-
MLX_TEMPERATURE = 0.7
|
| 228 |
```
|
| 229 |
-
|
| 230 |
-
#
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 237 |
```
|
| 238 |
|
| 239 |
-
|
| 240 |
-
```python
|
| 241 |
-
MAX_ITERATIONS = 5
|
| 242 |
-
MAX_RESEARCH_ITERATIONS = 20
|
| 243 |
-
```
|
| 244 |
|
| 245 |
-
##
|
| 246 |
-
```python
|
| 247 |
-
EMAIL_SENDER = "wenliangmatt@gmail.com" # Change to your email
|
| 248 |
-
GMAIL_CREDENTIALS_FILE = "credentials.json"
|
| 249 |
-
GMAIL_TOKEN_FILE = "token.json"
|
| 250 |
-
```
|
| 251 |
|
| 252 |
-
|
| 253 |
|
| 254 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 255 |
|
| 256 |
-
|
| 257 |
-
```python
|
| 258 |
-
@tool
|
| 259 |
-
def my_new_tool(param: str) -> str:
|
| 260 |
-
"""Tool description for the LLM."""
|
| 261 |
-
# Implementation
|
| 262 |
-
return result
|
| 263 |
-
```
|
| 264 |
|
| 265 |
-
|
| 266 |
|
| 267 |
-
|
| 268 |
|
| 269 |
-
|
|
|
|
|
|
|
|
|
|
| 270 |
|
| 271 |
-
|
| 272 |
-
- **Research logic**: Edit `deep_agent_rag/agents/researcher.py`
|
| 273 |
-
- **Report generation**: Edit `deep_agent_rag/agents/reporter.py`
|
| 274 |
|
| 275 |
-
|
|
|
|
|
|
|
| 276 |
|
| 277 |
-
|
| 278 |
|
| 279 |
-
|
| 280 |
|
| 281 |
-
|
| 282 |
|
| 283 |
-
|
| 284 |
-
- **LangGraph**: Agent orchestration and workflow management
|
| 285 |
-
- **MLX/MLX-LM**: Local model inference (Apple Silicon optimized)
|
| 286 |
-
- **Gradio**: Web interface
|
| 287 |
-
- **ChromaDB**: Vector database for RAG
|
| 288 |
-
- **Tavily**: Web search API
|
| 289 |
-
- **yfinance**: Stock data retrieval
|
| 290 |
-
- **Google API Client**: Gmail API integration
|
| 291 |
|
| 292 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 293 |
|
| 294 |
-
|
| 295 |
|
| 296 |
-
|
| 297 |
-
- **Slow inference**: This is normal for local models. Consider using Groq API for faster results
|
| 298 |
|
| 299 |
-
###
|
|
|
|
|
|
|
| 300 |
|
| 301 |
-
|
| 302 |
-
- **
|
|
|
|
| 303 |
|
| 304 |
-
### RAG
|
|
|
|
|
|
|
| 305 |
|
| 306 |
-
|
| 307 |
-
- **
|
|
|
|
|
|
|
| 308 |
|
| 309 |
-
###
|
|
|
|
|
|
|
|
|
|
| 310 |
|
| 311 |
-
|
| 312 |
-
- **Credentials not found**: Ensure `credentials.json` is in the project root
|
| 313 |
-
- See `GMAIL_API_SETUP.md` for detailed setup instructions
|
| 314 |
|
| 315 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 316 |
|
| 317 |
-
|
| 318 |
|
| 319 |
-
|
| 320 |
|
| 321 |
-
|
| 322 |
|
| 323 |
-
|
| 324 |
|
| 325 |
-
|
| 326 |
|
| 327 |
-
|
| 328 |
|
| 329 |
-
|
| 330 |
-
- **MLX Team**: For efficient local model inference
|
| 331 |
-
- **Qwen Team**: For the Qwen2.5 model
|
| 332 |
-
- **Jina AI**: For the embedding model
|
| 333 |
|
| 334 |
-
-
|
|
|
|
|
|
|
|
|
|
| 335 |
|
| 336 |
-
|
| 337 |
|
|
|
|
|
|
| 1 |
# Deep Agentic AI Tool
|
| 2 |
|
| 3 |
+
一個功能完整的深度研究代理系統,整合 RAG(檢索增強生成)、本地 MLX 模型支援,以及多種智能工具。系統基於 LangGraph 構建,提供智能研究、郵件生成、行事曆管理等全方位 AI 助手功能。
|
| 4 |
|
| 5 |
+
## 🚀 核心功能
|
| 6 |
|
| 7 |
+
### 🔍 深度研究代理 (Deep Research Agent)
|
| 8 |
+
- 智能多步驟研究規劃與執行
|
| 9 |
+
- 自動任務分解(學術、股票、一般查詢)
|
| 10 |
+
- 動態工具選擇(股票查詢、網路搜尋、PDF 知識庫)
|
| 11 |
+
- 即時進度追蹤與筆記整理
|
| 12 |
+
- 完整研究報告生成
|
| 13 |
|
| 14 |
+
**詳細說明請參考:[功能詳述](FEATURES.md#深度研究代理)**
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
+
### 📧 智能郵件助手 (Email Agent)
|
| 17 |
+
- AI 自動生成郵件草稿
|
| 18 |
+
- Gmail API 整合(避免垃圾郵件分類)
|
| 19 |
+
- 支援中英文郵件
|
| 20 |
+
- AI 反思評估與自動改進
|
| 21 |
+
- 可編輯草稿後發送
|
| 22 |
|
| 23 |
+
**詳細說明請參考:[功能詳述](FEATURES.md#智能郵件助手)**
|
| 24 |
+
**設置指南請參考:[Gmail API 設置](GMAIL_API_SETUP.md)**
|
|
|
|
| 25 |
|
| 26 |
+
### 📅 智能行事曆管理 (Calendar Agent)
|
| 27 |
+
- AI 自動生成行事曆事件
|
| 28 |
+
- Google Calendar API 整合
|
| 29 |
+
- AI 反思評估與自動改進(最多 3 輪迭代)
|
| 30 |
+
- Google Maps 地點驗證與標準化
|
| 31 |
+
- 自動計算交通時間與建議出發時間
|
| 32 |
+
- 支援創建、更新、刪除事件
|
| 33 |
|
| 34 |
+
**詳細說明請參考:[功能詳述](FEATURES.md#智能行事曆管理)**
|
| 35 |
+
**Google Maps 整合說明請參考:[Google Maps 整合](GOOGLE_MAPS_INTEGRATION.md)**
|
|
|
|
|
|
|
|
|
|
| 36 |
|
| 37 |
+
### 📊 研究工具集
|
| 38 |
+
- **股票查詢**:即時股票數據(財務狀況、市值、P/E 比等)
|
| 39 |
+
- **網路搜尋**:Tavily API 整合,獲取最新資訊
|
| 40 |
+
- **PDF 知識庫**:RAG 系統,向量化語義搜尋(目前包含 "Tree of Thoughts" 論文)
|
| 41 |
|
| 42 |
+
## 🛠️ 技術特色
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
|
| 44 |
+
- **本地 MLX 模型**:使用 Qwen2.5-Coder-7B-Instruct-4bit,保護隱私,無需 API 金鑰
|
| 45 |
+
- **Groq API 備援**:自動切換到 Groq API(當本地模型不可用或額度用完時)
|
| 46 |
+
- **LangGraph 編排**:複雜的代理工作流程管理
|
| 47 |
+
- **Gradio Web 界面**:現代化、用戶友好的 Web UI,即時更新
|
| 48 |
+
- **模組化架構**:清晰、可擴展的代碼結構
|
| 49 |
+
- **外部 SSD 支援**:可配置模型緩存到外部 SSD(節省本地空間)
|
| 50 |
+
|
| 51 |
+
**詳細架構說明請參考:[系統架構](ARCHITECTURE.md)**
|
| 52 |
+
|
| 53 |
+
## 📋 系統需求
|
| 54 |
|
| 55 |
- Python >= 3.13
|
| 56 |
+
- macOS(MLX 支援)或 Linux
|
| 57 |
+
- Google Cloud 帳號(用於 Gmail/Calendar API - 可選,僅郵件/行事曆功能需要)
|
| 58 |
+
- Tavily API 金鑰(用於網路搜尋 - 可選,可在 `.env` 中配置)
|
| 59 |
+
- Google Maps API 金鑰(用於行事曆地點驗證 - 可選,可在 `.env` 中配置)
|
| 60 |
+
|
| 61 |
+
## 🛠️ 快速開始
|
| 62 |
+
|
| 63 |
+
### 1. 安裝依賴
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 64 |
|
| 65 |
```bash
|
| 66 |
+
# 使用 uv(推薦)
|
| 67 |
+
uv sync
|
| 68 |
+
|
| 69 |
+
# 或使用 pip
|
| 70 |
+
pip install -e .
|
| 71 |
```
|
| 72 |
|
| 73 |
+
### 2. 環境變數配置
|
|
|
|
|
|
|
| 74 |
|
| 75 |
+
在專案根目錄創建 `.env` 文件:
|
| 76 |
|
| 77 |
+
```env
|
| 78 |
+
# 可選:Groq API(用於更快的推理)
|
| 79 |
+
GROQ_API_KEY=your_groq_api_key_here
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
|
| 81 |
+
# 可選:Tavily API(用於網路搜尋)
|
| 82 |
+
TAVILY_API_KEY=your_tavily_api_key_here
|
| 83 |
|
| 84 |
+
# 可選:Google Maps API(用於行事曆地點驗證)
|
| 85 |
+
NORMAL_GOOGLE_MAPS_API_KEY=your_google_maps_api_key_here
|
|
|
|
| 86 |
|
| 87 |
+
# 可選:用戶常用位置(用於計算交通時間)
|
| 88 |
+
USER_HOME_ADDRESS=台北市信義區信義路五段7號
|
| 89 |
+
USER_OFFICE_ADDRESS=台北市大安區敦化南路二段216號
|
| 90 |
|
| 91 |
+
# 可選:Gmail/Calendar API 憑證文件路徑
|
| 92 |
+
GMAIL_CREDENTIALS_FILE=credentials.json
|
| 93 |
+
GMAIL_TOKEN_FILE=token.json
|
| 94 |
+
CALENDAR_CREDENTIALS_FILE=credentials.json
|
| 95 |
+
CALENDAR_TOKEN_FILE=token.json
|
| 96 |
+
```
|
| 97 |
|
| 98 |
+
**詳細配置說明請參考:[配置指南](CONFIGURATION.md)**
|
| 99 |
|
| 100 |
+
### 3. 準備數據(可選)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
|
| 102 |
+
- 將 PDF 文件放在 `data/` 目錄
|
| 103 |
+
- 系統預設使用 `data/Tree_of_Thoughts.pdf`
|
| 104 |
+
- 可在 `deep_agent_rag/config.py` 中修改路徑
|
| 105 |
|
| 106 |
+
### 4. 設置 API(可選)
|
|
|
|
|
|
|
| 107 |
|
| 108 |
+
- **Gmail API**:參考 [Gmail API 設置指南](GMAIL_API_SETUP.md)
|
| 109 |
+
- **Google Calendar API**:與 Gmail API 共用相同的 OAuth2 憑證
|
| 110 |
+
- **Google Maps API**:參考 [Google Maps 整合說明](GOOGLE_MAPS_INTEGRATION.md)
|
| 111 |
|
| 112 |
+
### 5. 啟動應用
|
| 113 |
|
| 114 |
+
```bash
|
| 115 |
+
python Deep_Agent_Gradio_RAG_localLLM_main.py
|
| 116 |
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
|
| 118 |
+
Gradio 界面將在以下地址可用:
|
| 119 |
+
- 本地:`http://localhost:7860`
|
| 120 |
+
- 網路:`http://0.0.0.0:7860`
|
|
|
|
| 121 |
|
| 122 |
+
## 🎯 使用指南
|
|
|
|
|
|
|
|
|
|
| 123 |
|
| 124 |
+
### 深度研究代理
|
|
|
|
|
|
|
|
|
|
| 125 |
|
| 126 |
+
1. 切換到 **"🔍 Deep Research Agent"** 標籤
|
| 127 |
+
2. 輸入研究問題
|
| 128 |
+
3. 點擊 **"🔍 開始研究"**
|
| 129 |
+
4. 查看即時更新:
|
| 130 |
+
- **當前狀態**:顯示正在執行的節點
|
| 131 |
+
- **任務列表**:顯示研究計劃與進度
|
| 132 |
+
- **研究筆記**:即時研究過程筆記
|
| 133 |
+
- **最終報告**:完整研究報告(逐句流式顯示)
|
| 134 |
|
| 135 |
+
**使用範例請參考:[功能詳述](FEATURES.md#使用範例)**
|
|
|
|
|
|
|
| 136 |
|
| 137 |
+
### 郵件工具
|
| 138 |
|
| 139 |
+
1. 切換到 **"📧 Email Tool"** 標籤
|
| 140 |
+
2. 輸入郵件提示(例如:"寫一封感謝信")
|
| 141 |
+
3. 輸入收件人郵箱
|
| 142 |
+
4. 點擊 **"📝 生成郵件草稿"**
|
| 143 |
+
5. 查看 AI 反思評估結果(如有改進建議)
|
| 144 |
+
6. 檢查並編輯生成的主題和正文
|
| 145 |
+
7. 點擊 **"📧 發送郵件"** 發送
|
| 146 |
|
| 147 |
+
**詳細使用說明請參考:[功能詳述](FEATURES.md#智能郵件助手)**
|
|
|
|
|
|
|
| 148 |
|
| 149 |
+
### 行事曆工具
|
|
|
|
|
|
|
| 150 |
|
| 151 |
+
1. 切換到 **"📅 Calendar Tool"** 標籤
|
| 152 |
+
2. 使用快速選擇按鈕或輸入完整事件提示
|
| 153 |
+
3. 點擊 **"📝 生成事件草稿"**
|
| 154 |
+
4. 查看 AI 反思評估結果和地點驗證資訊
|
| 155 |
+
5. 如有缺失資訊,系統會顯示下拉選單供選擇
|
| 156 |
+
6. 檢查並修改事件內容
|
| 157 |
+
7. 點擊 **"創建事件"** 確認
|
| 158 |
|
| 159 |
+
**詳細使用說明請參考:[功能詳述](FEATURES.md#智能行事曆管理)**
|
| 160 |
|
| 161 |
+
## 🏗️ 專案結構
|
| 162 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
```
|
| 164 |
+
Deep_Agentic_AI_Tool/
|
| 165 |
+
├── deep_agent_rag/ # 主套件
|
| 166 |
+
│ ├── agents/ # 代理節點
|
| 167 |
+
│ │ ├── planner.py # 任務規劃節點
|
| 168 |
+
│ │ ├── researcher.py # 研究執行節點
|
| 169 |
+
│ │ ├── note_taker.py # 筆記整理節點
|
| 170 |
+
│ │ ├── reporter.py # 最終報告生成
|
| 171 |
+
│ │ ├── email_agent.py # 郵件生成代理
|
| 172 |
+
│ │ ├── email_reflection_agent.py # 郵件反思代理
|
| 173 |
+
│ │ ├── calendar_agent.py # 行事曆事件生成代理
|
| 174 |
+
│ │ ├── calendar_reflection_agent.py # 行事曆反思代理
|
| 175 |
+
│ │ └── state.py # 狀態定義
|
| 176 |
+
│ ├── graph/ # LangGraph 編排
|
| 177 |
+
│ │ └── agent_graph.py # 圖表構建與路由
|
| 178 |
+
│ ├── models/ # 模型包裝器
|
| 179 |
+
│ │ └── mlx_chat_model.py # MLX 模型整合
|
| 180 |
+
│ ├── rag/ # RAG 系統
|
| 181 |
+
│ │ └── rag_system.py # PDF 載入與檢索
|
| 182 |
+
│ ├── tools/ # 工具定義
|
| 183 |
+
│ │ ├── agent_tools.py # 股票、網路搜尋、PDF 工具
|
| 184 |
+
│ │ ├── email_tool.py # 郵件發送工具
|
| 185 |
+
│ │ ├── calendar_tool.py # 行事曆管理工具
|
| 186 |
+
│ │ └── googlemaps_tool.py # Google Maps 整合工具
|
| 187 |
+
│ ├── ui/ # 用戶界面
|
| 188 |
+
│ │ └── gradio_interface.py # Gradio Web UI
|
| 189 |
+
│ ├── utils/ # 工具函數
|
| 190 |
+
│ │ └── llm_utils.py # LLM 實例管理
|
| 191 |
+
│ └── config.py # 配置
|
| 192 |
+
├── data/ # 數據目錄
|
| 193 |
+
│ └── Tree_of_Thoughts.pdf
|
| 194 |
+
├── Deep_Agent_Gradio_RAG_localLLM_main.py # 主入口點
|
| 195 |
+
├── main.py # 簡單入口點
|
| 196 |
+
├── pyproject.toml # 專案依賴
|
| 197 |
+
└── README.md # 本文件
|
| 198 |
```
|
| 199 |
|
| 200 |
+
**詳細架構說明請參考:[系統架構](ARCHITECTURE.md)**
|
|
|
|
|
|
|
|
|
|
|
|
|
| 201 |
|
| 202 |
+
## ⚙️ 配置
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 203 |
|
| 204 |
+
主要配置選項在 `deep_agent_rag/config.py`:
|
| 205 |
|
| 206 |
+
- **MLX 模型設定**:模型 ID、最大 tokens、溫度
|
| 207 |
+
- **RAG 設定**:PDF 路徑、嵌入模型、分塊大小
|
| 208 |
+
- **代理設定**:最大迭代次數、反思迭代次數
|
| 209 |
+
- **API 設定**:Groq、Gmail、Calendar、Google Maps
|
| 210 |
+
- **外部 SSD 路徑**:模型緩存目錄
|
| 211 |
|
| 212 |
+
**詳細配置說明請參考:[配置指南](CONFIGURATION.md)**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 213 |
|
| 214 |
+
## 🔧 開發指南
|
| 215 |
|
| 216 |
+
### 添加新工具
|
| 217 |
|
| 218 |
+
1. 在 `deep_agent_rag/tools/` 中創建新工具函數
|
| 219 |
+
2. 使用 `@tool` 裝飾器
|
| 220 |
+
3. 在 `get_tools_list()` 中添加工具
|
| 221 |
+
4. 代理會自動發現並使用新工具
|
| 222 |
|
| 223 |
+
### 修改代理邏輯
|
|
|
|
|
|
|
| 224 |
|
| 225 |
+
- **規劃邏輯**:編輯 `deep_agent_rag/agents/planner.py`
|
| 226 |
+
- **研究邏輯**:編輯 `deep_agent_rag/agents/researcher.py`
|
| 227 |
+
- **報告生成**:編輯 `deep_agent_rag/agents/reporter.py`
|
| 228 |
|
| 229 |
+
### 自定義 UI
|
| 230 |
|
| 231 |
+
編輯 `deep_agent_rag/ui/gradio_interface.py` 修改 Web 界面。
|
| 232 |
|
| 233 |
+
**詳細開發指南請參考:[系統架構](ARCHITECTURE.md#開發指南)**
|
| 234 |
|
| 235 |
+
## 📦 主要依賴
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 236 |
|
| 237 |
+
- **LangChain & LangGraph**:代理框架與工作流程管理
|
| 238 |
+
- **MLX/MLX-LM**:本地模型推理(Apple Silicon 優化)
|
| 239 |
+
- **Gradio**:Web 界面
|
| 240 |
+
- **ChromaDB**:RAG 向量數據庫
|
| 241 |
+
- **Tavily**:網路搜尋 API
|
| 242 |
+
- **yfinance**:股票數據檢索
|
| 243 |
+
- **Google API Client**:Gmail/Calendar API 整合
|
| 244 |
+
- **googlemaps**:Google Maps API 整合
|
| 245 |
|
| 246 |
+
完整依賴列表請參考 `pyproject.toml`。
|
| 247 |
|
| 248 |
+
## 🐛 故障排除
|
|
|
|
| 249 |
|
| 250 |
+
### MLX 模型問題
|
| 251 |
+
- **模型無法載入**:確保有足夠的磁碟空間和記憶體
|
| 252 |
+
- **推理速度慢**:這是本地模型的正常現象,可考慮使用 Groq API 獲得更快結果
|
| 253 |
|
| 254 |
+
### Groq API 問題
|
| 255 |
+
- **額度用完**:系統會自動切換到本地 MLX 模型
|
| 256 |
+
- **API 錯誤**:檢查 `.env` 文件中的 `GROQ_API_KEY`
|
| 257 |
|
| 258 |
+
### RAG 系統問題
|
| 259 |
+
- **PDF 找不到**:確保 PDF 文件存在於 `config.py` 中指定的路徑
|
| 260 |
+
- **嵌入模型錯誤**:系統會嘗試重新下載模型(如果緩存損壞)
|
| 261 |
|
| 262 |
+
### Gmail/Calendar API 問題
|
| 263 |
+
- **授權錯誤**:刪除 `token.json` 並���新授權
|
| 264 |
+
- **憑證找不到**:確保 `credentials.json` 在專案根目錄
|
| 265 |
+
- 詳細說明請參考 [Gmail API 設置指南](GMAIL_API_SETUP.md)
|
| 266 |
|
| 267 |
+
### Google Maps API 問題
|
| 268 |
+
- **地點驗證失敗**:檢查 API 金鑰是否正確設置
|
| 269 |
+
- **交通時間無法計算**:確保設置了 `USER_HOME_ADDRESS` 或 `USER_OFFICE_ADDRESS`
|
| 270 |
+
- 詳細說明請參考 [Google Maps 整合說明](GOOGLE_MAPS_INTEGRATION.md)
|
| 271 |
|
| 272 |
+
## 📚 相關文檔
|
|
|
|
|
|
|
| 273 |
|
| 274 |
+
- **[功能詳述](FEATURES.md)** - 所有功能的詳細說明與使用範例
|
| 275 |
+
- **[系統架構](ARCHITECTURE.md)** - 系統架構、工作流程與開發指南
|
| 276 |
+
- **[配置指南](CONFIGURATION.md)** - 完整的配置選項說明
|
| 277 |
+
- **[Gmail API 設置](GMAIL_API_SETUP.md)** - Gmail API 設置步驟
|
| 278 |
+
- **[Google Maps 整合](GOOGLE_MAPS_INTEGRATION.md)** - Google Maps API 整合說明
|
| 279 |
|
| 280 |
+
## 📝 授權
|
| 281 |
|
| 282 |
+
[添加您的授權資訊]
|
| 283 |
|
| 284 |
+
## 🤝 貢獻
|
| 285 |
|
| 286 |
+
[添加貢獻指南]
|
| 287 |
|
| 288 |
+
## 📧 聯絡
|
| 289 |
|
| 290 |
+
[添加聯絡資訊]
|
| 291 |
|
| 292 |
+
## 🙏 致謝
|
|
|
|
|
|
|
|
|
|
| 293 |
|
| 294 |
+
- **LangChain & LangGraph**:優秀的代理框架
|
| 295 |
+
- **MLX Team**:高效的本地模型推理
|
| 296 |
+
- **Qwen Team**:Qwen2.5 模型
|
| 297 |
+
- **Jina AI**:嵌入模型
|
| 298 |
|
| 299 |
+
---
|
| 300 |
|
| 301 |
+
**注意**:本系統主要設計用於 macOS(Apple Silicon)以獲得最佳 MLX 性能。Linux 支援可用,但性能特徵可能不同。
|