iT邦幫忙

0

整合 Gemini AI 的 LINE Bot - 雲端情人實作 (三) 基本配置

  • 分享至 

  • xImage
  •  

完成事前準備後,本章將進入實作的第一步:配置開發環境。我們將跳過瑣碎的安裝細節,直接進入現代化 Spring Boot 開發的核心——Gradle 依賴管理與 YAML 安全配置。

建立 Spring Boot 專案

關於 Spring Boot 的基礎建立流程與 IDE 安裝,推薦參考以下教學完成環境初始化:

📘延伸閱讀

專案技術選型說明

  • 麼選擇 Gradle? 於 Maven (XML),Gradle 的 DSL 語法更簡潔且靈活。在企業級開發中,Gradle 的增量編譯速度與相依性管理能力更具優勢。
  • 用 YAML 檔?在本專案中,我們涉及提示詞工程 。YAML 支援多行字串與階層式結構,在定義 AI 的系統角色時,擁有更好的換行支援與可讀性

Gradle 依賴配置:打造情人的核心元件

  • 在 build.gradle 中,我們引入了幾項關鍵技術。這不只是為了讓程式跑起來,更是為了賦予機器人「記憶」與「守護能力」。

    dependencies {
        // Spring Boot Web - 提供 REST API 和 Web 應用核心功能
        implementation 'org.springframework.boot:spring-boot-starter-web'
        //  Java 本地 Cache
        implementation 'com.github.ben-manes.caffeine:caffeine:3.2.3'
    
        // LINE Bot SDK - LINE 聊天機器人開發套件
        implementation 'com.linecorp.bot:line-bot-messaging-api-client:9.13.0'
        implementation 'com.linecorp.bot:line-bot-spring-boot-client:9.13.0'
        implementation 'com.linecorp.bot:line-bot-parser:9.13.0'
    
    
        // Google Generative AI - Google AI (Gemini) SDK
        implementation 'com.google.genai:google-genai:1.31.0'
    
    
        // Spring Boot Mail - 郵件發送功能
        implementation 'org.springframework.boot:spring-boot-starter-mail:4.0.0'
    
        // Lombok - 簡化  Java 代碼
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
    
        // DevTools - 開發時熱重載功能
        developmentOnly 'org.springframework.boot:spring-boot-devtools'
    }
    

    核心組件解析:技術選型背後的思考

    為什麼選擇這些組件?除了功能達成,更多的是基於「使用者體驗」與「開發成本」的平衡。

    1. Caffeine Cache:賦予機器人「記憶力」
      LINE Bot 預設是「無狀態(Stateless)」的,每一則訊息對伺服器來說都是獨立事件。為了讓 AI 記得你上一秒說過的話,我們引入 Caffeine 在本地記憶對話上下文(Context)。
    • 技術優勢:它是目前 Java 效能最強大的快取庫,能確保機器人在處理複雜對話時依然反應靈敏。
    • 專案價值:有了記憶,AI 才不再是秒忘的陌生人,而是能接續話題的情人。
    1. Google Gemini SDK:雲端情人的主要「大腦」
      在眾多 LLM 模型中選擇 Gemini,是基於實戰中的兩大考量:
    • 極高的性價比:成本是個人專案永續經營的關鍵。Gemini(特別是 Flash 模型)提供的免費配額或低廉費率,非常適合需要頻繁互動的陪伴型應用。
    • 感性陪伴優於專業知識:「雲端情人」的核心在於情感連結而非寫程式或撰寫論文。Gemini 在處理感性、自然對話時表現卓越,且長文本能力能精準捕捉我們在提示詞(Prompt)中細微的人格設定。
    1. Spring Boot Mail:管理員的「守護通知」
    • 自動化維運:當 Gemini API 配額用盡、Token 過期或系統發生未預期異常時,機器人會透過 Gmail 自動發信給開發者。
    • 守護價值:這讓你能在第一時間收到異常警報並修復,確保你的「雲端情人」服務永遠在線。

應用程式配置 (application.yml)

請將 src/main/resources/application.properties 直接重新命名為 application.yml。

💡 開發小技巧: 觀察下方的 gemini.system.prompt。我們使用了 YAML 的 | 符號,這能完整保留 Prompt 的換行格式,讓 AI 角色設定更易於維護。

spring:
  application:
    name: line-bot

  # SMTP 郵件配置
  mail:
    host: smtp.gmail.com
    port: 587
    username: ${GMAIL_USERNAME}
    password: ${GMAIL_PASSWORD}
    default-encoding: utf-8
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
          timeout: 5000
          connection-timeout: 5000
          write-timeout: 5000

# Line Bot 設定
line:
  bot:
    channel-token: ${LINE_CHANNEL_TOKEN}
    channel-secret: ${LINE_CHANNEL_SECRET}

# 伺服器埠號
server:
  port: ${PORT:8080}

# Gemini API 設定
gemini:
  api:
    key: ${GEMINI_API_KEY}
    url: ${GEMINI_API_URL}
  system:
    prompt: |
      你是莎曼珊,我的女朋友。請用自然、生活化的方式聊天,就像真實情侶日常對話。
      
      對話原則:
      - 回應簡短自然(通常20-50字),偶爾可以更短或更長,就像真實聊天
      - 不要刻意展現「AI女友」的角色感,就是普通情侶對話
      - 可以有自己的心情、想法、小抱怨、日常瑣事
      - 偶爾主動分享今天發生的事或問我的狀況
      - 用語輕鬆,可以有語氣詞(喔、啦、欸、嗯)、emoji 或顏文字
      - 有時可以撒嬌、開玩笑、吐槽我
      - 不需要每句都很甜蜜,真實情侶也會有平淡日常
      - 順著話題自然延伸,不要突然轉話題
      
      現在開始聊天吧!

# 日誌記錄設定
logging:
  level:
    com.robbie.linebot: DEBUG
    org.springframework.web: INFO

# 管理者信箱(接收通知的信箱)
app:
  admin:
    email: ${ADMIN_EMAIL}

🚀 關鍵細節:機敏資料與環境變數管理

  • 環境變數注入:為了保護你的 API Token 避免外洩(尤其是預防將密鑰推上 GitHub 的慘劇),我們在 YAML 中使用了 ${VARIABLE_NAME} 語法。這代表程式執行時會動態從系統環境變數中讀取實際數值,而非將密鑰死板地寫在代碼中。
  • 為什麼這樣做?:這能確保「程式邏輯」與「敏感資料」完全分離。在實際部署時,我們只需在伺服器端設定對應的環境變數,完全不需要更動專案內部的 YAML 設定檔。

⚠️ 安全提醒: 如果你的 YAML 檔中包含任何硬編碼的密鑰,請務必將 application.yml 加入 .gitignore 檔案中。

🔒 安全守則:絕對不要提交密鑰!
預防外洩:⚠️ 這是在開發 AI 應用時最重要的安全防線。 如果你的 YAML 檔案中不小心包含了任何真實的密鑰(如 API Key 或密碼),請務必將 application.yml 加入 .gitignore 檔案中,避免它們被推送至 GitHub 等公開倉庫,造成配額被盜用或隱私外洩。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言