為什么說“嵌入”是 AI 的靈魂?一文帶你玩轉(zhuǎn) SpringAI 向量模型
最近有小伙伴問我,AI 里的“嵌入模型 API”到底是干嘛的?其實,它就像把文字、圖片、數(shù)據(jù)轉(zhuǎn)成“數(shù)字DNA”,方便 AI 理解和處理。在 SpringAI 里,這一套 API 已經(jīng)封裝得很優(yōu)雅,今天小米就帶大家從故事開頭一路聊到落地實現(xiàn),保證看完你能用得飛起。
1.故事開場:為什么要有嵌入模型?
前段時間,我的同事阿輝遇到一個經(jīng)典問題:
公司知識庫的內(nèi)容太龐大,光靠關(guān)鍵字搜索效率極低,經(jīng)常搜不到真正相關(guān)的答案。于是,老板甩下一句話:
“要讓用戶輸入一句話,系統(tǒng)能立刻找到最相關(guān)的資料!”
阿輝一臉懵逼地跑來找我。
我說:“這事啊,用嵌入(Embedding)就能解決。”
嵌入是什么?簡單理解:就是把自然語言(文本)轉(zhuǎn)化為一堆高維向量。這樣相似的內(nèi)容就能在“向量空間”里自動靠近,檢索、推薦、聚合都不在話下。
SpringAI 里有一套嵌入模型 API,把復雜的細節(jié)都封裝好了,我們只需要會用,就能輕松上手。
2.嵌入模型 API 概述
在 SpringAI 里,嵌入模型 API 的定位很清晰:
- 統(tǒng)一接口:無論你用的是 OpenAI、Ollama 還是本地模型,調(diào)用方式都一致。
- 標準化輸入輸出:請求就是 EmbeddingRequest,響應就是 EmbeddingResponse。
- 結(jié)果可復用:嵌入的結(jié)果可以直接拿去做向量數(shù)據(jù)庫檢索(比如 Milvus、Pinecone、Postgres+pgvector),也能做相似度計算。
這套 API 就像一座“適配橋梁”,把不同廠商、不同實現(xiàn)的模型統(tǒng)一到一套 Spring 風格的接口下。
一句話總結(jié):寫一次代碼,隨便切換模型實現(xiàn)。
3.核心類:EmbeddingModel
嵌入 API 的核心抽象是 EmbeddingModel。
它是一個接口,定義了嵌入模型應該具備的能力。典型的方法有:
- 調(diào)用嵌入:接收文本或文檔,返回對應的向量表示。
- 返回 EmbeddingResponse:把模型生成的結(jié)果統(tǒng)一打包。
比如你用 OpenAiEmbeddingModel,它就是 EmbeddingModel 的一個具體實現(xiàn)。換成 OllamaEmbeddingModel 也沒問題,代碼不用大改。
這就是 SpringAI 的強大之處:通過抽象接口,把“變化的部分”交給實現(xiàn),“不變的部分”交給我們開發(fā)者。
4.請求參數(shù):EmbeddingRequest
要跟嵌入模型說話,我們得先準備好“輸入材料”。
這時登場的就是 EmbeddingRequest。
它的作用就像一張訂單單據(jù),把我們要轉(zhuǎn)換的文本交給模型。常見參數(shù)有:
- input:待嵌入的文本,可以是一段話,也可以是多個文檔。
- options:模型選項,比如指定使用哪個 embedding 模型。
舉個例子,如果你要嵌入一句話:
圖片
是不是很直觀?這就是典型的 Spring 風格,寫起來很順手。
5.響應結(jié)果:EmbeddingResponse
模型跑完之后,返回的就是 EmbeddingResponse。
它里面包含了:
- 一個或多個 Embedding:每一條輸入文本對應一個向量。
- 使用的模型信息:方便你追蹤是哪個模型干的活。
- 元信息:比如消耗的 tokens,或者額外的調(diào)試數(shù)據(jù)。
開發(fā)者最常用的就是取出 Embedding,拿到向量后再存進數(shù)據(jù)庫或者計算相似度。
6.向量本體:Embedding
重點來了!
Embedding 就是嵌入結(jié)果的核心載體,它里面有:
- embedding 向量:一個高維數(shù)組,比如 [0.021, -0.543, 0.112, ...]。
- 索引:對應輸入的第幾條文本。
想象一下,如果你輸入了三段話,返回結(jié)果里就有三個 Embedding,每個都對應一段文本的向量化表示。
這個向量可不是普通數(shù)組,它能支撐起相似度計算。比如兩段話的余弦相似度越接近 1,就說明它們越相似。
7.可用實現(xiàn)
SpringAI 已經(jīng)幫我們封裝了多種實現(xiàn):
- OpenAIEmbeddingModel:調(diào)用 OpenAI 的 text-embedding 系列模型。
- OllamaEmbeddingModel:支持本地部署的模型,比如 llama2 的 embedding 版本。
- VertexAIEmbeddingModel:對接 Google Vertex AI 的嵌入能力。
- BedrockEmbeddingModel:AWS Bedrock 提供的 embedding 模型。
未來還會有更多廠商接入,比如 Anthropic、智譜等。
更酷的是,如果你想接入自研模型,只要實現(xiàn) EmbeddingModel 接口就行,完全無縫銜接。
8.場景落地:知識庫問答
阿輝聽完我的解釋后,立刻跑去寫了個小 demo:
- 用戶輸入問題,比如:“如何在 SpringBoot 中使用 Redis 緩存?”
- 系統(tǒng)先把這句話丟給 EmbeddingModel,生成向量。
- 向量拿去查數(shù)據(jù)庫,找最相似的文檔。
- 最后把文檔交給大模型,總結(jié)出自然語言答案。
效果超神!以前搜不到答案的同事,現(xiàn)在一句話就能命中關(guān)鍵文檔。
這就是嵌入的魔力。
9.總結(jié)
今天我們從故事出發(fā),完整走了一遍 SpringAI 的嵌入模型 API:
- 嵌入模型 API 概述:統(tǒng)一調(diào)用,適配多廠商。
- EmbeddingModel:核心接口,定義模型能力。
- EmbeddingRequest:輸入載體。
- EmbeddingResponse:結(jié)果打包。
- Embedding:向量本體。
- 可用實現(xiàn):OpenAI、Ollama、Vertex、Bedrock 等。
一句話總結(jié):嵌入模型 API 是 SpringAI 的“向量心臟”,讓 AI 能看懂語義,搞定相似度搜索和知識問答。
下次再聊,我會結(jié)合 pgvector,帶你做一個完整的“企業(yè)知識庫問答”小系統(tǒng),把嵌入模型的威力發(fā)揮到極致。



































