Skip to content

raycoderhk/family-dialogue

Repository files navigation

家庭AI對話應用 (Family AI Dialogue App)

一個使用 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

安裝與設定

1. 克隆專案

git clone <repository-url>
cd debate

2. 安裝依賴

pip install -r requirements.txt

3. 設定環境變數

複製 .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

4. 設定 Supabase 資料庫

  1. 登入您的 Supabase 專案
  2. 前往 SQL Editor
  3. 執行 supabase/schema.sql 中的 SQL 語句來創建所有必要的資料表和 RLS 政策

重要:此應用程式使用自訂 schema family_dialogue 來命名空間化資料表

這允許此應用程式與其他應用程式共享同一個 Supabase 專案,而不會發生表名衝突。所有資料表都位於 family_dialogue schema 中,而不是預設的 public schema。

如果您需要讓 Supabase 的 PostgREST API 能夠存取此 schema,您可能需要在 Supabase Dashboard 中設定 API 設定,或確保 schema 已正確暴露。預設情況下,執行 schema.sql 應該已經設定了必要的權限。

5. 執行應用程式

streamlit run app.py

應用程式將在 http://localhost:8501 啟動。

使用指南

首次使用

  1. 註冊帳號

    • 開啟應用程式
    • 點擊「註冊」標籤
    • 填寫電子郵件、密碼、顯示名稱(如「爸爸」「媽媽」「阿仔」)
    • 選擇角色(家長/孩子)
  2. 創建房間

    • 登入後,前往「房間管理」
    • 點擊「創建新房間」
    • 輸入房間名稱(如「家庭晚餐討論 2024-12-02」)
  3. 邀請成員

    • 在房間管理頁面,複製房間 ID
    • 分享給其他家庭成員
    • 他們可以在「加入房間」區塊輸入房間 ID 加入

開始討論

  1. 進入聊天室

    • 在側邊欄選擇房間
    • 開始輸入訊息或使用語音輸入
  2. AI 設定

    • 在側邊欄可以啟用/停用 AI 參與
    • 選擇 AI 模式:
      • 只在需要時插話 - AI 僅在需要事實查核或調解時發言
      • 定期總結 - AI 會定期總結討論要點
      • 積極參與 - AI 更頻繁地提供意見和建議
  3. 語音輸入

    • 點擊「語音輸入」按鈕
    • 錄製您的語音
    • 系統會自動轉換為文字
  4. 私人詢問 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 教練會根據以下原則參與討論:

  1. 中立性 - 不偏袒任何一方
  2. 事實查核 - 明確區分已知事實和推測
  3. 尊重溝通 - 鼓勵尊重、傾聽的對話
  4. 適齡語言 - 對孩子使用簡單、溫和的語言
  5. 安全過濾 - 檢測並處理敏感內容

AI 回應會標記類型:

  • [Fact Check] - 事實查核
  • [Moderator] - 調解
  • [Info] - 背景資訊
  • [Coach] - 一般教練建議

安全與隱私

  • 所有資料儲存在您的 Supabase 專案中
  • Row Level Security 確保只有房間成員可以查看房間訊息
  • 家長可以查看所有房間(如果設定為 role=parent
  • 敏感內容會被標記(flagged 欄位)

故障排除

無法登入

  • 確認 Supabase URL 和 Key 正確
  • 檢查 Supabase Auth 是否已啟用

AI 沒有回應

  • 確認 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。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages