第一步:取得您的 API 金鑰

API 金鑰是您存取本服務的唯一憑證。請妥善保管,切勿與他人分享。

  1. 前往 API 金鑰管理後台
  2. 使用您的東海大學帳號登入。
  3. 點擊「生成新的 API 金鑰」按鈕。
  4. 為您的金鑰命名以方便管理(例如:「論文研究」),並選擇您需要的模型權限。
  5. 成功建立後,請立即複製您的金鑰。請注意,為了安全起見,金鑰只會顯示一次。

第二步:發送您的第一個 API 請求

我們的 API 與 OpenAI API 格式相容,您可以輕易地將現有專案轉移至本服務。所有請求都需要在 HTTP Header 中包含您的 API 金鑰。

API Base URL: 請先登入以查看 API Base URL

macOS / Linux(Bash / Zsh)

export API_BASE_URL="https://llm.thu.edu.tw/v1"
export API_KEY="YOUR_API_KEY"

在終端執行上述指令後,重新打開您的工具或終端即可生效。

Windows(PowerShell)

$env:API_BASE_URL = "https://llm.thu.edu.tw/v1"
$env:API_KEY = "YOUR_API_KEY"

若要永久設定,可在系統環境變數中新增對應鍵值。

您可以使用 cURL 在終端機中快速測試 API。

curl https://llm.thu.edu.tw/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "GPT-OSS:120B",
    "messages": [
      {
        "role": "system",
        "content": "你是一個來自東海大學的有用助理。"
      },
      {
        "role": "user",
        "content": "請介紹東海大學的路思義教堂。"
      }
    ]
  }'

在您的 Python 專案中,我們推薦使用 requests 函式庫來進行 API 呼叫。

import os
import requests
import json

# 建議將 API 金鑰儲存在環境變數中
API_KEY = "YOUR_API_KEY"
API_BASE_URL = "https://llm.thu.edu.tw/v1"

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {API_KEY}",
}

data = {
    "model": "GPT-OSS:120B",
    "messages": [
        {"role": "system", "content": "你是一個來自東海大學的有用助理。"},
        {"role": "user", "content": "請介紹東海大學的路思義教堂。"}
    ]
}

response = requests.post(f"{API_BASE_URL}/chat/completions", headers=headers, data=json.dumps(data))

if response.status_code == 200:
    print(response.json()['choices'][0]['message']['content'])
else:
    print(f"請求失敗,狀態碼: {response.status_code}")
    print(response.text)

PHP 範例使用 cURL 擴充套件發送 POST 請求。

<?php
$apiKey = "YOUR_API_KEY";
$apiBaseUrl = "https://llm.thu.edu.tw/v1";

$payload = [
    "model" => "GPT-OSS:120B",
    "messages" => [
        ["role" => "system", "content" => "你是一個來自東海大學的有用助理。"],
        ["role" => "user", "content" => "請介紹東海大學的路思義教堂。"],
    ],
];

$ch = curl_init("{$apiBaseUrl}/chat/completions");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Bearer ' . $apiKey,
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode === 200) {
    $data = json_decode($response, true);
    echo $data['choices'][0]['message']['content'];
} else {
    echo "請求失敗,狀態碼: {$httpCode}\n";
    echo $response;
}
?>

Node.js 範例(Node 18+ 提供原生 fetch)。

const API_KEY = 'YOUR_API_KEY';
const API_BASE_URL = 'https://llm.thu.edu.tw/v1';

async function run() {
  const payload = {
    model: 'GPT-OSS:120B',
    messages: [
      { role: 'system', content: '你是一個來自東海大學的有用助理。' },
      { role: 'user', content: '請介紹東海大學的路思義教堂。' },
    ],
  };

  const res = await fetch(`${API_BASE_URL}/chat/completions`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${API_KEY}`,
    },
    body: JSON.stringify(payload),
  });

  if (!res.ok) {
    console.error('請求失敗,狀態碼:', res.status);
    console.error(await res.text());
    return;
  }

  const data = await res.json();
  console.log(data.choices[0].message.content);
}

run().catch(console.error);

請記得將 YOUR_API_KEY 替換成您自己的金鑰。


進階應用:建構 RAG 問答系統

檢索增強生成 (Retrieval-Augmented Generation, RAG) 是一種結合資訊檢索與大型語言模型的技術,可以讓模型回答特定領域知識庫的問題。

以下是一個簡易的流程,示範如何使用我們的嵌入模型 (BGE-M3) 和語言模型 (GPT-OSS) 來達成此目標。

1. 建立知識庫向量

首先,將您的文件(例如:PDF、TXT)切分成小段落,並使用 BGE-M3 模型將每個段落轉換為語意向量(embeddings)。

def get_embeddings(texts, model="BGE-M3"):
    response = requests.post(
        f"{API_BASE_URL}/embeddings",
        headers=headers,
        data=json.dumps({
            "input": texts,
            "model": model
        })
    )
    if response.status_code == 200:
        return [item['embedding'] for item in response.json()['data']]
    else:
        # 錯誤處理
        return None

# 假設這是您的知識庫文件段落
knowledge_chunks = [
    "路思義教堂是一座位於臺灣臺中市西屯區東海大學的基督新教禮拜堂...",
    "教堂為著名美國華裔建築師貝聿銘與台灣建築師陳其寬之作...",
    "教堂的結構材料採用鋼筋混凝土,建築形式是仿造中國古代的琉璃瓦..."
]

# 取得向量
knowledge_vectors = get_embeddings(knowledge_chunks)

# 在實際應用中,您會將這些向量與原文段落儲存在向量資料庫中 (e.g., ChromaDB, FAISS)

2. 檢索相關資訊

當使用者提出問題時,先將問題同樣轉換為向量,然後在您的向量資料庫中搜尋最相似的文件段落。

user_question = "誰設計了路思義教堂?"
question_vector = get_embeddings([user_question])[0]

# ... 此處為在向量資料庫中搜尋的邏輯 ...
# 假設我們找到了最相關的段落
relevant_context = "教堂為著名美國華裔建築師貝聿銘與台灣建築師陳其寬之作..."

3. 生成最終答案

最後,將使用者的原始問題和檢索到的相關段落一起提供給大型語言模型,讓它生成一個精確的答案。

prompt = f"""
根據以下提供的資料,請回答使用者的問題。

資料:
"{relevant_context}"

使用者的問題:
"{user_question}"

答案:
"""

final_data = {
    "model": "GPT-OSS:120B",
    "messages": [
        {"role": "user", "content": prompt}
    ]
}

response = requests.post(f"{API_BASE_URL}/chat/completions", headers=headers, data=json.dumps(final_data))
print(response.json()['choices'][0]['message']['content'])

# 預期輸出: 路思義教堂是由美國華裔建築師貝聿銘與台灣建築師陳其寬共同設計的。