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 說明文件

  1. 擁有一個 Google 帳戶:這一定要的吧,哪家不是這樣。
  2. 申請 Google Cloud 帳戶:去 Google Cloud 註冊一個帳戶,開通免費試用額度。
  3. 取得 Gemini API 金鑰:登入 Google AI Studio 後,它會要求同意一些服務條款。
  4. 建立 API Key:完成上一個步驟後,理論上可以看到 Create API Key 的按鈕,點下去就對了。
  5. 記下 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 下載 。


礙於篇幅的關係,本系列規劃用底下幾篇文章來說明。


留言