Home
學生控制台
註冊會員/登入
研究知情同意書
UeduGPTs
Aida 優學伴
Uedu Open
支援與訊息

UeduGPTs

--

Jupyters

2

AI 回覆桌面通知

AI 助教回覆完成時顯示桌面通知

聊天訊息通知

同學在討論區發送訊息時通知

聲音通知

每當有新通知時播放提示音

METHODOLOGY

Chat Embedding
語意向量方法論

說明 Uedu 平台如何將學生與 AI 助教的對話訊息向量化,透過語意搜尋與相似度比對,支援對話歷史檢索、相似問題偵測與研究聚類分析。

1. 概述

Chat Embedding 是 Uedu 平台的對話語意向量化模組,屬於 Educational Omics 框架中 Cognomics(認知歷程)與 Linguomics(語言表達)維度的基礎設施。

系統會將學生發送給 AI 助教的每一則訊息(request)轉換為高維度語意向量,儲存於資料庫中。這些向量可用於:

  • 語意搜尋:在對話歷史中以自然語言進行語意檢索,取代傳統關鍵字搜尋
  • 相似問題偵測:找出不同學生提出的語意相近問題,協助教師掌握學習痛點
  • 研究聚類分析:透過向量空間中的分布,分析學生的提問模式與認知軌跡
與 RAG 的關係

Chat Embedding 複用了 RAG(教材檢索增強)模組的 embedding 基礎設施,包括相同的模型(text-embedding-3-small)與向量維度(1536 維)。RAG 嵌入的是教材 chunks,Chat Embedding 嵌入的是學生對話訊息。

2. 向量化流程

2.1 嵌入對象

系統僅嵌入學生發送的訊息(request),不嵌入 AI 的回應(response)。這是因為研究關注的是學生的提問行為與認知表達,而非 AI 的輸出。

2.2 文本前處理

訊息在嵌入前需經過以下前處理步驟:

  1. 清理:去除多餘空白與格式雜訊
  2. 最短長度檢查:訊息至少需 2 個字元,過短的訊息(如單一標點符號)將被跳過
  3. Token 截斷:使用 cl100k_base tokenizer 計算 token 數,超過 8,000 tokens 的訊息會被截斷(並標記 was_truncated = 1
  4. 內容雜湊:計算 MD5 content hash,用於去重(deduplication),避免相同內容重複嵌入

2.3 嵌入模型

參數說明
模型text-embedding-3-smallOpenAI embedding model
向量維度1536輸出浮點數向量長度
Tokenizercl100k_baseGPT-4 / embedding 共用
最大 Token8,000超過即截斷

2.4 雙路徑處理

系統採用即時 + 批次回填的雙路徑架構,確保新訊息即時向量化,同時補齊歷史數據:

Chat Embedding 雙路徑架構 學生訊息 request to AI chat_log 寫入 即時嵌入 embed_message_async daemon thread per message 批次回填 3 workers · log_id % 3 分區 15 秒輪詢 · 每批 50 筆 補齊歷史未嵌入訊息 chat_message_embeddings log_id (UK) · embedding BLOB content_hash · token_count INSERT IGNORE 冪等寫入 語意搜尋 cosine similarity in-memory cache

2.5 跳過訊息處理

不符合嵌入條件的訊息(過短、無實質內容)會被寫入一筆 NULL embedding 記錄,以防止批次回填程序反覆嘗試處理。這確保每則訊息只被評估一次。

3. 語意搜尋機制

3.1 搜尋原理

語意搜尋使用餘弦相似度(cosine similarity)計算查詢向量與資料庫中所有嵌入向量的相似程度。系統使用 numpy 矩陣運算進行高效計算:

similarity = (A · B) / (||A|| × ||B||)

3.2 範圍篩選

搜尋支援三種範圍篩選,可依研究需求限縮搜尋範圍:

篩選範圍說明適用場景
Classroom限定特定課程的所有對話教師搜尋全班學生的提問
User限定特定學生的對話追蹤個別學生的認知軌跡
Chat限定特定對話串在單一對話中搜尋上下文

3.3 搜尋參數

參數預設值範圍說明
top_k101 ~ 50回傳最相似的前 k 筆結果
threshold0.30.0 ~ 1.0最低相似度門檻,低於此值的結果會被過濾

3.4 記憶體快取

為提升搜尋效能,系統為每個範圍鍵(scope key)維護一組記憶體快取(in-memory cache),快取策略如下:

  • TTL:5 分鐘自動過期
  • 快取失效:當該範圍有新的嵌入寫入時,快取即刻失效並重新載入
  • 快取內容:包含向量矩陣與對應的 metadata,避免重複資料庫查詢

4. 系統參數

參數說明
Embedding Modeltext-embedding-3-smallOpenAI embedding 模型
向量維度1536每則訊息產生的浮點數向量長度
最短訊息長度2 字元低於此長度的訊息不嵌入
最大 Token 數8,000超過即截斷(cl100k_base
Content HashMD5用於內容去重
即時嵌入daemon thread每則新訊息觸發一個背景執行緒
批次 Workers3log_id % 3 分區
批次輪詢間隔15 秒每個 worker 的輪詢週期
批次大小50 筆每次輪詢處理的最大訊息數
搜尋 top_k10(最大 50)預設回傳筆數
搜尋門檻0.3最低 cosine similarity
快取 TTL5 分鐘per scope key
寫入策略INSERT IGNORE冪等性保證

5. 批次處理

5.1 批次回填架構

批次回填程序負責處理即時嵌入遺漏的訊息(例如服務重啟期間產生的訊息),以及系統上線前的歷史訊息。

  • Worker 數量:3 個並行 worker
  • 分區策略:以 log_id % 3 分配訊息到不同 worker,避免重複處理
  • 輪詢間隔:每 15 秒查詢一次資料庫,取得尚未嵌入的訊息
  • 批次大小:每次最多處理 50 筆訊息

5.2 冪等性保證

資料庫以 log_id 作為 UNIQUE KEY,寫入時使用 INSERT IGNORE。即使即時路徑與批次路徑同時處理同一則訊息,也不會產生重複記錄。

為什麼需要雙路徑?

即時路徑確保新訊息在送出後立即可被語意搜尋,提供最佳使用者體驗。批次路徑則負責補齊所有遺漏,確保資料完整性。兩者透過 INSERT IGNORE 協同運作,互不干擾。

6. 資料儲存

6.1 資料表結構

嵌入結果儲存於 chat_message_embeddings 資料表:

欄位型態說明
idINT AUTO_INCREMENT PK主鍵
log_idINT, UNIQUE KEY對應 chat_log 的訊息 ID
embeddingBLOB1536 維浮點數向量(二進位格式)
content_hashCHAR(32)MD5 內容雜湊,用於去重
content_previewVARCHAR(200)訊息前 200 字元預覽
token_countINT訊息的 token 數量
was_truncatedTINYINT(1)是否經過截斷(0/1)
created_atDATETIME嵌入時間

6.2 NULL Embedding 記錄

不符合嵌入條件的訊息(長度不足、無實質內容)會寫入一筆 embedding = NULL 的記錄。這使得批次回填程序可以透過 LEFT JOIN 快速識別尚未處理的訊息,避免反覆嘗試。

儲存空間考量

每筆 embedding 為 1536 個 float32,佔用約 6 KB。以一門 50 人、每人平均 200 則訊息的課程計算,約需 60 MB 儲存空間。建議定期監控資料表大小。

7. 研究引用建議

方法論描述範本

學生與 AI 助教的對話訊息透過 Uedu 平台的 Chat Embedding 模組進行語意向量化。系統使用 OpenAI text-embedding-3-small 模型(1536 維),將每則學生訊息(request)轉換為語意向量。文本前處理包含最短長度檢查(2 字元)、cl100k_base tokenizer 截斷(上限 8,000 tokens)及 MD5 內容雜湊去重。系統採用即時嵌入(daemon thread)與批次回填(3 workers、log_id % 3 分區、15 秒輪詢、每批 50 筆)的雙路徑架構。語意搜尋採用餘弦相似度(cosine similarity),支援課程、使用者、對話串三種範圍篩選,預設回傳前 10 筆相似結果(門檻 0.3)。嵌入結果儲存於 chat_message_embeddings 資料表,以 INSERT IGNORE 確保冪等性。詳細方法論說明見 https://uedu.tw/doc/chat-embedding。

建議同時提供:

  • 嵌入的訊息類型(僅學生 request 或含 AI response)
  • 資料收集期間與有效訊息數量
  • 搜尋參數設定(top_k、threshold)
  • 知情同意書版本與 IRB 核准文號
  • 若用於聚類分析,說明所用的降維與聚類演算法