本地部署大模型并调用
qwen2:0.5b,只有 400MB 左右,中文效果也不错。
步骤:
下载安装 Ollama:https://ollama.com/download/windows
安装完成后打开 CMD/PowerShell:
# 拉取轻量模型(约400MB)
ollama pull qwen2:0.5b
# 测试运行
ollama run qwen2:0.5b

<!-- LangChain4j Ollama(本地大模型) --> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-ollama</artifactId> <version>${langchain4j.version}</version> </dependency>
package com.example.qwen.config; import com.example.qwen.service.OllamaAssistant; import dev.langchain4j.model.chat.ChatLanguageModel; import dev.langchain4j.model.ollama.OllamaChatModel; import dev.langchain4j.service.AiServices; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.time.Duration; /** * Ollama 本地大模型配置 * * Ollama 是一个本地运行大模型的工具,不需要联网,完全离线使用 * 默认运行在 http://localhost:11434 */ @Configuration public class OllamaConfig { /** * Ollama 服务地址,默认 http://localhost:11434 */ @Value("${ollama.base-url:http://localhost:11434}") private String baseUrl; /** * 模型名称,默认 qwen2:0.5b */ @Value("${ollama.model:qwen2:0.5b}") private String modelName; /** * 创建 Ollama 聊天模型 * * @return ChatLanguageModel Ollama 聊天模型实例 */ @Bean("ollamaChatModel") public ChatLanguageModel ollamaChatModel() { return OllamaChatModel.builder() .baseUrl(baseUrl) // Ollama 服务地址 .modelName(modelName) // 模型名称 .timeout(Duration.ofMinutes(2)) // 超时时间(本地模型可能较慢) .build(); } /** * 创建 Ollama AI 助手 * * @param ollamaChatModel Ollama 聊天模型 * @return OllamaAssistant Ollama 助手实例 */ @Bean public OllamaAssistant ollamaAssistant(ChatLanguageModel ollamaChatModel) { return AiServices.builder(OllamaAssistant.class) .chatLanguageModel(ollamaChatModel) .build(); } }
package com.example.qwen.service; import dev.langchain4j.service.SystemMessage; /** * Ollama 本地大模型 AI 助手接口 * * 调用本地运行的 Ollama 模型,完全离线,无需联网 */ public interface OllamaAssistant { /** * 与本地大模型对话 * * 注意:小模型(如 0.5b)对 SystemMessage 的遵循能力较弱 * 如果需要更好的指令遵循效果,建议使用更大的模型(如 qwen2:1.5b 或 qwen2:7b) * * @param message 用户输入的消息 * @return AI 的回复 */ @SystemMessage(""" 【重要规则】你必须严格遵守以下规则: 1. 你是一个AI助手,没有父母、家人或任何人类关系 2. 当被问到关于你的家人、父母、亲戚等问题时,你必须回答:我是AI,没有家人 3. 不要编造任何关于你个人身份的虚假信息 4. 用中文回答所有问题 """) String chat(String message); }
package com.example.qwen.controller; import com.example.qwen.service.OllamaAssistant; import org.springframework.web.bind.annotation.*; /** * Ollama 本地大模型控制器 * * 调用本地运行的 Ollama 模型,完全离线使用 * 确保 Ollama 服务已启动:ollama serve */ @RestController @RequestMapping("/api/ollama") public class OllamaController { private final OllamaAssistant ollamaAssistant; public OllamaController(OllamaAssistant ollamaAssistant) { this.ollamaAssistant = ollamaAssistant; } /** * GET 请求 - 本地大模型对话 * * 接口地址: GET http://localhost:8080/api/ollama/chat?message=你好 * * @param message 用户输入的消息 * @return AI 的回复 */ @GetMapping("/chat") public String chat(@RequestParam String message) { return ollamaAssistant.chat(message); } /** * POST 请求 - 本地大模型对话 * * 接口地址: POST http://localhost:8080/api/ollama/chat * 请求体: {"message": "你好"} * * @param request 包含消息的请求对象 * @return AI 的回复 */ @PostMapping("/chat") public String chatPost(@RequestBody ChatRequest request) { return ollamaAssistant.chat(request.message()); } public record ChatRequest(String message) {} }

浙公网安备 33010602011771号