嵌入模型，如果是个新人的话理解起来比较晕。其实，它是一个转换工具：输入数据，输出转换后的矢量数据。

和聊天模型一样，也会有方言及适配（这里略过）。

### 1、嵌入模型的构建

* 原始构建方式


```java
EmbeddingModel  embeddingModel = EmbeddingModel.of(embedding_apiUrl)
        .apiKey(embedding_apiKey)
        .model(embedding_model)
        .build();
```

* 配置器构建方式


```yaml
solon.ai.embed:
  demo:
    apiUrl: "http://127.0.0.1:11434/api/embed" # 使用完整地址（而不是 api_base）
    provider: "ollama" # 使用 ollama 服务时，需要配置 provider
    model: "bge-m3:latest"
```


```java
import org.noear.solon.ai.embedding.EmbeddingConfig;
import org.noear.solon.ai.embedding.EmbeddingModel;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.annotation.Inject;

@Configuration
public class DemoConfig {
    @Bean
    public EmbeddingModel embeddingModel(@Inject("${solon.ai.embed.demo}") EmbeddingConfig config) {
        return EmbeddingModel.of(config).build();
    }
}
```

### 2、调用及快捷调用

EmbeddingModel 主要是在 RAG 存储与检索时，提供向量转换服务的。

* 标准调用

```java
EmbeddingResponse resp = embeddingModel
        .input("比较原始的风格", "能表达内在的大概过程", "太阳升起来了")
        .call();

//打印消息
log.warn("{}", resp.getData()); //向量数据
```

* 快捷调用

```java 
//为一个文本快捷生成矢量数据
float[] data = embeddingModel.embed("比较原始的风格");


//为一批文档快捷生成矢量数据
List<Document> documents = ...;
embeddingModel.embed(documents);
```


### 3、方言适配

嵌入模型（EmbeddingModel）同样支持方言适配。