Ollama 大模型与 Spring AI 集成方案

环境准备 Ollama 需本地安装并启动服务,默认端口为 11434。确保已下载所需大模型(如 llama2mistral),可通过命令 ollama pull <model-name> 获取。

Spring Boot 后端配置 pom.xml 添加 Spring AI Ollama 依赖:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
    <version>0.8.1</version>
</dependency>

application.yml 配置:

spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: llama2
        temperature: 0.7

核心代码实现 创建 ChatController:

@RestController
@RequestMapping("/api/chat")
public class ChatController {
    private final ChatClient chatClient;

    public ChatController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    @PostMapping
    public String generate(@RequestBody String prompt) {
        return chatClient.call(prompt);
    }
}

Vue 前端交互实现

Axios 请求封装

import axios from 'axios';

const chatAPI = {
  sendMessage: (message) => {
    return axios.post('/api/chat', message, {
      headers: { 'Content-Type': 'text/plain' }
    });
  }
};

组件示例

<template>
  <div>
    <textarea v-model="inputText"></textarea>
    <button @click="sendMessage">发送</button>
    <div>{{ response }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      inputText: '',
      response: ''
    };
  },
  methods: {
    async sendMessage() {
      const res = await chatAPI.sendMessage(this.inputText);
      this.response = res.data;
    }
  }
};
</script>

高级功能扩展

流式响应处理 后端修改为流式接口:

@GetMapping("/stream")
public Flux<String> streamChat(@RequestParam String message) {
    return chatClient.stream(message);
}

前端使用 SSE 接收:

const eventSource = new EventSource(`/api/chat/stream?message=${encodeURIComponent(inputText)}`);
eventSource.onmessage = (e) => {
  this.response += e.data;
};

对话历史管理 Spring 端可注入 ChatMemory 组件:

@Bean
ChatMemory chatMemory() {
    return new InMemoryChatMemory();
}

部署注意事项

跨域配置 Spring Boot 添加配置类:

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://localhost:8080")
                .allowedMethods("*");
    }
}

性能优化建议

  • 设置合理的超时时间
  • 对 Ollama 响应做缓存处理
  • 前端实现消息节流控制

常见问题解决

模型加载失败 检查 Ollama 日志确认模型是否存在:

ollama list

长响应截断 调整 Ollama 启动参数:

OLLAMA_MAX_KEEP_ALIVE=60m ollama serve

中文支持问题 选用支持中文的模型如 qwen

spring:
  ai:
    ollama:
      chat:
        model: qwen:7b

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐