這個專案使用統一的 AI Provider 介面,可以輕鬆切換不同的 AI 服務,無需修改業務邏輯。
- AssemblyAI ⭐ 推薦(免費額度:每月 5 小時)
- OpenAI Whisper(備選)
- Groq ⭐ 推薦(免費額度,超快)
- Google Gemini(免費額度:每月 15 RPM)
- OpenAI GPT(備選,需要 credits)
- Hugging Face ⭐ 推薦(免費)
- OpenAI(備選,需要 credits)
- 前往 https://www.assemblyai.com/
- 註冊帳號(免費)
- 在 Dashboard 取得 API Key
- 免費額度:每月 5 小時
- 前往 https://console.groq.com/
- 註冊帳號(免費)
- 在 API Keys 頁面建立新的 Key
- 免費額度:有限,但通常足夠開發
- 前往 https://huggingface.co/settings/tokens
- 建立新的 Access Token
- 注意:API key 是可選的(有免費額度),但建議設定以獲得更好的 rate limits
在 .env.local 檔案中設定:
# 必須設定的(根據你選擇的 provider)
ASSEMBLYAI_API_KEY=your-assemblyai-key
GROQ_API_KEY=your-groq-key
HUGGINGFACE_API_KEY=your-huggingface-key # 可選,但建議設定
# 可選的(如果之後想切換到 OpenAI)
OPENAI_API_KEY=sk-proj-your-openai-key
# Provider 選擇(可選,不設定則使用預設值)
AI_TRANSCRIPTION_PROVIDER=assemblyai # 或 openai
AI_LLM_PROVIDER=groq # 或 openai, gemini
AI_EMBEDDING_PROVIDER=huggingface # 或 openai如果不設定環境變數,系統會使用以下預設值(都是免費/便宜的方案):
{
transcription: "assemblyai", // 每月 5 小時免費
llm: "groq", // 免費額度
embedding: "huggingface" // 免費
}在 .env.local 中設定:
AI_TRANSCRIPTION_PROVIDER=openai
AI_LLM_PROVIDER=openai
AI_EMBEDDING_PROVIDER=openaiimport { getAIManager } from "@/lib/ai/manager";
const aiManager = getAIManager();
// 使用統一的介面,無需關心底層 provider
const text = await aiManager.transcribe(audioFile);- AssemblyAI: 每月 5 小時免費
- Groq: 免費額度
- Hugging Face: 免費額度
- 總成本: $0/月(在免費額度內)
- AssemblyAI: $0.015/分鐘(約 $0.90/小時)
- Groq: 非常便宜(約 $0.05-0.59 / 1M tokens)
- Hugging Face: 免費額度通常足夠
- Whisper: $0.006/分鐘
- GPT-4o-mini: ~$0.15 / 1M input tokens
- GPT-4o: ~$2.50 / 1M input tokens
- Embeddings: $0.02 / 1M tokens
import { getAIManager } from "@/lib/ai/manager";
const aiManager = getAIManager();
const result = await aiManager.transcribe(audioFile);
console.log(result.text); // 轉錄的文字const result = await aiManager.generateEmbedding("Hello, world!");
console.log(result.embedding); // 向量陣列
console.log(result.model); // 使用的模型const analysis = await aiManager.analyzeTone("I'm feeling great today!");
console.log(analysis.tone); // "positive"
console.log(analysis.sentiment_score); // 0.8
console.log(analysis.emotionTags); // ["happy", "energetic"]const response = await aiManager.generateResponse([
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Hello!" }
]);
console.log(response.content); // AI 回應
console.log(response.tokens); // Token 使用量
console.log(response.cost); // 估算成本Hugging Face 的預設模型 (all-MiniLM-L6-v2) 產生 384 維的向量,而資料庫 schema 設定為 1536 維(OpenAI 的格式)。
解決方案:
- 使用 OpenAI embeddings(如果有多餘的 credits)
- 調整資料庫 schema 支援 384 或 768 維度
- 使用填充方法(不推薦,但可用於開發)
- ✅ 可以提交到 Git:
.env.local.example(不含真實 keys) - ❌ 絕對不要提交:
.env.local(包含真實 keys) - ✅ 確認 .gitignore: 已包含
.env*.local
Error: ASSEMBLYAI_API_KEY is not set
解決:在 .env.local 中設定對應的 API key
Error: Unknown transcription provider: xxx
解決:檢查 AI_TRANSCRIPTION_PROVIDER 環境變數是否正確
如果 Hugging Face API 返回 503 錯誤,表示模型正在載入。系統會自動重試,但可能需要等待幾秒到幾分鐘。