Feed on
Posts
Comments
Email訂閱

This Post is under 軟體開發

「人工智慧」不是新奇的玩意,但近一兩年這個詞語如同「奈米」一詞被濫用。外界因為台灣電子大廠供應了許多AI伺服器的硬體而誇口說台灣是AI中心,但也有明眼人點出台灣其實只是AI「代工」中心(台灣是AI中心?童子賢:不要飄飄然 是少了代工二字)。現在的AI(尤其是生成式AI)就是人工智慧嗎?請先通過圖靈測試再說,不然只是「一本正經地胡說八道」。

「人工智慧」的極致應如愛因斯坦所說:「專家不過是訓練有素的狗」,但終究無法像人類那樣「對美和良善有生動的感受」;不過愛因斯坦的話恰巧點出「人工智慧」幾個必備重點:「專家的專業知識」(大量領域知識-domain knowledge)、「訓練有素」(機器學習、深度學習),以及像「狗」一樣永遠對人類忠誠的設定。台灣的強項主要在第二項的「一小部分」-提供機器深度學習的算力(藉由AI伺服器);至於學習的演算法發展(BERTGPT…),以及大量訓練後的成果-模型(model,用思維模式來形容生成式AI model更貼切),台灣則幾乎無能為力。我們可以把訓練「人工智慧」類比成「小孩養成」,如胡適所說:「種種從前,都成今我。 莫更思量更莫哀,從今後要怎麼收穫,先怎麼栽 !」我們可以想像從小注重孩子教育以及放牛吃草所養成的小孩未來的發展絕對是完全不同。

而落後多年之後,要靠「惡補」趕學習進度,就得付出代價請「補教名師」來加強。在「人工智慧」領域所謂的「補教名師」就是國外軟體大廠已經訓練好的「模型」(model),這些訓練有素的模型已經能透過網路來提供服務了,如Open AIGoogle Gemini…。本文就是要介紹如何透過熟悉的程式語言(以本部落格來說是PHP)開發接取Google Gemini的生成式AI服務。

其實台灣在發展人工智慧的機會在於「軟體」(或稱「應用」),誠如黃仁勳在以下影片 45:05 所說的:「最重要的是可以重新設定(reset),軟體如何被創造,以及可以創造什麼軟體」(意指在特定AI應用領域的玩家還不多時,在這個領域的價值創造、遊戲規則連軟體大廠都還沒涉入時,就是小型業者的發揮機會了)。台灣在許多領域如製造、醫療等,的確擁有其他國家少有的「領域知識與資料」,這些大量「領域知識與資料」可以「創造什麼軟體?」就有待您聰明的腦袋瓜去創新發想一下了。黃仁勳看到的應用其中之一是機器人,可以預見未來在各個領域都會有機器人,譬如工廠機器人;在災難救援,也已經發展出機器狗;電動車的自動駕駛。未來安養照護、教育、醫療、農業…,每個生活與工作中的任務可能都會有其對應的人工智慧以不同的外型樣貌出現。

如果我們無法花大量資源去養成我們自己想要的「人工智慧」,那至少我們可以去買現成的,就像是要喝牛奶不必得在家裡養一條母牛。有許多博士畢業生往往給小學畢業的董事長提皮箱。像是這樣不倫不類的比喻。七、八年前有人說,未來「人工智慧」將會以API的方式被呼叫,當時還很難想像,不過的確他的預言成真了。在以下框框輸入問題,Gemini就會試圖回答你。切換不同模型,回答內容也會稍有不同(可以想像拿同樣問題,問受過不同訓練的人)。

以下就是在網站伺服器端呼叫 Google Gemini 生成內容(generateContent)的程式碼,以 php curl 來實作,參考:How to Play With Google Gemini API?。要實作之前先要申請 API key,參考:如何使用 Google 的 Gemini 模型 API?,並將以下程式碼中的 “YOUR_GEMINI_KEY” 換成你自己申請的 key。本文發表的現在還是免費使用,但可能會有使用數量的限制(如tokens數)。不過藉由實作範例程式之後,其實應該要發想的是獨特的創意,你可以站在巨人肩膀上做什麼有趣的事情?而不只是「聊天機器人」而已。至於巨人(Google Gemini)現在已具備什麼能耐,可參考其說明文件

<?php

$model = isset($_REQUEST['m']) ? $_REQUEST['m'] : "";
$geminiQuery = isset($_REQUEST['q']) ? $_REQUEST['q'] : "";

$api_key = "YOUR_GEMINI_KEY";

$url = "https://generativelanguage.googleapis.com/v1/models/{$model}:generateContent?key={$api_key}";

$data = array(
    "contents" => array(
        array(
            "role" => "user",
            "parts" => array(
                array(
                    "text" => $geminiQuery
                )
            )
        )
    )
);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$response = curl_exec($ch);

curl_close($ch);

header('Content-type: application/json');

if (curl_errno($ch)) {

    die("{ 'error': '" . curl_error($ch) . "'}");
}

echo $response;

 

留言區