最近有小伙伴问我,AI 里的“嵌入模型 API”到底是干嘛的?其实,它就像把文字、图片、数据转成“数字DNA”,方便 AI 理解和处理。在 SpringAI 里,这一套 API 已经封装得很优雅,今天小米就带大家从故事开头一路聊到落地实现,保证看完你能用得飞起。
1.故事开场:为什么要有嵌入模型?
前段时间,我的同事阿辉遇到一个经典问题:
公司知识库的内容太庞大,光靠关键字搜索效率极低,经常搜不到真正相关的答案。于是,老板甩下一句话:
“要让用户输入一句话,系统能立刻找到最相关的资料!”
阿辉一脸懵逼地跑来找我。
我说:“这事啊,用嵌入(Embedding)就能解决。”
嵌入是什么?简单理解:就是把自然语言(文本)转化为一堆高维向量。这样相似的内容就能在“向量空间”里自动靠近,检索、推荐、聚合都不在话下。
SpringAI 里有一套嵌入模型 API,把复杂的细节都封装好了,我们只需要会用,就能轻松上手。
2.嵌入模型 API 概述
在 SpringAI 里,嵌入模型 API 的定位很清晰:
- 统一接口:无论你用的是 OpenAI、Ollama 还是本地模型,调用方式都一致。
- 标准化输入输出:请求就是 EmbeddingRequest,响应就是 EmbeddingResponse。
- 结果可复用:嵌入的结果可以直接拿去做向量数据库检索(比如 Milvus、Pinecone、Postgres+pgvector),也能做相似度计算。
这套 API 就像一座“适配桥梁”,把不同厂商、不同实现的模型统一到一套 Spring 风格的接口下。
一句话总结:写一次代码,随便切换模型实现。
3.核心类:EmbeddingModel
嵌入 API 的核心抽象是 EmbeddingModel。
它是一个接口,定义了嵌入模型应该具备的能力。典型的方法有:
- 调用嵌入:接收文本或文档,返回对应的向量表示。
- 返回 EmbeddingResponse:把模型生成的结果统一打包。
比如你用 OpenAiEmbeddingModel,它就是 EmbeddingModel 的一个具体实现。换成 OllamaEmbeddingModel 也没问题,代码不用大改。
这就是 SpringAI 的强大之处:通过抽象接口,把“变化的部分”交给实现,“不变的部分”交给我们开发者。
4.请求参数:EmbeddingRequest
要跟嵌入模型说话,我们得先准备好“输入材料”。
这时登场的就是 EmbeddingRequest。
它的作用就像一张订单单据,把我们要转换的文本交给模型。常见参数有:
- input:待嵌入的文本,可以是一段话,也可以是多个文档。
- options:模型选项,比如指定使用哪个 embedding 模型。
举个例子,如果你要嵌入一句话:
图片
是不是很直观?这就是典型的 Spring 风格,写起来很顺手。
5.响应结果:EmbeddingResponse
模型跑完之后,返回的就是 EmbeddingResponse。
它里面包含了:
- 一个或多个 Embedding:每一条输入文本对应一个向量。
- 使用的模型信息:方便你追踪是哪个模型干的活。
- 元信息:比如消耗的 tokens,或者额外的调试数据。
开发者最常用的就是取出 Embedding,拿到向量后再存进数据库或者计算相似度。
6.向量本体:Embedding
重点来了!
Embedding 就是嵌入结果的核心载体,它里面有:
- embedding 向量:一个高维数组,比如 [0.021, -0.543, 0.112, ...]。
- 索引:对应输入的第几条文本。
想象一下,如果你输入了三段话,返回结果里就有三个 Embedding,每个都对应一段文本的向量化表示。
这个向量可不是普通数组,它能支撑起相似度计算。比如两段话的余弦相似度越接近 1,就说明它们越相似。
7.可用实现
SpringAI 已经帮我们封装了多种实现:
- OpenAIEmbeddingModel:调用 OpenAI 的 text-embedding 系列模型。
- OllamaEmbeddingModel:支持本地部署的模型,比如 llama2 的 embedding 版本。
- VertexAIEmbeddingModel:对接 Google Vertex AI 的嵌入能力。
- BedrockEmbeddingModel:AWS Bedrock 提供的 embedding 模型。
未来还会有更多厂商接入,比如 Anthropic、智谱等。
更酷的是,如果你想接入自研模型,只要实现 EmbeddingModel 接口就行,完全无缝衔接。
8.场景落地:知识库问答
阿辉听完我的解释后,立刻跑去写了个小 demo:
- 用户输入问题,比如:“如何在 SpringBoot 中使用 Redis 缓存?”
- 系统先把这句话丢给 EmbeddingModel,生成向量。
- 向量拿去查数据库,找最相似的文档。
- 最后把文档交给大模型,总结出自然语言答案。
效果超神!以前搜不到答案的同事,现在一句话就能命中关键文档。
这就是嵌入的魔力。
9.总结
今天我们从故事出发,完整走了一遍 SpringAI 的嵌入模型 API:
- 嵌入模型 API 概述:统一调用,适配多厂商。
- EmbeddingModel:核心接口,定义模型能力。
- EmbeddingRequest:输入载体。
- EmbeddingResponse:结果打包。
- Embedding:向量本体。
- 可用实现:OpenAI、Ollama、Vertex、Bedrock 等。
一句话总结:嵌入模型 API 是 SpringAI 的“向量心脏”,让 AI 能看懂语义,搞定相似度搜索和知识问答。
下次再聊,我会结合 pgvector,带你做一个完整的“企业知识库问答”小系统,把嵌入模型的威力发挥到极致。