本文使用deepseek进行文章润色


初始化Spring Boot项目

使用IDEA创建项目,需选择以下依赖项:

  • Spring Web(构建RESTful接口)

  • Ollama(本地模型集成支持)

推荐使用Java 17+版本以获得最佳兼容性

模型服务配置

application.properties中添加以下配置:

# 服务端口设置
server.port=9000

# Ollama本地服务配置
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.model=deepseek-r1:1.5b

新建控制器

@RestController
@RequestMapping("/api/ai")
public class AiController {

    private final OllamaChatModel chatClient;
    
    // 构造器注入替代字段注入
    public AiController(OllamaChatModel chatClient) {
        this.chatClient = chatClient;
    }

    /**
     * 同步响应接口
     * @param message 用户输入内容
     * @return 完整模型响应
     */
    @CrossOrigin(origins = "*")
    @GetMapping("/sync/{message}")
    public String syncChat(@PathVariable String message) {
        return chatClient.call(message);
    }

    /**
     * 流式响应接口
     * @param message 用户输入内容
     * @return SSE流式数据
     */
    @CrossOrigin(origins = "*")
    @GetMapping(value = "/stream/{message}", 
               produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> streamChat(@PathVariable String message) {
        return chatClient.stream(new Prompt(message));
    }
}

前端示例(Vue3)

const processAIResponse = async () => {
  const userInput = prompt('请输入您的问题');
  if (!userInput?.trim()) return;

  try {
    const response = await fetch(`http://localhost:9000/api/ai/stream/${
      encodeURIComponent(userInput)
    }`);
    
    const reader = response.body.getReader();
    const decoder = new TextDecoder();
    let accumulatedResponse = '';

    while (true) {
      const { done, value } = await reader.read();
      if (done) break;
      
      const chunk = decoder.decode(value, { stream: true });
      accumulatedResponse += chunk;
      
      // 实时更新UI
      updateChatWindow(accumulatedResponse); 
    }
  } catch (error) {
    console.error('请求失败:', error);
    showErrorMessage('AI服务暂不可用');
  }
}

生产环境部署(宝塔面板)

  1. 项目打包

    mvn clean package -DskipTests
  2. 服务器部署

    • 在宝塔「Java项目」模块添加新项目

    • 上传生成的.jar文件

    • 设置运行端口为9000

    • 配置JVM参数(推荐-Xmx512m)

  1. 网络配置

    • 安全组放行9000端口

    • Nginx反向代理配置:

    location /api/ai {
        proxy_pass http://localhost:9000;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_buffering off; // 添加此命令以支持流式输出
    }
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐