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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Всем привет, сегодня я расскажу как подключить LLMку через докер в ваш проект под разные задачи: от рабочих до бытовых.

Мы будем использовать Java/Kotlin + Docker + Ollama.

Немного о Ollama

Ollama — это платформа для локального запуска и управления LLM (больших языковых моделей) на своём компьютере. Она нужна, чтобы использовать и тестировать модели вроде GPT или LLaMA без облака, хранить их локально и интегрировать в свои приложения.

Я же сегодня буду вам показывать пример на llama3:8b. В первую очередь Llama 3‑8B оптимизирована для общего текстового интеллекта: от ответов на вопросы до прочих повседневных задач.
Со списком всех возможных моделей можно ознакомиться тут - https://ollama.com/library

Подключаем Ollama в Docker

Для того, чтобы подключить Ollama в докер нужно выполнить всего пару команд

  1. Запускаем докер контейнер с ollama - docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama в качестве порта можно использовать любые значения

  2. Переходим в контейнер - docker exec -it ollama bash

  3. Скачиваем нужную вам модель(список все моделей выше) - 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<OllamaRequest> request = createRequest(promt);
        return restTemplate.postForEntity(ollamaProperties.getUrlGenerate(), request, OllamaResponse.class).getBody();
    }

    private HttpEntity<OllamaRequest> 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 можно решать разные задачи — от автоответчиков до поиска нужной информации.

Всем спасибо за внимание, хорошего дня!)

Источник: https://habr.com/ru/articles/965426/


Интересные статьи

Интересные статьи

В марте 2025 года «1С-Битрикс» выпустил обновление Виртуальной машины до версии 9.0.6, которое исправляет уязвимость, связанную с повышением привилегий bitrix->root (оценка CVSS: 8.0). «1С-Бит...
Оценка персонала является важнейшим инструментом для любой компании, стремящейся к высокому уровню эффективности и конкурентоспособности. В данной статье мы рассмотрим различные методы оценки персонал...
Евгений Петриченко пришел в Битрикс24 студентом. За 16 лет в компании он прошел путь от специалиста техподдержки до эксперта по мобильной разработке. И ни разу не думал сменить место работы.  ...
Есть статьи о недостатках Битрикса, которые написаны программистами. Недостатки, описанные в них рядовому пользователю безразличны, ведь он не собирается ничего программировать.
Привет. Двести пятьдесят шестой день года в разгаре, и мы с ребятами из Авито хотим поздравить всех, кто читает этот блог, с днём программиста и немного окунуться в ностальгию. Под катом вспоми...