Технологии

Подключаем LLMку в свой Java/Kotlin проект через Docker

Всем привет, сегодня я расскажу как подключить LLMку через докер в ваш проект под разные задачи: от рабочих до бытовых. Мы будем использовать Java/Kotlin + Docker + Ollama. Немного о Ollama Ollama — это платформа для локального запуска и управления LLM (больших языковых моделей) на своём компьютере. Она нужна, чтобы использовать и тестировать модели вроде GPT или LLaMA без облака, хранить их локально и интегрировать в свои приложения. Я же сегодня буду вам показывать пример на llama3:8b . В первую очередь Llama 3‑8B оптимизирована для общего текстового интеллекта: от ответов на вопросы до прочих повседневных задач. Со списком всех возможных моделей можно ознакомиться — тут. Подключаем Ollama в Docker Для того, чтобы подключить Ollama в докер нужно выполнить всего пару команд Запускаем докер контейнер с ollama - docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama в качестве порта можно использовать любые значенияПереходим в контейнер - docker exec -it ollama bash Скачиваем нужную вам модель(список все моделей выше) - ollama pull llama3:8b Вместоllama3:8b указываем любую модель под ваши задачи Результат у вас должен получится следующий: Получаем доступ к Ollama через Java/Kotlin Для вызова и работы с ollama мы будем использовать любую библиотеку для вызовов http методов, в своем же примере я буду использовать Spring + RestTemplate. Мы с вами создадим простой запрос для генерации анекдотов. Смех, как известно, продлевает жизнь! Давайте начнем с создания двух классов DTO для обмена данными: @Data @NoArgsConstructor @AllArgsConstructor public class OllamaRequest { private String model; private String prompt; private Boolean stream; } @Data @NoArgsConstructor @AllArgsConstructor public class OllamaResponse { private String response; private Boolean done; } Затем я предлагаю сделать класс для properties: @Data @ConfigurationProperties("app.ollama") public class OllamaProperties { private String urlGenerate; private String model; } application.yaml выглядит следующим образом: app: ollama: url-generate: http://localhost:11434/api/generate model: llama3:8b Теперь давайте напишем класс для вызова метода ollama. Обращаемся к Ollama по нашей model из application вызывая ручку /api/generate получаем ответ и возвращаем его: @Service @RequiredArgsConstructor public class OllamaClient { private final RestTemplate restTemplate; private final OllamaProperties ollamaProperties; public OllamaResponse generateByPromt(String promt) { HttpEntity request = createRequest(promt); return restTemplate.postForEntity(ollamaProperties.getUrlGenerate(), request, OllamaResponse.class).getBody(); } private HttpEntity createRequest(String promt) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); OllamaRequest request = new OllamaRequest(ollamaProperties.getModel(), promt, false); return new HttpEntity<>(request, headers); } } Затем создаем сервис, который будет генерировать наш promt(запрос). В нашем случае мы хотим получить 1 анекдот: @Service @RequiredArgsConstructor public class OllamaService { private final OllamaClient ollamaClient; public String getJoke() { return ollamaClient.generateByPromt("Расскажи мне 1 анекдот").getResponse(); } } Теперь нужно вызвать метод getJoke, я буду использовать обычный RestController: @RestController @RequiredArgsConstructor public class OllamaController { private final OllamaService ollamaService; @PostMapping("/generate/joke") public String generateJoke() { return ollamaService.getJoke(); } } Ну что же, теперь нам с вами остается только проверить всю картинку целиком, в Postman отправляем запрос: С юмором у ollama пока проблемки, но с другими задачи она справляется на ура! Итог Сегодня мы посмотрели, как интегрировать LLM в Java или Kotlin-приложение. Этот подход универсален и работает с любым языком программирования, а для примера мы выбрали Java. С помощью Ollama можно решать разные задачи — от автоответчиков до поиска нужной информации. Всем спасибо за внимание, хорошего дня!

Фильтры и сортировка