环境准备:下载与启动 Ollama

  1. 下载 Ollama 客户端:访问Ollama官网,根据操作系统(Windows/Mac/Linux)下载对应安装包并完成安装。
  2. 获取模型启动命令:
    • 打开 Ollama 官网的「Models」栏目,搜索目标模型(如deepseek-r1:1.5b、llama3:8b等)。
    • 复制模型对应的启动命令(示例:ollama run deepseek-r1:1.5b)。
  3. 启动本地 AI 服务:
    • 打开系统控制台(CMD/PowerShell/Terminal),粘贴启动命令并执行。
    • 首次启动会自动下载模型文件,耐心等待下载完成后,服务将默认运行在 http://localhost:11434。

快速入门:Spring AI 整合步骤

导入核心依赖

<dependencies>
    <!-- Spring AI Ollama 核心依赖 -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-model-ollama</artifactId>
        <!-- 建议指定版本,与Spring Boot版本匹配(示例:0.17.0-->
        <version>0.17.0</version>
    </dependency>
    <!-- Spring Web 依赖(用于提供HTTP接口) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

说明:添加 Spring Web 依赖确保 HTTP 接口正常提供,指定 Ollama 依赖版本可避免版本冲突。

yaml配置

spring:
  application:
    name: ollama-ai-demo
  # Ollama 核心配置
  ai:
    ollama:
      base-url: http://localhost:11434  # Ollama默认服务地址,无需修改(除非自定义端口)
      chat:
        model: deepseek-r1:1.5b  # 已启动的模型名称,必须与控制台启动命令一致
        options:
          temperature: 0.7  # 随机性:0-1,值越高回复越灵活(搞笑场景建议0.7-0.9)
          top_p: 0.9        # 采样阈值:过滤低概率词汇,建议0.8-0.9

# 日志基础配置
logging:
  level:
    root: info
    org.springframework.web: info

配置聊天客户端

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OllamaConfig {

    /**
     * 配置带有角色设定的ChatClient
     * 依赖Spring自动注入的OllamaChatModel(由spring-ai-starter-model-ollama提供)
     */
    @Bean
    public ChatClient chatClient(OllamaChatModel ollamaChatModel) {
        return ChatClient.builder(ollamaChatModel)
                // 系统提示词:明确角色、性格、回复风格
                .defaultSystem("""
                        你是搞笑助手,名字叫邓超,说话风格幽默风趣、接地气,带点综艺感。
                        回复要简洁不啰嗦,尽量用网络热梗、谐音梗或夸张的表达,避免生硬说教。
                        遇到用户提问,优先用搞笑方式回应,同时保证信息准确(若有实际问题)。
                        """)
                .build();
    }
}

提供HTTP聊天接口

/**
     * 聊天接口:支持实时流式输出(类似ChatGPT的打字效果)
     * @param prompt 用户提问内容
     * @return 流式回复(text/event-stream格式,前端可直接渲染)
     */
    @GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> chat(@RequestParam(value = "prompt", required = true) String prompt) {
        // 校验用户输入,避免空请求
        if (prompt == null || prompt.trim().isEmpty()) {
            return Flux.just("请输入有效的提问内容哦~");
        }
        // 流式调用Ollama模型,返回实时回复
        return chatClient.prompt()
                .user(prompt)  // 传入用户提问
                .stream()      // 开启流式输出
                .content();    // 提取回复内容(过滤无关元数据)
    }

进阶配置:开启会话日志(调试 / 审计用)

配置日志增强的 ChatClient

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OllamaLogConfig {

    /**
     * 带会话日志的ChatClient(可与基础客户端共存,通过Bean名称区分)
     */
    @Bean(name = "loggableChatClient")
    public ChatClient loggableChatClient(OllamaChatModel ollamaChatModel) {
        return ChatClient.builder(ollamaChatModel)
                .defaultSystem("你是搞笑助手邓超,回复幽默接地气")
                .defaultAdvisors(new SimpleLoggerAdvisor())  // 开启会话日志:记录请求/响应内容
                .build();
    }
}

日志详细配置(application.yml)

logging:
  level:
    root: info
    # Spring AI 会话日志:DEBUG级别会打印完整的请求/响应内容
    org.springframework.ai.chat.client.advisor: DEBUG
    # 自定义包日志:根据项目实际包名修改(示例:com.example.ollama)
    com.example.ollama: DEBUG
  # 日志输出格式(可选:优化可读性)
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"

使用说明与注意事项

  1. 模型启动验证:启动 Ollama 后,可访问 http://localhost:11434,若页面显示「Ollama API」则服务正常。
  2. 接口调用示例:
    • 浏览器访问:http://localhost:8080/api/ai/chat?prompt=讲个冷笑话
  3. 性能优化:
    • 小模型(如 1.5B 参数)适合开发测试,生产环境建议使用 7B/13B 参数模型(需充足内存)。
    • 调整temperature参数:搞笑场景建议 0.7-0.9,需要精准回复时可设为 0.3-0.5。
  4. 常见问题:
    • 接口报错「Connection refused」:检查 Ollama 服务是否启动,或base-url配置错误。
    • 回复缓慢:模型参数越大越耗资源,可切换更小模型(如llama3:8b-instruct)。
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐