概述
本文詳細記錄了 Vercel Workshop 中關於 AI 應用開發的實作內容,並無創新。講者是 Nico Albanese,他是 AI SDK 的開發人員。會寫這篇文章是因為我認為講者循序漸進的教學方式很值得我學習,所以想記錄下來供我自己未來參考。同時也能讓更多人因此獲益。該工作坊主要運用 AI SDK 與 Next.js 兩大核心技術,內容架構分為三個重要面向:
- AI SDK 的基礎應用與實作
- AI SDK 與 Next.js 框架的整合方式
- AI Chatbot 的實作
本篇為這次工作坊的第一部分,我們將探討 Vercel AI SDK 的基礎應用。內容包含專案建置和透過大型語言模型(LLM)在文字資料中取得特定資訊和分類。
專案建置
你可以使用以下指令將指定的 Git 儲存庫 Clone 到本地端
你可以使用你偏好的套件管理器來安裝相依套件
你可以使用以下指令來複製 .env.example 並將其重新命名為 .env:
打開 .env 檔案,然後新增或修改 OPENAI_API_KEY 變數,例如:
為了確認是否有正確加入 OpenAI 的 API key,我們可以透過下面指令來檢查。但請小心,這會直接顯示你的 API Key 在終端機,建議只在本機測試時使用:
如果成功設置,你會在終端機中看到你的 OpenAI API Key 被輸出。
如果成功了,我們就可以開始使用 Vercel AI SDK 了!☺️
文字生成
從 AI SDK 引入 generateText,然後調用它吧!
引入 OpenAI provider,然後選擇你要使用的模型
傳入一個提示詞,這次我們要提取文章中提到的所有名字
現在,讓我們把生成的文本輸出到 console 看看
運行腳本
試著改變提示詞,問一些不同的問題,比如:「這篇文章的關鍵觀點是什麼?用 50 字來描述。」
試試使用不同的模型,看看回應會有什麼變化。
繼續試著變換提示詞,問不同的問題,看看模型是如何回應的。你也可以嘗試不同的模型,看看回應有什麼不同。
分類文字描述
在這個專案中,我們要將一堆支援請求傳遞給模型,並請它將這些請求分類到不同的類別中。
打開 app/(2-classification)/classification.ts,你應該會看到以下的程式碼:
像之前一樣導入並調用 generateText。提示模型對支援請求(issues)進行分類(請求以 JSON 物件的形式傳遞進來)。
運行腳本
Response:
Notice how the model is able to classify the support requests into the correct categories. This is great, but generating a big plain text chunk isn't super useful. Notice, the model also generates extraneous information like "Here are the classified support requests:" and "(Note: The request about API integration (id: 3) was not classified as it does not fit neatly into the provided categories.)". We can solve this with the generateObject function.
使用 generateObject 取代 generateText。
定義輸出的 schema,並將輸出模式設為「array」。
將輸出模式設為「array」,這樣模型會生成符合我們定義 schema 的物件陣列。先定義輸出的 schema,然後設定輸出模式為「array」。
現在,輸出會完全符合我們指定的格式,變得更精確且可控了。
更新 schema,讓模型評估請求的緊急程度。
這真的很強大!許多模型都是多語言的,所以我們可以傳入不同語言的支援請求,模型仍然能夠正確分類。這是一個很好的例子,展示了如何利用 AI 自動化一項原本非常耗時的工作。
更新匯入內容以處理多語言的支援請求,並在 schema 中新增一個 language 欄位。
注意
模型雖然能正確識別語言,但它回傳的是國家代碼,而不是完整的語言名稱。
但我們可以使用 describe 方法,提供更多細節,讓模型更精確地生成你想要的結果。
這篇文章一步一步教大家做了文字生成和支援請求分類的實作。但 Vercel AI SDK 有很多其他的方法,可以幫助你做更多的事情。繼續閱讀這篇文章以獲得更多進階的實作應用。
