wenlianghuang commited on
Commit
af73daa
·
1 Parent(s): edc640e

fix and build spec document

Browse files
Files changed (6) hide show
  1. ARCHITECTURE.md +502 -0
  2. CONFIGURATION.md +363 -0
  3. FEATURES.md +409 -0
  4. GMAIL_API_SETUP.md +26 -0
  5. GOOGLE_MAPS_INTEGRATION.md +2 -0
  6. 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
- A comprehensive deep research agent system with RAG (Retrieval-Augmented Generation) capabilities, built with LangGraph and featuring local MLX model support. This system provides intelligent research assistance with stock queries, web search, PDF knowledge base retrieval, and email generation capabilities.
4
 
5
- ## 🚀 Features
6
 
7
- ### Core Capabilities
 
 
 
 
 
8
 
9
- - **🔍 Deep Research Agent**: Intelligent multi-step research planning and execution
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
- - **📊 Stock Information Query**: Real-time stock data retrieval
16
- - Company financial data and operational status
17
- - Market cap, P/E ratio, revenue growth
18
- - Business summaries and analysis
 
 
19
 
20
- - **🌐 Web Search**: Internet search for latest news and information
21
- - Powered by Tavily Search API
22
- - Retrieves up-to-date information from the web
23
 
24
- - **📚 PDF Knowledge Base**: RAG system for document retrieval
25
- - Vector-based semantic search
26
- - Currently includes "Tree of Thoughts" research paper
27
- - Extensible to other PDF documents
 
 
 
28
 
29
- - **📧 Email Agent**: AI-powered email generation and sending
30
- - Automatic email draft generation from prompts
31
- - Gmail API integration (avoids spam classification)
32
- - Support for both Chinese and English emails
33
- - Editable drafts before sending
34
 
35
- ### Technical Highlights
 
 
 
36
 
37
- - **Local MLX Models**: Privacy-preserving local inference using Qwen2.5-Coder-7B-Instruct-4bit
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
- ## 📋 Prerequisites
 
 
 
 
 
 
 
 
 
44
 
45
  - Python >= 3.13
46
- - macOS (for MLX support) or Linux
47
- - Google Cloud account (for Gmail API - optional, only needed for email features)
48
- - Tavily API key (for web search - optional, can be configured in `.env`)
49
-
50
- ## 🛠️ Installation
51
-
52
- 1. **Clone the repository**:
53
- ```bash
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
- python Deep_Agent_Gradio_RAG_localLLM_main.py
 
 
 
 
97
  ```
98
 
99
- The Gradio interface will be available at:
100
- - Local: `http://localhost:7860`
101
- - Network: `http://0.0.0.0:7860`
102
 
103
- ### Using the Deep Research Agent
104
 
105
- 1. Navigate to the **"🔍 Deep Research Agent"** tab
106
- 2. Enter your research question in the input box
107
- 3. Click **"🔍 開始研究"** (Start Research)
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
- #### Example Queries
 
115
 
116
- - **Academic/Theory Questions**:
117
- - "Explain Tree of Thoughts and deeply compare it with Chain of Thought"
118
- - "Analyze the advantages and disadvantages of the Tree of Thoughts method"
119
 
120
- - **Stock-Related Questions**:
121
- - "Compare Microsoft (MSFT) and Google (GOOGL) in the AI field"
122
- - "Query Apple (AAPL) financial status and recent developments"
123
 
124
- - **Combined Questions**:
125
- - "Compare Microsoft (MSFT) and Google (GOOGL) in AI, incorporating Tree of Thoughts methodology"
 
 
 
 
126
 
127
- ### Using the Email Tool
128
 
129
- 1. Navigate to the **"📧 Email Tool"** tab
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
- #### Example Email Prompts
 
 
137
 
138
- - "Write a thank you letter for help with the project"
139
- - "Invite someone to next week's product launch"
140
- - "Ask about project progress and provide updates"
141
 
142
- ## 🏗️ Architecture
 
 
143
 
144
- ### Project Structure
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
- 1. **Planner Node**: Analyzes the query and decomposes it into research tasks
183
- - Detects query type (academic, stock-related, general)
184
- - Generates appropriate task list based on query type
185
- - Avoids unnecessary tool calls
186
 
187
- 2. **Research Agent Node**: Executes research tasks
188
- - Dynamically selects and calls appropriate tools
189
- - Can call multiple tools in sequence
190
- - Maintains conversation context
191
 
192
- 3. **Tool Node**: Executes tool calls
193
- - Stock query tool
194
- - Web search tool
195
- - PDF knowledge base tool
196
 
197
- 4. **Note-Taking Node**: Consolidates research findings
198
- - Summarizes tool results
199
- - Adds to research notes
 
 
 
 
 
200
 
201
- 5. **Final Report Node**: Generates comprehensive report
202
- - Synthesizes all research notes
203
- - Creates structured final report
204
 
205
- ### LLM Configuration
206
 
207
- The system supports multiple LLM backends with automatic fallback:
 
 
 
 
 
 
208
 
209
- 1. **Primary**: Groq API (fast, requires API key)
210
- - Model: `llama-3.3-70b-versatile`
211
- - Automatically used if `GROQ_API_KEY` is set
212
 
213
- 2. **Fallback**: Local MLX Model (privacy-preserving, no API key needed)
214
- - Model: `mlx-community/Qwen2.5-Coder-7B-Instruct-4bit`
215
- - Automatically used when Groq API is unavailable or quota exhausted
216
 
217
- The system automatically switches between backends based on availability.
 
 
 
 
 
 
218
 
219
- ## ⚙️ Configuration
220
 
221
- Key configuration options in `deep_agent_rag/config.py`:
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
- ### RAG Settings
231
- ```python
232
- PDF_PATH = "./data/Tree_of_Thoughts.pdf"
233
- EMBEDDING_MODEL = "jinaai/jina-embeddings-v3"
234
- CHUNK_SIZE = 1000
235
- CHUNK_OVERLAP = 200
236
- RETRIEVER_K = 3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
  ```
238
 
239
- ### Agent Settings
240
- ```python
241
- MAX_ITERATIONS = 5
242
- MAX_RESEARCH_ITERATIONS = 20
243
- ```
244
 
245
- ### Email Settings
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
- ## 🔧 Development
253
 
254
- ### Adding New Tools
 
 
 
 
255
 
256
- 1. Create a new tool function in `deep_agent_rag/tools/agent_tools.py`:
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
- 2. Add the tool to `get_tools_list()` in the same file
266
 
267
- 3. The agent will automatically discover and use the new tool
268
 
269
- ### Modifying Agent Logic
 
 
 
270
 
271
- - **Planning logic**: Edit `deep_agent_rag/agents/planner.py`
272
- - **Research logic**: Edit `deep_agent_rag/agents/researcher.py`
273
- - **Report generation**: Edit `deep_agent_rag/agents/reporter.py`
274
 
275
- ### Customizing UI
 
 
276
 
277
- Edit `deep_agent_rag/ui/gradio_interface.py` to modify the web interface.
278
 
279
- ## 📦 Dependencies
280
 
281
- Key dependencies (see `pyproject.toml` for complete list):
282
 
283
- - **LangChain**: Agent framework and tool integration
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
- ## 🐛 Troubleshooting
 
 
 
 
 
 
 
293
 
294
- ### MLX Model Issues
295
 
296
- - **Model not loading**: Ensure you have sufficient disk space and memory
297
- - **Slow inference**: This is normal for local models. Consider using Groq API for faster results
298
 
299
- ### Groq API Issues
 
 
300
 
301
- - **Quota exhausted**: The system automatically falls back to local MLX model
302
- - **API errors**: Check your `GROQ_API_KEY` in `.env` file
 
303
 
304
- ### RAG System Issues
 
 
305
 
306
- - **PDF not found**: Ensure the PDF file exists at the path specified in `config.py`
307
- - **Embedding model errors**: The system will attempt to re-download the model if cache is corrupted
 
 
308
 
309
- ### Gmail API Issues
 
 
 
310
 
311
- - **Authorization errors**: Delete `token.json` and re-authorize
312
- - **Credentials not found**: Ensure `credentials.json` is in the project root
313
- - See `GMAIL_API_SETUP.md` for detailed setup instructions
314
 
315
- ## 📝 License
 
 
 
 
316
 
317
- [Add your license information here]
318
 
319
- ## 🤝 Contributing
320
 
321
- [Add contribution guidelines here]
322
 
323
- ## 📧 Contact
324
 
325
- [Add contact information here]
326
 
327
- ## 🙏 Acknowledgments
328
 
329
- - **LangChain & LangGraph**: For the excellent agent framework
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
- **Note**: This system is designed to work primarily on macOS with Apple Silicon for optimal MLX performance. Linux support is available but may have different performance characteristics.
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
+ - macOSMLX 支援)或 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 支援可用,但性能特徵可能不同。