Подключаем LLMку в свой Java-Kotlin проект через Docker. ai.. ai. docker.. ai. docker. Java.. ai. docker. Java. Kotlin.. ai. docker. Java. Kotlin. ollama.. ai. docker. Java. Kotlin. ollama. ИИ.. ai. docker. Java. Kotlin. ollama. ИИ. искусственный интеллект.

Всем привет, сегодня я расскажу как подключить 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 указываем любую модель под ваши задачи

Результат у вас должен получится следующий:

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

Получаем доступ к 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 отправляем запрос:

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

С юмором у ollama пока проблемки, но с другими задачи она справляется на ура!

Итог

Сегодня мы посмотрели, как интегрировать LLM в Java или Kotlin-приложение. Этот подход универсален и работает с любым языком программирования, а для примера мы выбрали Java. С помощью Ollama можно решать разные задачи — от автоответчиков до поиска нужной информации.

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

Автор: MishaBucha

Источник

Rambler's Top100