EmbeddingModelFactory/agent_model 表/RAG 流程,前端无感知。这些现有代码零改动。EmbeddingService 即用);另附一个极小的调试 HTTP 接口用于人工验证(可随时删)。application.yaml(zsjz.embedding.*),与项目 zsjz.duckdb/zsjz.insight 等段风格一致,不进数据库。com.zsjz.ai.module.embedding)module/embedding/
├── config/EmbeddingProperties.java # @ConfigurationProperties("zsjz.embedding")
├── core/OnnxEmbeddingEngine.java # 分词 + ONNX 推理 + CLS池化 + L2归一化(懒加载)
├── core/EmbeddingException.java # 模块内异常
├── service/EmbeddingService.java # 业务门面(具体类,风格仿 module/search 的 SearchQueryService)
└── controller/EmbeddingDebugController.java # 可选调试接口
float[] embed(String text); // 单文本 → 1024 维归一化向量
List<float[]> embedBatch(List<String> texts); // 批量(内部按 batch-size 分批推理)
double cosineSimilarity(float[] a, float[] b);
int getDimension(); // 从模型输出自动探测(1024)
boolean isReady(); void warmUp(); // 懒加载状态 / 主动预热
ai.djl.huggingface:tokenizers(0.36.0,2026-09-10 发布)—— 直接加载 bge-m3/tokenizer.json,原生 Rust 分词com.microsoft.onnxruntime:onnxruntime(1.30.0 左右,校验 metadata 后定版)—— 各平台 CPU native 内置zsjz.embedding:model-path(默认 bge-m3,相对 user.dir)、max-seq-len(默认 8192)、batch-size(默认 8)、intra-op-threads、opt-level(默认 BASIC)、enabledonnx/model.onnx + model.onnx_data 外部权重(找不到 onnx/model.onnx 时回退 model.onnx)last_hidden_state[:, 0](CLS)→ L2 归一化(bge-m3 官方 dense 用法)EmbeddingException,模型目录缺失给出明确提示POST /js/a/embedding/debug,body {"texts": ["转账给可疑账户", "向陌生账户转移资金"]} → 返回维度、各向量、两两余弦相似度,用于人工确认语义区分度。
mvn -pl ai-server compile 通过max-seq-len 控制onnxruntime_gpu 依赖 + ExecutionProvider 配置即可,API 不变