Hello Gemini,串接第一個 Gemini 生成式 AI
# 使用生成式 AI 結合 RAG 技術實做屬於自己的 LLM 知識庫系列文章
Gemini 是什麼?
Gemini 是 Google 開發的生成式 AI 模型系列,它的前身你可能聽過的是 Bard(一開始被 ChatGPT 打的很慘,現在已經默默退場的那位),而 Gemini 這個系列專為多模態任務設計,也就是說它不只會聊天,還能處理圖片、文字,甚至未來可能支援更多格式,你可以把 Gemini 想像成 Google 家的 ChatGPT,而且它也有自己的 API 可以串接。
為什麼選擇 Gemini?
回到本系列第一篇文章提到的,本次的目標是希望用最低成本打造出屬於自己的 LLM 知識庫,感覺這個目標聽起來不難,但現實往往不會那麼美好,實務上最理想的狀況當然是整套系統都跑在自己地端環境,不僅能確保資料不會外流,還能完全掌控模型運作細節。
不過嘛…… GPU 很貴的,不是每個人或者公司都願意砸大錢弄一台本地端跑 LLM 的伺服器,更別提現在使用者被 ChatGPT 養壞了,變得超沒耐心,超過 3 秒的回應時間可能就給負評 + 退訂了 XD。
因此我選擇 Google 的 Gemini 作為生成模型,原因很簡單,目前它提供免費呼叫 API 的額度(至少本文撰寫的時候 Gemini 2.5 Flash 有一個免費額度可以使用,詳細可參考 Gemini Developer API 定價,但目前 AI 服務變化太快,未來就沒辦法保證了)。
怎麼串接 Gemini API?
前置作業
在開始寫程式碼之前,你必須先完成底下幾個重要步驟,相關設定也可以參考 Gemini API 說明文件。
- 擁有一個 Google 帳戶:這一定要的吧,哪家不是這樣。
- 申請 Google Cloud 帳戶:去 Google Cloud 註冊一個帳戶,開通免費試用額度。
- 取得 Gemini API 金鑰:登入 Google AI Studio 後,它會要求同意一些服務條款。
- 建立 API Key:完成上一個步驟後,理論上可以看到 Create API Key 的按鈕,點下去就對了。
- 記下 API Key:完成後你會得到一組可以呼叫 Gemini API 的 Key,請記下它(忘記了其實也沒關係,管理介面這邊還可以看到),等等開發的時候會用到。
測試 API Key
拿到 API 照慣例別急著寫程式,記得先測試一下能不能正常使用,這邊 Google 有提供透過 curl 來呼叫的 Sample Code,或者你也可以直接使用 Postman 這類的工具來進行測試。
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [
{
"parts": [
{
"text": "台灣總統是誰?"
}
]
}
]
}'
使用 Postman 呼叫 Gemini API 的執行結果 |
安裝套件
這次我們使用的是 .NET 8,雖然你也可以照著 Google 官方說明一步步手刻呼叫 Gemini API,但我知道你也很忙(我也是 😅),所以這篇 Lab 一樣會用好用的套件來加速開發,因此請先安裝以下幾個套件。
<PackageReference Include="Microsoft.SemanticKernel" Version="1.54.0" />
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Google" Version="1.54.0-alpha" />
開始實作吧
因為使用了上一篇文章中提到的 Semantic Kernel 和 Semantic Kernel 所提供的 Gemini API 連接器兩個套件來實作,因此程式碼簡單到另你掉下巴,廢話不多說,直接看下方 Code 吧。
static async Task Main(string[] args)
{
var geminiApiKey = Environment.GetEnvironmentVariable("GEMINI_API_KEY") ?? "";
if (string.IsNullOrEmpty(geminiApiKey))
{
Console.WriteLine("請設定環境變數 Gemini API Key");
return;
}
// 設定 Gemini API 金鑰與模型 ID(這裡使用 gemini-2.0-flash,適合對話應用)
var geminiModelId = "gemini-2.0-flash"; // 可以依需求改成其他版本,例如 gemini-pro
// 建立 Semantic Kernel 的核心物件,並註冊 Gemini 的 Chat Completion 服務
Kernel kernel = Kernel.CreateBuilder()
.AddGoogleAIGeminiChatCompletion(modelId: geminiModelId, apiKey: geminiApiKey)
.Build();
// 定義使用者輸入的問題
var userInput = "請問台灣總統是誰?";
// 輸出使用者輸入內容
Console.WriteLine("User: " + userInput);
// 呼叫 Gemini 模型並取得回應
var assistant = await kernel.InvokePromptAsync(userInput);
// 輸出 Gemini 回應的內容
Console.WriteLine("Assistant: " + assistant);
}
本文範例執行結果 |
這一篇的重點,是讓我們能夠成功串接到 Gemini 的服務,先確定整個 API 的基本溝通是沒有問題的,至於更完整的串接流程與實作細節,會留到下一篇再一併清楚說明。。
本文範例使用 NetCore 8,請至 HelloGemini 下載 。
礙於篇幅的關係,本系列規劃用底下幾篇文章來說明。
- 前言及流程規劃。
- 建置本地端 Ollama 服務及 LLM 知識庫所需的環境設置。
- 蝦咪系 Word Embedding?詞嵌入模型概念及實作。
- Hello Gemini,串接第一個 Gemini 生成式 AI。
- 做個有記憶力的 AI 機器人,實作對話記憶。
- 來跟 AI 玩玩角色扮演吧,提示工程(Prompt engineering)實作。
- 解決 AI 幻覺,讓 RAG 幫你吧。
- AI 也能認識你是誰喔,實作自定義 Function。
- 來吧,開始建立基於生成式 AI 的 KM 系統了。
- 番外篇 - 我想換個生成模型呢。
留言
張貼留言
您好,我是 Lawrence,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。