本地部署大模型并调用

qwen2:0.5b,只有 400MB 左右,中文效果也不错。

步骤:

下载安装 Ollama:https://ollama.com/download/windows

安装完成后打开 CMD/PowerShell:

# 拉取轻量模型(约400MB)
ollama pull qwen2:0.5b

# 测试运行
ollama run qwen2:0.5b

image

 

<!-- 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) {}
}

image

 

posted @ 2026-01-09 14:19  蔡徐坤1987  阅读(5)  评论(0)    收藏  举报