告別半夜裝睡!WordPress 植入 Assistants API 終極戰略
厭倦了傳統關鍵字客服的「失憶症」嗎?OpenAI Assistants API 徹底改變遊戲規則!透過其內建的 Thread 上下文管理,我們將您的 WordPress 網站升級為永不關機的智慧大腦。文章詳細解析 Function Calling 和 RAG 技術,賦予 AI 查詢訂單、檢索文件等實戰能力。別再讓深夜客戶流失!立即學習這套硬核實戰,親手為您的網站裝上這個數位員工,或聯繫浪花科技,為您的企業部署客製化的 AI 戰力,全面提升客戶體驗與市場競爭力!
客服半夜裝睡?OpenAI Assistants API 終極實戰,打造永不關機的 WordPress 智慧大腦
嗨,我是浪花科技的資深工程師 Eric。寫了這麼多年的程式,我看過太多企業在一個地方跌倒:客服。你的行銷團隊砸大錢引流,銷售團隊拼命成交,但客戶在凌晨三點遇到問題時,卻只能得到「目前非服務時間,請留言」的冰冷回覆。這就像球隊花了九牛二虎之力把球帶到門前,結果射門的球員睡著了,這能忍嗎?
傳統的客服機器人大多是關鍵字比對的「笨蛋」,只能回答設定好的問題,稍微換個問法就當機。但時代變了,AI 革命不是口號,而是已經落地的商業武器。今天,我就要帶你動手玩真的,我們來聊聊如何利用 OpenAI 最新、最強大的 Assistants API,為你的 WordPress 網站植入一個真正會思考、永不下班的智慧大腦,打造 24H 企業智能客服。
為什麼是 Assistants API?它跟 ChatGPT API 有何不同?
很多開發者可能已經玩過 OpenAI 的 Chat Completions API(就是大家常說的 ChatGPT API)。它很強大,但有個天生的限制:它是「無狀態 (Stateless)」的。每次對話,你都得把整個聊天紀錄重新傳一次,AI 才能理解上下文。這不僅浪費 token(也就是錢),在長對話中還很容易失憶。
身為一個有點龜毛的工程師,我必須說,這種方式太不優雅了。而 Assistants API 就是為了解決這個痛點而生的。你可以把它想像成,你不是在跟一個記憶力只有七秒的金魚對話,而是在聘請一位專屬的數位助理。
Assistants API 的四大核心概念
- Assistant (助理):這就是你創造的 AI 角色。你可以給它一個身份(例如「浪花科技專業客服」)、具體的指令 (Instructions)、選擇要用的模型(例如最新的 GPT-4o),以及賦予它特殊工具 (Tools)。
- Thread (對話串):每個使用者與 Assistant 的對話都是一個獨立的 Thread。OpenAI 會自動幫你管理這個對話串的上下文,你再也不用手動傳送落落長的歷史紀錄了。這點真的超讚,省事省錢。
- Message (訊息):使用者或你(代表 AI)在對話串中發送的每一句話。
- Run (執行):當你把使用者的 Message 加入 Thread 後,你需要下達一個「Run」的指令,Assistant 才會開始思考並回應。這是一個非同步的過程,非常適合網頁應用。
簡單來說,整個流程就是:建立一個助理 -> 為新用戶建立一個對話串 -> 用戶傳訊息 -> 執行助理 -> 等待助理回覆。這個架構讓長對話、多使用者管理變得異常清晰且高效。
殺手級應用:讓 AI 學會使用你的工具 (Function Calling)
如果只是能記住上下文,那還不夠看。Assistants API 最讓我興奮的功能,是 Function Calling 和 File Search (RAG)。
Function Calling:賦予 AI 操作你網站的能力
想像一下,客戶問:「請問訂單 #WP12345 的狀態是什麼?」傳統的 AI 只能說:「很抱歉,我無法查詢即時訂單狀態。」但有了 Function Calling,你可以「教」AI 如何呼叫你寫在 WordPress 裡的 PHP 函式!
流程會變成這樣:
- 使用者問:「訂單 #WP12345 的狀態?」
- Assistant 分析後發現,這需要查詢資料庫,而它的「工具箱」裡有一個叫做 `get_order_status` 的工具。
- API 回傳一個 `requires_action` 的狀態,告訴你的 WordPress:「嘿,老兄,該你動手了,幫我執行 `get_order_status`,參數是 `WP12345`。」
- 你的 WordPress 執行這個 PHP 函式,查到訂單狀態是「已出貨」。
- 你把「已出貨」這個結果回傳給 Assistant。
- Assistant 收到結果後,用人性化的語氣回覆使用者:「您好,您的訂單 #WP12345 已經在路上了喔!」
看到沒?AI 不再只是個聊天對象,而是變成了一個能與你網站系統互動的操作員。查詢庫存、預約時間、找尋特定商品… 可能性是無限的。
File Search (RAG):讓 AI 成為你的產品專家
另一個神器是 File Search(在最新的 v2 API 中稱為 Vector Stores)。你可以上傳公司的產品手冊、FAQ 文件、技術規格書(PDF, DOCX 等),並將這些文件與你的 Assistant 關聯。當使用者問到相關問題時,Assistant 會自動在這些你提供的「知識庫」中尋找最相關的資訊來回答。
這就是所謂的「檢索增強生成 (Retrieval-Augmented Generation, RAG)」。你不需要花大錢去微調 (Fine-tune) 模型,就能讓 AI 精準回答關於你自家業務的刁鑽問題。這對於擁有複雜產品線或大量說明文件的企業來說,簡直是天降甘霖。
WordPress 實戰:一步步打造你的 AI 客服
好了,理論講夠了,工程師的靈魂在吶喊,是時候上 Code 了。我們來走一遍最核心的流程。這裡我建議你建立一個自訂外掛來放這些程式碼,別再什麼都塞 `functions.php` 了,拜託,這樣很難維護的。
步驟一:建立 WordPress REST API 端點
我們需要一個讓前端介面可以呼叫的入口。使用 WordPress REST API 是最乾淨的做法。
<?php
// 在你的自訂外掛或佈景主題的 functions.php 中
add_action( 'rest_api_init', function () {
register_rest_route( 'my-chatbot/v1', '/chat', array(
'methods' => 'POST',
'callback' => 'handle_chat_request',
'permission_callback' => '__return_true' // 實務上應加上 nonce 驗證或使用者權限檢查
) );
} );
function handle_chat_request( WP_REST_Request $request ) {
$params = $request->get_json_params();
$user_message = sanitize_text_field( $params['message'] );
$thread_id = isset($params['thread_id']) ? sanitize_text_field($params['thread_id']) : null;
// 在這裡呼叫 OpenAI Assistants API 的邏輯
// ...
// 為了簡化,我們先回傳一個假的回應
$response = array(
'reply' => '我收到了你的訊息:' . $user_message,
'thread_id' => $thread_id ? $thread_id : 'new_thread_123' // 如果是新對話,回傳新的 thread_id
);
return new WP_REST_Response( $response, 200 );
}
?>
這段程式碼建立了一個 `yoursite.com/wp-json/my-chatbot/v1/chat` 的 API 端點,它會接收前端傳來的訊息和對話串 ID。
步驟二:串接 OpenAI Assistants API (PHP)
接下來是重頭戲,我們要用 PHP 的 `wp_remote_post` 來跟 OpenAI 打交道。
<?php
function call_openai_assistant($user_message, $thread_id = null) {
$api_key = 'sk-YOUR_OPENAI_API_KEY'; // 務必從安全的地方讀取,不要寫死!
$assistant_id = 'asst_YOUR_ASSISTANT_ID'; // 你在 OpenAI 後台建立的 Assistant ID
// 1. 如果沒有 thread_id,就建立一個新的
if ( !$thread_id ) {
$thread_response = wp_remote_post('https://api.openai.com/v1/threads', [
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $api_key,
'OpenAI-Beta' => 'assistants=v2'
]
]);
$thread_body = json_decode(wp_remote_retrieve_body($thread_response));
$thread_id = $thread_body->id;
}
// 2. 將使用者的訊息加入 thread
wp_remote_post("https://api.openai.com/v1/threads/{$thread_id}/messages", [
'method' => 'POST',
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $api_key,
'OpenAI-Beta' => 'assistants=v2'
],
'body' => json_encode(['role' => 'user', 'content' => $user_message])
]);
// 3. 執行 Assistant
$run_response = wp_remote_post("https://api.openai.com/v1/threads/{$thread_id}/runs", [
'method' => 'POST',
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $api_key,
'OpenAI-Beta' => 'assistants=v2'
],
'body' => json_encode(['assistant_id' => $assistant_id])
]);
$run_body = json_decode(wp_remote_retrieve_body($run_response));
$run_id = $run_body->id;
// 4. 輪詢 (Polling) Run 的狀態,直到它完成
$run_status = '';
do {
sleep(1); // 等待一秒,避免太頻繁的請求
$status_response = wp_remote_get("https://api.openai.com/v1/threads/{$thread_id}/runs/{$run_id}", [
'headers' => [
'Authorization' => 'Bearer ' . $api_key,
'OpenAI-Beta' => 'assistants=v2'
]
]);
$status_body = json_decode(wp_remote_retrieve_body($status_response));
$run_status = $status_body->status;
} while ($run_status === 'in_progress' || $run_status === 'queued');
// 5. 如果 Run 完成了,就去抓取最新的訊息
if ($run_status === 'completed') {
$messages_response = wp_remote_get("https://api.openai.com/v1/threads/{$thread_id}/messages", [
'headers' => [
'Authorization' => 'Bearer ' . $api_key,
'OpenAI-Beta' => 'assistants=v2'
]
]);
$messages_body = json_decode(wp_remote_retrieve_body($messages_response));
// 通常最新的訊息是 AI 回的,在陣列的第一個
$ai_reply = $messages_body->data[0]->content[0]->text->value;
return ['reply' => $ai_reply, 'thread_id' => $thread_id];
}
return ['reply' => '抱歉,我現在有點忙,請稍後再試。', 'thread_id' => $thread_id];
}
// 修改我們剛剛的 REST API callback
function handle_chat_request( WP_REST_Request $request ) {
$params = $request->get_json_params();
$user_message = sanitize_text_field( $params['message'] );
$thread_id = isset($params['thread_id']) ? sanitize_text_field($params['thread_id']) : null;
$response = call_openai_assistant($user_message, $thread_id);
return new WP_REST_Response( $response, 200 );
}
?>
工程師的小囉嗦:上面的輪詢 (Polling) 寫法是為了教學簡化。在正式產品中,你可能會想用更進階的方式,例如把 Run 的 ID 存起來,讓前端過幾秒後再來查詢結果,避免讓一個 PHP request 執行太久,佔用伺服器資源。
步驟三:前端聊天介面 (JavaScript)
前端的部分相對單純,就是一個輸入框、一個送出按鈕,和一個顯示對話的區塊。核心是用 `fetch` API 來呼叫我們寫好的後端端點。
<!-- HTML 結構 -->
<div id="chat-container">
<div id="chat-box"></div>
<input type="text" id="chat-input" placeholder="請輸入您的問題...">
<button id="send-btn">送出</button>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const sendBtn = document.getElementById('send-btn');
const chatInput = document.getElementById('chat-input');
const chatBox = document.getElementById('chat-box');
let threadId = null; // 在前端保存 threadId
sendBtn.addEventListener('click', async function() {
const message = chatInput.value;
if (!message) return;
// 顯示使用者訊息
chatBox.innerHTML += `<p><strong>你:</strong> ${message}</p>`;
chatInput.value = '';
try {
const response = await fetch('/wp-json/my-chatbot/v1/chat', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
message: message,
thread_id: threadId
})
});
const data = await response.json();
// 保存 threadId 供下次對話使用
threadId = data.thread_id;
// 顯示 AI 回覆
chatBox.innerHTML += `<p><strong>AI客服:</strong> ${data.reply}</p>`;
} catch (error) {
console.error('Error:', error);
chatBox.innerHTML += `<p><strong>系統:</strong> 連線錯誤,請稍後再試。</p>`;
}
});
});
</script>
結論:這不只是工具,而是企業戰力的延伸
串接 OpenAI Assistants API 到 WordPress,絕對不是裝個外掛按幾下就能搞定的事。它需要你對 API 流程有清楚的理解,也需要你動手寫程式。但這件事的價值遠遠超過投入的時間成本。
你得到的不是一個制式化的機器人,而是一個可被高度客製化、能學習你公司知識、能實際操作你系統功能的「數位員工」。它能 24 小時不知疲倦地解決 80% 的常見客戶問題,讓人力客服能專注在更複雜、更有價值的深度溝通上。這不僅是提升效率,更是全面升級你的客戶體驗,建立別人難以複製的競爭壁壘。
當然,實作中還有很多細節要考慮,比如 API 金鑰的安全性、成本控管、更複雜的 Function Calling 邏輯、錯誤處理機制等等。但別擔心,這就是我們浪花科技這種技術團隊存在的價值。
延伸閱讀
- 你的 WordPress 網站是「真 AI」還是「裝 AI」?資深工程師手把手教你串接 OpenAI API,打造會思考的智慧大腦!
- LINE 官方帳號還在手動回?終極 WordPress LINE Chatbot 開發實戰,從 Webhook 到 WooCommerce 全自動!
- 你的 WordPress 正在大開後門嗎?資深工程師的 Webhook 設計與安全驗證終極指南
如果你覺得這個主題太硬核,或者想直接為你的企業導入一套量身打造的 AI 解決方案,別客氣,這正是我們的專業所在。歡迎與浪花科技聯繫,讓我們聊聊如何為你的網站裝上這個永不下班的智慧大腦,一起在 AI 時代搶佔先機!
常見問題 (FAQ)
Q1: Assistants API 跟 Chat Completions API (ChatGPT API) 最大的差別是什麼?
最主要的差別在於「狀態管理」和「內建工具」。Assistants API 會自動幫你管理對話的上下文(透過 Thread),你不需要每次請求都把歷史紀錄重傳一次,這讓長對話變得非常容易。此外,它內建了強大的工具,如 Function Calling(讓 AI 呼叫你的程式碼)和 File Search(RAG,讓 AI 查詢你上傳的文件),這是 Chat Completions API 本身不具備的。
Q2: 這樣串接一個 AI 客服會很貴嗎?
成本取決於幾個因素:使用的模型(例如 GPT-4o 比 GPT-4 Turbo 便宜且速度更快)、對話的長度、以及是否使用 File Search 等工具(這會產生額外的儲存和檢索費用)。好消息是,因為 Assistants API 能有效管理上下文,可以避免不必要的 token 浪費。建議先從少量測試開始,並在 OpenAI 後台設定預算限制,以有效控制成本。
Q3: 我完全不會寫程式,有辦法做到嗎?
坦白說,要實現本文中這種深度整合、能呼叫網站內部功能的客製化 AI 客服,程式開發是必要的。市面上或許有一些外掛提供簡易的聊天機器人功能,但它們的彈性和智慧程度通常遠不及直接串接 Assistants API。如果你希望 AI 能真正理解並操作你的業務邏輯,這就需要客製化開發。
Q4: 什麼是 RAG (File Search),為什麼它對客服機器人很重要?
RAG(Retrieval-Augmented Generation)中文是「檢索增強生成」。簡單來說,就是讓 AI 在回答問題前,先去你指定的「知識庫」(例如你上傳的產品 PDF)裡「查找資料」,然後再根據查到的內容來生成答案。這對客服機器人至關重要,因為它能確保 AI 的回覆是基於你公司的準確資訊,而不是它自己「想像」出來的。這讓 AI 能快速成為你公司的產品專家,而不需要昂貴且複雜的模型微調 (Fine-tuning)。






