一個使用 Streamlit、DeepSeek API 和 Supabase 構建的家庭討論與辯論平台,幫助家庭成員以安全、有結構、有事實基礎的方式進行討論。
- 💬 多房間聊天系統 - 創建多個討論房間,邀請家庭成員參與
- 🤖 AI 教練參與 - AI 作為獨立參與者,提供事實查核、背景資訊、觀點驗證和溫和調解
- 🎤 語音輸入 - 支援語音轉文字輸入(使用 Whisper)
- 🏆 積分系統 - 追蹤尊重發言和傾聽行為,鼓勵積極參與
- 📊 討論報告 - AI 自動生成討論總結,包括共識點和分歧點
- 🔒 隱私保護 - 使用 Supabase Row Level Security 確保房間資料僅成員可見
- 👥 即時更新 - 即時顯示新訊息和成員在線狀態
- 前端: Streamlit (Python)
- AI: DeepSeek API (OpenAI-compatible)
- 資料庫: Supabase (PostgreSQL + Realtime)
- 認證: Supabase Auth
- 語音轉文字: OpenAI Whisper
git clone <repository-url>
cd debatepip install -r requirements.txt複製 .env.example 並創建 .env 檔案:
cp .env.example .env編輯 .env 檔案,填入您的 API 金鑰:
DEEPSEEK_API_KEY=your_deepseek_api_key_here
SUPABASE_URL=your_supabase_url_here
SUPABASE_KEY=your_supabase_key_here
DEEPSEEK_BASE_URL=https://api.deepseek.com
- 登入您的 Supabase 專案
- 前往 SQL Editor
- 執行
supabase/schema.sql中的 SQL 語句來創建所有必要的資料表和 RLS 政策
重要:此應用程式使用自訂 schema family_dialogue 來命名空間化資料表
這允許此應用程式與其他應用程式共享同一個 Supabase 專案,而不會發生表名衝突。所有資料表都位於 family_dialogue schema 中,而不是預設的 public schema。
如果您需要讓 Supabase 的 PostgREST API 能夠存取此 schema,您可能需要在 Supabase Dashboard 中設定 API 設定,或確保 schema 已正確暴露。預設情況下,執行 schema.sql 應該已經設定了必要的權限。
streamlit run app.py應用程式將在 http://localhost:8501 啟動。
-
註冊帳號
- 開啟應用程式
- 點擊「註冊」標籤
- 填寫電子郵件、密碼、顯示名稱(如「爸爸」「媽媽」「阿仔」)
- 選擇角色(家長/孩子)
-
創建房間
- 登入後,前往「房間管理」
- 點擊「創建新房間」
- 輸入房間名稱(如「家庭晚餐討論 2024-12-02」)
-
邀請成員
- 在房間管理頁面,複製房間 ID
- 分享給其他家庭成員
- 他們可以在「加入房間」區塊輸入房間 ID 加入
-
進入聊天室
- 在側邊欄選擇房間
- 開始輸入訊息或使用語音輸入
-
AI 設定
- 在側邊欄可以啟用/停用 AI 參與
- 選擇 AI 模式:
- 只在需要時插話 - AI 僅在需要事實查核或調解時發言
- 定期總結 - AI 會定期總結討論要點
- 積極參與 - AI 更頻繁地提供意見和建議
-
語音輸入
- 點擊「語音輸入」按鈕
- 錄製您的語音
- 系統會自動轉換為文字
-
私人詢問 AI
- 勾選「只發給 AI(先私下詢問)」
- 您的訊息將只發送給 AI,不會顯示在公開聊天室
- 適合孩子先詢問 AI 再決定是否公開討論
- 積分排行: 在聊天室側邊欄查看成員積分
- 生成報告: 點擊「生成討論報告」按鈕,AI 會分析討論內容並生成總結
debate/
├── app.py # 主應用程式入口
├── config.py # 配置管理
├── requirements.txt # Python 依賴
├── .env # 環境變數(不提交到版本控制)
├── .env.example # 環境變數範本
├── supabase/
│ └── schema.sql # 資料庫架構
├── utils/
│ ├── supabase_client.py # Supabase 資料庫操作
│ ├── deepseek_client.py # DeepSeek API 整合
│ ├── auth.py # 認證輔助函數
│ └── ai_prompts.py # AI 提示詞模板
├── pages/
│ ├── chat.py # 聊天室頁面
│ ├── rooms.py # 房間管理頁面
│ └── topics.py # 主題庫頁面
└── README.md # 本文件
應用程式使用以下主要資料表:
users- 使用者資料rooms- 討論房間room_members- 房間成員關係messages- 聊天訊息topics- 討論主題庫user_scores- 使用者積分discussion_reports- 討論報告
所有資料表都啟用了 Row Level Security (RLS) 以確保資料隱私。
AI 教練會根據以下原則參與討論:
- 中立性 - 不偏袒任何一方
- 事實查核 - 明確區分已知事實和推測
- 尊重溝通 - 鼓勵尊重、傾聽的對話
- 適齡語言 - 對孩子使用簡單、溫和的語言
- 安全過濾 - 檢測並處理敏感內容
AI 回應會標記類型:
[Fact Check]- 事實查核[Moderator]- 調解[Info]- 背景資訊[Coach]- 一般教練建議
- 所有資料儲存在您的 Supabase 專案中
- Row Level Security 確保只有房間成員可以查看房間訊息
- 家長可以查看所有房間(如果設定為
role=parent) - 敏感內容會被標記(
flagged欄位)
- 確認 Supabase URL 和 Key 正確
- 檢查 Supabase Auth 是否已啟用
- 確認 DeepSeek API Key 正確
- 檢查網路連線
- 查看終端機的錯誤訊息
- 確認已安裝 Whisper:
pip install openai-whisper - 首次使用時,Whisper 會下載模型(需要一些時間)
- 目前使用輪詢機制(每 5 秒檢查一次)
- 未來版本將使用 Supabase Realtime 實現真正的即時更新
- Phase 1: MVP - 單房間聊天室
- Phase 2: 多房間 + 即時更新
- Phase 3: 語音輸入 + 積分系統
- 未來改進:真正的 Supabase Realtime 整合、更多 AI 模式、行動應用
本專案為開源專案,可自由使用和修改。
如有問題或建議,請提交 Issue 或 Pull Request。