spring-ai-alibaba第二章ollama集成EmbeddingModel

1、pom文件

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
 
		<dependency>
			<groupId>org.springframework.ai</groupId>
			<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
		</dependency>
	</dependencies>

2、ollama 需又向量模型,application.yml 内容如下

server:
  port: 10005

spring:
  application:
    name: spring-ai-alibaba-ollama-chat-model-example

  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: llama3.2:1b
      embedding:
        model: bge-m3

3、测试代码如下

package com.alibaba.cloud.ai.example.chat.ollama.controller;

import org.springframework.ai.embedding.Embedding;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.embedding.EmbeddingResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

@RestController
public class EmbeddingController {

    private final EmbeddingModel embeddingModel;

    @Autowired
    public EmbeddingController(EmbeddingModel embeddingModel) {
        this.embeddingModel = embeddingModel;
    }

    @GetMapping("/ai/embedding")
    public Map embed(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of(message));
        List<Embedding> embeddings = embeddingResponse.getResults();
        embeddings.forEach(k -> {
            float[] ff = k.getOutput();
            System.out.println(ff.length);
        });
        return Map.of("embedding", embeddingResponse);
    }
}

测试效果如下

要在本地环境中将 Ollama 和 DeepSeek 集成到基于 Spring 的项目中(假设使用 spring-ai-alibaba),需要完成以下几个关键步骤。以下是详细的介绍: --- ### **一、背景知识** Ollama 和 DeepSeek 均为大模型推理引擎,提供强大的文本生成能力。而 Spring-AI-Alibaba 是阿里巴巴提供的一个 AI 开发套件,可以帮助开发者更轻松地整合第三方 AI 能力。 在此场景下,我们需要搭建一个本地服务架构,使得用户可以通过 Spring 应用程序调用 Ollama 和 DeepSeek 提供的功能。 --- ### **二、准备工作** 1. **安装 Ollama** 官方文档:https://ollama.ai/ 下载对应平台的二进制文件并启动服务,默认监听地址为 `http://localhost:11434`。 2. **下载 DeepSeek 模型** 如果你需要自托管 DeepSeek 模型,可以从 Hugging Face 获取对应的权重文件,并将其部署到你的系统上。 3. **创建 Spring Boot 工程** 创建一个新的 Spring Boot 项目(推荐使用 https://start.spring.io 初始化)。确保加入以下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-ai-alibaba-starter</artifactId> <version>x.x.x</version> </dependency> ``` 4. **配置 HTTP 请求工具** 可以选择 RestTemplate 或 WebClient 来发送请求给 Ollama 和 DeepSeek API。 --- ### **三、核心代码实现** #### **1. 配置 Ollama 和 DeepSeek 地址** 在 `application.yml` 中定义两者的访问路径: ```yaml ollama: url: http://localhost:11434/generate deepseek: url: http://localhost:7860/api/inference # 替换为你实际的服务端口 ``` #### **2. 封装请求方法** 编写统一的接口用于向两个外部服务发起调用: ```java import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @Service public class AiService { private final String ollamaUrl; private final String deepseekUrl; private final RestTemplate restTemplate = new RestTemplate(); public AiService() { this.ollamaUrl = "http://localhost:11434/generate"; this.deepseekUrl = "http://localhost:7860/api/inference"; // 示例URL } /** * 发送请求到 Ollama */ public String callOllama(String prompt) { HttpHeaders headers = new HttpHeaders(); headers.set("Content-Type", "application/json"); Map<String, Object> body = Map.of( "prompt", prompt, "mo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非ban必选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值