Spring AI là một project của Spring giúp chúng ta dễ dàng làm việc với các ứng dụng có sử dụng AI, có tích hợp sử dụng các AI provider như OpenAI, Azure OpenAI, Google Gemini, … Trong bài viết này, mình sẽ giới thiệu với các bạn các kiến thức cơ bản về Spring AI để các bạn có thể sử dụng nó trong các ứng dụng có tích hợp sử dụng các AI provider các bạn nhé!
Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ:

Mình sẽ làm một ứng dụng nhỏ tích hợp với OpenAI để truy vấn thông tin nên mình sẽ khai báo sử dụng Spring AI cho OpenAI dependency như sau:
|
1 2 3 4 5 |
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai</artifactId> <version>2.0.0</version> </dependency> |
Các khái niệm AI cơ bản
Trước khi đi vào implement ví dụ, có một số khái niệm về AI mà các bạn cần nắm như sau:
Model là các trained machine-learning models có thể xử lý thông tin request của người dùng và generate output phù hợp với request. Các model này sẽ sử dụng một số lượng lớn dữ liệu được train trước đó để đưa ra các dự đoán, chữ, hình ảnh và các output khác.
Prompts có thể nói nôm na là các input request từ người dùng, thông thường có thể là text input, để AI model dựa vào đó để generate output.
Prompt Templates là các template dùng để tạo các prompt. Chúng ta sẽ cần phải thay thế các placeholder được định nghĩa trong template bằng các giá trị mà chúng ta muốn để tạo được prompt từ các giá trị này.
Embeddings là biểu diễn các vector số của nội dung, chẳng hạn như văn bản. Embedding model chuyển đổi văn bản thành các vector số, nắm bắt thông tin ngữ nghĩa về nội dung. Các vector này có thể được sử dụng cho các tác vụ như tìm kiếm ngữ nghĩa, so sánh độ tương đồng và tạo nội dung được tăng cường bằng truy xuất (RAG).
Tokens là các đơn vị văn bản được xử lý bởi các AI model. Một token có thể đại diện cho toàn bộ một từ, một phần của từ, dấu câu hoặc một phần khác của văn bản. Các AI model sẽ chuyển đổi input đầu vào thành token và tạo ra ouput dưới dạng một chuỗi token, sau đó được chuyển đổi ngược lại thành văn bản dễ đọc đối với con người.
Hiểu các khái niệm cơ bản trên, các bạn sẽ hình dung ở mức high level cách mà một ứng dụng AI hoạt động sẽ như thế nào đó các bạn!
Spring AI cơ bản
Để integrate với các AI provider, Spring AI định nghĩa một interface tên là Model với ModelRequest và ModelResponse:
|
1 2 3 |
public interface Model<TReq extends ModelRequest<?>, TRes extends ModelResponse<?>> { TRes call(TReq request); } |
Có 7 sub-interface từ interface Model là:
- ChatModel
- ImageModel
- DocumentEmbeddingModel
- TextToSpeechModel
- TranscriptionModel
- ModerationModel
- và EmbeddingModel
Tương ứng với từng AI provider thì sẽ có implementation riêng, các bạn nhé!
Cho OpenAI, các implementation cho 6 interface ChatModel, ImageModel, TextToSpeechModel, TranscriptionModel, ModerationModel và EmbeddingModel lần lượt là OpenAiChatModel, OpenAiImageModel, OpenAiAudioSpeechModel, OpenAiAudioTranscriptionModel, OpenAiModerationModel, OpenAiEmbeddingModel. Hiện tại thì chưa có implementation cho interface DocumentEmbeddingModel, các bạn nhé!
Cho ví dụ của bài viết này, mình sẽ sử dụng class ChatModel để làm việc với OpenAI, các bạn nhé!
Hiện thực ví dụ
Để integrate với OpenAI, trước tiên, các bạn cần tạo mới một API key trong OpenAI platform bằng cách đi đến trang https://platform.openai.com/api-keys và click vào nút “Create new secret key” như sau:

API key này dùng để authenticate với OpenAI API, đó các bạn! Hãy lưu thông tin API key này ở đâu đó để có thể sử dụng lại sau này, các bạn nhé!
Các bạn cũng cần thêm Credit:

để có thể sử dụng các OpenAI APIs, các bạn nhé!
Để cấu hình thông tin OpenAI với Spring AI, các bạn có thể sử dụng class OpenAiChatOptions.
|
1 2 3 4 5 6 7 |
@Bean OpenAiChatOptions chatOptions() { return OpenAiChatOptions.builder() .apiKey("<YOUR_API_KEY_HERE>") .model(com.openai.models.ChatModel.GPT_5_NANO.asString()) .build(); } |
Ở đây, chúng ta sẽ sử dụng các cấu hình mặc định của Spring AI dành cho OpenAI API, chỉ có API key và model mà chúng ta muốn sử dụng thì các bạn cần phải cấu hình riêng biệt thôi, các bạn nhé!
Các bạn có thể chọn OpenAI Model mà các bạn muốn sử dụng. Ở đây, mình đang khai báo sử dụng model “gpt-5-nano” với cost rẻ để tiết kiệm chi phí.
Bây giờ, chúng ta sẽ khởi tạo bean của class ChatModel từ đối tượng của class OpenAiChatOptions như sau:
|
1 2 3 4 |
@Bean ChatModel chatModel(OpenAiChatOptions chatOptions) { return OpenAiChatModel.builder().options(chatOptions).build(); } |
Với khai báo trên, Spring sẽ tự động khởi tạo đối tượng OpenAiChatOptions, sau đó là đối tượng của interface ChatModel là OpenAiChatModel trong Spring container, chúng ta chỉ cần ingest vào và sử dụng mà thôi:
|
1 2 3 4 |
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext( AppConfiguration.class); ChatModel chatModel = context.getBean(ChatModel.class); |
Bây giờ thì chúng ta có thể sử dụng class ChatModel để truy vấn thông tin từ OpenAI rồi đó các bạn.
Ví dụ của mình như sau:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package com.huongdanjava.springai; import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Application { static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext( AppConfiguration.class); ChatModel chatModel = context.getBean(ChatModel.class); ChatResponse chatResponse = chatModel.call( new Prompt("Do you know about Huong Dan Java website?")); System.out.println(chatResponse.getResult()); } } |
Các bạn hãy thử kiểm tra kết quả như thế nào nhé!
Kết quả của mình như sau:

Các bạn có thể xem video ở đây:
