为了账号安全,请及时绑定邮箱和手机立即绑定

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

如何使用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)

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消