继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

如何使用Spring Boot AI Ollama(Llama3)构建生成式AI

狐的传说
关注TA
已关注
手记 332
粉丝 88
获赞 555

如何使用Spring Boot AI Ollama(Llama3)构建生成式AI应用

我们正在使用Ollama构建Spring AI应用

Ollama 很可能是某个特定的AI模型或服务,可能是因为品牌或风格的原因而以动物“羊驼”命名。然而,由于缺乏进一步的上下文,很难提供关于 Ollama 的具体信息。

通常,像 Ollama 这样的 AI 模型和服务用于各种自然语言处理(NLP)任务,例如:

  1. 文本生成:根据给定的提示或上下文生成类似人类的文本。
  2. 语言理解:理解和处理自然语言查询或命令。
  3. 聊天机器人和对话界面:构建聊天机器人或对话代理,以便用自然语言与用户交互。
  4. 内容创作:为各种目的生成内容,例如文章、故事或产品描述。
示例应用
Ollama 设置
  1. 从官方网站下载 ollama

下载完成后,安装安装文件并打开 http://localhost:11434/

现在它已经在你的本地成功运行了。

2. “ollama run llama3” 运行此命令以在您的系统中下载llama3。

Spring Boot 设置
  • 通过 Spring initialize 创建一个包含 web 和 Ollama AI 的 Spring Boot 项目。
  • 需要注意的是,这是一个实验性项目,在此阶段只有快照版本可用。

项目结构

  • 创建 application.properties 文件。
    spring.application.name=spring-AI  
    spring.ai.ollama.base-url=http://localhost:11434/api  
    spring.ai.ollama.model=llama3  
    server.port=8686  
    spring.main.allow-bean-definition-overriding=true
  • 创建 LlamaResponse 模型以表示服务响应
    package com.ai.spring.AI.repsonse;  

    import lombok.Data;  
    import lombok.experimental.Accessors;  

    @Data  
    @Accessors(chain = true)  
    public class LlamaResponse {  

        private String 消息;  
    }
  • 创建 LlamaAiService 接口
    包 com.ai.spring.AI.service;  

    导入 com.ai.spring.AI.repsonse.LlamaResponse;  

    公共接口 LlamaAiService {  

        LlamaResponse generateMessage(String prompt);  
        LlamaResponse generateJoke(String topic);  
    }
  • 创建 LlamaAiServiceImpl 接口
    package com.ai.spring.AI.service.impl;  

    import com.ai.spring.AI.repsonse.LlamaResponse;  
    import com.ai.spring.AI.service.LlamaAiService;  
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.stereotype.Service;  

    @Service  
    public class LlamaAiServiceImpl implements LlamaAiService {  

        @Autowired  
        private OllamaChatClient chatClient;  

        @Override  
        public LlamaResponse generateMessage(String promptMessage) {  
            final String llamaMessage = chatClient.generate(promptMessage);  
            return new LlamaResponse().setMessage(llamaMessage);  
        }  

        @Override  
        public LlamaResponse generateJoke(String topic) {  
            final String llamaMessage = chatClient.generate(String.format("告诉我一个关于%s的笑话", topic));  
            return new LlamaResponse().setMessage(llamaMessage);  
        }  
    }
  • 创建 ChatClient 接口
    包 com.ai.spring.AI.service;  

    公接口 ChatClient {  
        字符串 generate(字符串 prompt);  
    }

. 创建 OllamaChatClient 服务实现

    package com.ai.spring.AI.service.impl;  

    import com.ai.spring.AI.service.ChatClient;  
    import org.springframework.beans.factory.annotation.Value;  
    import org.springframework.stereotype.Component;  
    import org.springframework.web.client.HttpClientErrorException;  
    import org.springframework.web.client.RestTemplate;  

    import java.util.HashMap;  
    import java.util.Map;  

    @Component("customOllamaChatClient")  
    public class OllamaChatClient implements ChatClient {  

        private final RestTemplate restTemplate;  
        private final String baseUrl;  
        private final String model;  

        public OllamaChatClient(RestTemplate restTemplate, @Value("${spring.ai.ollama.base-url}") String baseUrl, @Value("${spring.ai.ollama.model}") String model) {  
            this.restTemplate = restTemplate;  
            this.baseUrl = baseUrl;  
            this.model = model;  
        }  

        @Override  
        public String generate(String prompt) {  
            String url = String.format("%s/generate", baseUrl);  
            Map<String, Object> request = new HashMap<>();  
            request.put("model", model);  
            request.put("prompt", prompt);  
            request.put("stream", false);  

            try {  
                // 打印 URL 和请求负载以进行调试  
                System.out.println("URL: " + url);  
                System.out.println("Request: " + request);  

                return restTemplate.postForObject(url, request, String.class);  
            } catch (HttpClientErrorException e) {  
                // 记录错误详情  
                System.err.println("Error: " + e.getStatusCode() + " - " + e.getResponseBodyAsString());  
                throw e;  
            }  
        }  
    }

. 创建 AppConfig

    package com.ai.spring.AI.config;  

    import org.springframework.context.annotation.Bean;  
    import org.springframework.context.annotation.Configuration;  
    import org.springframework.web.client.RestTemplate;  

    @Configuration  
    public class AppConfig {  

        @Bean  
        public RestTemplate restTemplate() {  
            return new RestTemplate();  
        }  
    }

代码片段保持不变。

. 创建 LlamaRestController

    package com.ai.spring.AI.controller;  

    import com.ai.spring.AI.repsonse.LlamaResponse;  
    import com.ai.spring.AI.service.impl.LlamaAiServiceImpl;  
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.http.HttpStatus;  
    import org.springframework.http.ResponseEntity;  
    import org.springframework.web.bind.annotation.*;  

    @RestController  
    public class LlamaRestController {  

        @Autowired  
        private LlamaAiServiceImpl llamaAiService;  

        @GetMapping("api/v1/ai/generate")  
        public ResponseEntity<LlamaResponse> generate(  
                @RequestParam(value = "promptMessage", defaultValue = "为什么天空是蓝色的?")  
                String promptMessage) {  
            final LlamaResponse aiResponse = llamaAiService.generateMessage(promptMessage);  
            return ResponseEntity.status(HttpStatus.OK).body(aiResponse);  
        }  

        @PostMapping("api/v1/ai/generate/joke/{topic}")  
        public ResponseEntity<LlamaResponse> generateJoke(@PathVariable String topic) {  
            final LlamaResponse aiResponse = llamaAiService.generateJoke(topic);  
            return ResponseEntity.status(HttpStatus.OK).body(aiResponse);  
        }  
    }

@ 启动您的Spring Boot应用并访问这些URL

http://localhost:8686/api/v1/ai/generate/joke/student

http://localhost:8686/api/v1/ai/生成

检查进入 olama 命令提示符也

感谢你,继续学习!

关注我获取更多精彩内容

ajtech

感谢你读到最后。在你离开之前:

[关注我在Medium上的文章](https://medium.com/https:/medium.com/@saijanand)

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP