要在Spring项目中集成Ollama并调用DeepSeek模型,可以按照以下步骤进行。我们将使用Spring AI来简化AI模型的集成和调用。

### 1. 环境准备

首先,确保你已经安装了以下工具和库:

- Java Development Kit (JDK) 17+
- Maven 或 Gradle
- Spring Boot 3.x
- Ollama(确保Ollama服务已经启动并可以访问)

### 2. 创建Spring Boot项目

使用Spring Initializr创建一个新的Spring Boot项目,添加以下依赖:

- Spring Web
- Spring AI (如果Spring AI还没有正式发布,可以使用相关的AI库,如Deeplearning4j或TensorFlow Java API)

### 3. 配置Ollama

确保Ollama服务已经启动,并且你知道它的API地址。通常,Ollama会提供一个REST API来调用模型。

### 4. 添加Spring AI依赖

在`pom.xml`中添加Spring AI依赖(如果可用):

```xml
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-core</artifactId>
    <version>1.0.0</version> <!-- 请使用最新版本 -->
</dependency>
```

如果Spring AI还没有正式发布,你可以使用其他AI库,比如Deeplearning4j:

```xml
<dependency>
    <groupId>org.deeplearning4j</groupId>
    <artifactId>deeplearning4j-core</artifactId>
    <version>1.0.0</version> <!-- 请使用最新版本 -->
</dependency>
```

### 5. 创建Ollama客户端

创建一个Ollama客户端来调用Ollama的API。你可以使用Spring的`RestTemplate`或`WebClient`来发送HTTP请求。

```java
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OllamaClient {

    private final RestTemplate restTemplate;
    private final String ollamaApiUrl = "http://localhost:11434/api/generate"; // Ollama API地址

    public OllamaClient(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String generateText(String prompt) {
        OllamaRequest request = new OllamaRequest(prompt);
        OllamaResponse response = restTemplate.postForObject(ollamaApiUrl, request, OllamaResponse.class);
        return response != null ? response.getResponse() : "No response";
    }

    private static class OllamaRequest {
        private final String prompt;

        public OllamaRequest(String prompt) {
            this.prompt = prompt;
        }

        public String getPrompt() {
            return prompt;
        }
    }

    private static class OllamaResponse {
        private String response;

        public String getResponse() {
            return response;
        }

        public void setResponse(String response) {
            this.response = response;
        }
    }
}
```

### 6. 创建Controller

创建一个Spring Controller来处理HTTP请求并调用Ollama客户端。

```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class AIController {

    private final OllamaClient ollamaClient;

    @Autowired
    public AIController(OllamaClient ollamaClient) {
        this.ollamaClient = ollamaClient;
    }

    @PostMapping("/generate")
    public String generateText(@RequestBody String prompt) {
        return ollamaClient.generateText(prompt);
    }
}
```

### 7. 配置Spring Boot应用

在`application.properties`或`application.yml`中配置Ollama的API地址和其他相关配置。

```properties
ollama.api.url=http://localhost:11434/api/generate
```

### 8. 运行和测试

启动Spring Boot应用,并使用Postman或curl测试`/api/generate`端点。

```bash
curl -X POST -H "Content-Type: application/json" -d '{"prompt":"Hello, how are you?"}' http://localhost:8080/api/generate
```

### 9. 集成DeepSeek模型

如果你需要集成DeepSeek模型,确保你已经将DeepSeek模型加载到Ollama中,并在调用Ollama API时指定模型名称。

```java
public String generateText(String prompt) {
    OllamaRequest request = new OllamaRequest(prompt, "deepseek-model"); // 指定模型名称
    OllamaResponse response = restTemplate.postForObject(ollamaApiUrl, request, OllamaResponse.class);
    return response != null ? response.getResponse() : "No response";
}
```

### 10. 进一步优化

- **异步调用**:使用`WebClient`进行异步调用以提高性能。
- **错误处理**:添加适当的错误处理机制。
- **日志记录**:记录请求和响应以便调试。

通过以上步骤,你可以在Spring项目中成功集成Ollama并调用DeepSeek模型。