TechSummary 2025-07-11
· 閱讀時間約 3 分鐘
用 Java 和 Spring AI 輕鬆建立 Generative AI 應用 🛠️🤖
來源: Docker官方博客
這篇文章介紹如何使用 Java 和 Spring AI,不需學習 Python,便能快速構建本地的 GenAI 應用。重點在於整合 Docker Model Runner、Testcontainers 進行本地模型管理與測試,並利用 Grafana 進行觀測,提升開發與運維的效率。
如何一步步建立 Java GenAI 應用 🚀
- 選擇 Spring Initializr 搭配 Web、OpenAI、Qdrant向量資料庫及 Testcontainers。
- 建立兩個 API 端點:
/chat
與/rag
,前者與模型交互,後者加入文件內容增強模型回答。 - 配置 Docker Model Runner,用於在本地運行情感模型,替代雲端服務。
- 使用預設模型
ai/llama3.1
及 embedding 模型ai/mxbai-embed-large
。
關鍵點:
- 範例中建立一個
ChatController
,透過ChatClient
進行模型互動。 application.properties
配置模型 與 API 金鑰(雖然在 Docker 模型中不需實際金鑰)。- 運行指令示範:
之後向端點傳送請求,例如:
./mvnw spring-boot:test-run
http :8080/chat message=="What's testcontainers?"
- LLM 回應會解釋 Testcontainers 的功能,強調模擬實體服務的優勢。
整合 Testcontainers 進行更可靠的測試 🔍🧪
- 利用 Testcontainers 提供的真正服務容器(如 PostgreSQL、MongoDB、Kafka)進行測試,提高模擬真實環境的可靠性。
- 範例:
from testcontainers.postgresql import PostgreSQLEnvironment
env = PostgreSQLEnvironment()
env.start()
db = env.db()
# 測試操作
env.shutdown() - 文章提醒測試時若用錯 API(如
PostgreSQLEnvironment
不存在),代表產生誤導資訊,強調資料來源要慎選。
改進方法:
透過實際的文件與語境調整模型內容,提升回答準確度。
- 範例中新增
RagController
,結合向量資料庫Qdrant
進行資訊擴充。 - 使用 Spring AI 提供的
QuestionAnswerAdvisor
,進行文件查詢並提供精確回答。
文件內容導入及資料庫配置 📄🔧
- 建立
IngestionConfiguration
,將文件(如/src/test/resources/docs/testcontainers.txt
)讀入並分詞存入向量資料庫。 - 配置
application.properties
,設定 embedding 模型以及資料庫資料集。 - 範例問句:
能得到整合文件資訊的更精準回答。
/rag?message=What's Testcontainers?
自動化測試與觀測 📈🖥️
- 利用
spring-boot-starter-actuator
、Micrometer 及 OpenTelemetry 實現指標和追蹤。 - 架設
GrafanaContainer
,整合 Prometheus、Tempo 與 OpenTelemetry,建立一站式觀測平台。 - 監測模型用量、向量檢索效能與追蹤請求流程。
範例:
- 執行後會取得 Grafana 的存取連結:
http://localhost:64908
- 可以在圖像中看到:
- 模型與向量搜尋的性能指標
- 請求追蹤詳情與使用狀況
總結心得 💡
這次內容證明 Docker 與 Spring AI 結合,能有效降低本地建模、測試與運維的門檻。
- 利用 Docker Model Runner,快速實現本地模型部署,避免雲端依賴。
- Testcontainers 提升測試的現實性與可靠性,確保開發流程更順暢。
- 搭配 Grafana 的 observability,能即時監控應用表現,是現代 AI 應用一個完整的解決方案。
我的看法
這篇文章展現了 Java 生態系統在 AI 開發上的潛力和彈性,特別是對於已有 Java 技術堆疊的團隊來說,是非常方便且強大的技術選擇。未來期待更深入的範例與實際應用案例,幫助企業更快速落地 AI 解決方案。