diff --git a/mateclaw-server/src/main/java/vip/mate/llm/embedding/EmbeddingModelFactory.java b/mateclaw-server/src/main/java/vip/mate/llm/embedding/EmbeddingModelFactory.java index 4d13b4ca..d47b44a8 100644 --- a/mateclaw-server/src/main/java/vip/mate/llm/embedding/EmbeddingModelFactory.java +++ b/mateclaw-server/src/main/java/vip/mate/llm/embedding/EmbeddingModelFactory.java @@ -111,9 +111,16 @@ public class EmbeddingModelFactory { "Embedding provider '" + modelConfig.getProvider() + "' not found in mate_model_provider"); } - EmbeddingProtocol protocol = EmbeddingProtocol.fromProviderId(provider.getProviderId()); - log.info("[EmbeddingFactory] Building embedding model: provider={}, model={}, protocol={}", - provider.getProviderId(), modelConfig.getModelName(), protocol); + // Use chatModel column (same signal as ModelProtocol.fromChatModel) rather than + // providerId substring matching. dashscope-compat has "dashscope" in its id but + // uses OpenAIChatModel + compatible-mode URL — routing it to DASHSCOPE_EMBEDDING + // causes DashScopeApi to construct a native path that returns 404 against the + // compat base URL. + EmbeddingProtocol protocol = "DashScopeChatModel".equals(provider.getChatModel()) + ? EmbeddingProtocol.DASHSCOPE_EMBEDDING + : EmbeddingProtocol.OPENAI_EMBEDDING; + log.info("[EmbeddingFactory] Building embedding model: provider={}, chatModel={}, model={}, protocol={}", + provider.getProviderId(), provider.getChatModel(), modelConfig.getModelName(), protocol); return switch (protocol) { case DASHSCOPE_EMBEDDING -> buildDashScope(provider, modelConfig); diff --git a/mateclaw-server/src/main/java/vip/mate/llm/model/EmbeddingProtocol.java b/mateclaw-server/src/main/java/vip/mate/llm/model/EmbeddingProtocol.java index 2a381d10..a6530f88 100644 --- a/mateclaw-server/src/main/java/vip/mate/llm/model/EmbeddingProtocol.java +++ b/mateclaw-server/src/main/java/vip/mate/llm/model/EmbeddingProtocol.java @@ -10,7 +10,9 @@ package vip.mate.llm.model; *
- * 通过 {@link #fromProviderId} 从 providerId 推断协议,新增 provider 时只需扩展这里。 + * 注意:{@link EmbeddingModelFactory} 现在优先通过 {@code chatModel} 列判断协议 + * (与 {@link ModelProtocol#fromChatModel} 保持一致),{@link #fromProviderId} 已不再使用。 + * 保留该方法仅作参考;不要在新代码中调用它。 * * @author MateClaw Team */