RAG Series-2-API with Spring Boot, Ollama & DeepSeek

2025/08/25 AI 共 3390 字,约 10 分钟

基础设施搭建

基于docker搭建最小可用deepseek实例

services:
  ollama:
    image: ollama/ollama:latest  # Ollama 官方镜像(示例名称,请替换为实际镜像)
    container_name: ollama
    restart: always
    environment:
      # 如果 Ollama API 支持通过环境变量配置端口/授权,可在这里设置
      OLLAMA_API_PORT: 11434
    ports:
      - "11434:11434"   # 映射 Ollama API 端口
    volumes:
      - ./ollama_data:/root/.ollama 

获取模型, 可以根据具体机器配置,选择适合的模型.

ollama pull deepseek-r1:1.5b

测试是否可用:

curl -X POST --location "http://10.167.69.123:11434/api/generate" \
    -H "Content-Type: application/json" \
    -d '{
          "model": "deepseek-r1:32b",
          "prompt": "1+1",
          "stream": false
        }'

spring 工程搭建

pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-ollama</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-boot-starter</artifactId>
            <version>3.44.0</version>
        </dependency>

        <dependency>
            <groupId>org.eclipse.jgit</groupId>
            <artifactId>org.eclipse.jgit</artifactId>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

关键配置: OllamaConfig.java

@Configuration
public class OllamaConfig {

    @Value("${spring.ai.ollama.base-url}")
    private String host;

    @Bean
    public OllamaApi getOllamaApi() {
        return new OllamaApi(host);
    }

    @Bean
    public OllamaChatClient getOllamaChatClient() {
        return new OllamaChatClient(getOllamaApi());
    }
}

接口定义: OllamaWeb.java

@RequiredArgsConstructor
@RequestMapping("/api/v1/ollama/")
@RestController
public class OllamaWeb {

    private final OllamaChatClient ollamaChatClient;

    @GetMapping("/generate")
    public ChatResponse generate(@RequestParam String model,
                                 @RequestParam String message) {
        return ollamaChatClient.call(new Prompt(message, OllamaOptions.create().withModel(model)));
    }

    @GetMapping("/generate_stream")
    public Flux<ChatResponse> generateStream(@RequestParam String model,
                                             @RequestParam String message) {
        return ollamaChatClient.stream(new Prompt(message, OllamaOptions.create().withModel(model)));
    }
}

测试API调用

###
# @no-log
# @name api/v1/ollama/generate
GET http://127.0.0.1:8090/api/v1/ollama/generate?model=deepseek-r1:32b&message=hi

###
# @no-log
# @name api/v1/ollama/generate_stream
GET http://127.0.0.1:8090/api/v1/ollama/generate_stream?model=deepseek-r1:32b&message=hi

文档信息

Search

    Table of Contents