java
private float[] langchain4jEmbedding(String text) {
try {
EmbeddingModel model = new AllMiniLmL6V2EmbeddingModel();
Response response = model.embed(text);
return response.content().vector();
} catch (Exception e) {
log.error("LangChain4j embedding 失败: {}", e.getMessage());
return mockEmbedding(text);
}
}
整体一句话总结
输入一段文本 text,使用 LangChain4j 内置的 All‑MiniLM‑L6‑v2 本地ONNX模型 ,把文字转换成浮点型向量数组(float\[\]) ;
如果中间出现任何异常,打印错误日志,返回一段模拟的假向量作为降级兜底,不让程序崩溃。
逐行拆解
private float[] langchain4jEmbedding(String text) {
私有方法,接收字符串文本,返回浮点向量数组,向量就是文本的数字语义表示(RAG知识库检索用)
EmbeddingModel model = new AllMiniLmL6V2EmbeddingModel();
AllMiniLmL6V2EmbeddingModel:LangChain4j自带的本地Embedding模型(all‑MiniLM‑L6‑v2)- ✅不需要调用OpenAI/远程大模型接口,本地运行ONNX,不上传文本到外网>
⚠️注意:第一次new对象时,程序会自动从网络下载onnx模型缓存到本地,断网首次运行会报错。如果你已经手动下载模型文件,可以改成本地加载方式。
Response<Embedding> response = model.embed(text);
-
model.embed(text):文本向量化 -
模型读取文字,分析语义,生成Embedding(嵌入向量)
-
返回的
Response<Embedding>封装了向量+一些元信息return response.content().vector();
-
response.content()拿到Embedding对象 -
.vector()取出float[]浮点数组,也就是最终向量>
后续用途:存入Milvus向量库、做相似度比对,实现文档检索(RAG)
catch (Exception e) {
log.error("LangChain4j embedding 失败,降级使用 mock: {}", e.getMessage());
return mockEmbedding(text);
}
容错降级逻辑
只要向量化抛出异常(常见场景:
首次启动无法下载onnx模型、模型文件损坏、内存不足、文件权限问题等)
- 打印error日志记录原因
- 调用
mockEmbedding(text)返回假的占位向量,避免接口抛出异常中断业务流程
典型适用场景(RAG)
- 文档切片后,调用此方法生成向量存入Milvus
- 用户提问时,问题文本调用此方法得到向量
- 使用向量在Milvus中做相似度检索,找到语义最接近的文档片段