Java Portal | Программирование
13K subscribers
1.01K photos
78 videos
33 files
833 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Интеграция ChatGPT в Java

С ростом интереса к нейросетям всё больше приложений начинают использовать ИИ в своей бизнес-логике. Встраивание ChatGPT может быть реализовано по-разному

1. Пользователь вводит текст, приложение отправляет его в ChatGPT и возвращает ответ
2. Ввод отправляется в ChatGPT для дополнения или расширения и сохраняется в базу
3. ChatGPT используется как помощник для следующих действий пользователя

Механика всегда одна и та же: отправляется HTTP-запрос к API, на который приходит HTTP-ответ. Браузер делает это напрямую, Java-код делает то же самое с любым HTTP-клиентом — RestTemplate, WebClient, HttpClient, OkHttp и т д

Отличие в том, что запросы из приложения должны содержать ваш API-ключ. Его передают в заголовке Authorization

Как подготовить проект

1. Зарегистрироваться на platform.openai.com, сгенерировать API Key в разделе API Keys
2. Подключить зависимости. Например, OkHttp для запросов и org.json для разбора ответа

<dependencies>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20240303</version>
</dependency>
</dependencies>


Пример простого клиента

import okhttp3.*;
import org.json.JSONObject;

public class ChatGPTClient {
private static final String API_KEY = "your-api-key-here";
private static final String API_URL = "https://api.openai.com/v1/chat/completions";

public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient();

JSONObject message = new JSONObject()
.put("role", "user")
.put("content", "Привет! Объясни, как работает JVM");

JSONObject body = new JSONObject()
.put("model", "gpt-3.5-turbo")
.put("messages", new org.json.JSONArray().put(message));

Request request = new Request.Builder()
.url(API_URL)
.header("Authorization", "Bearer " + API_KEY)
.header("Content-Type", "application/json")
.post(RequestBody.create(body.toString(), MediaType.get("application/json")))
.build();

try (Response response = client.newCall(request).execute()) {
JSONObject json = new JSONObject(response.body().string());
String reply = json.getJSONArray("choices")
.getJSONObject(0)
.getJSONObject("message")
.getString("content");
System.out.println("ChatGPT ответ: " + reply);
}
}
}


Что тут происходит

> создаём HTTP-клиент
> формируем JSON с сообщением
> добавляем заголовки и ключ
> отправляем POST-запрос на API
> парсим JSON-ответ и выводим текст

Таким образом, интеграция ChatGPT в Java-приложение сводится к обычной работе с HTTP API: собрать запрос, добавить ключ и обработать результат.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🤯2
7 шаблонов проектирования, которые должен знать каждый разработчик

Осознаёте вы это или нет, но большинство этих шаблонов вы уже используете.

Шаблоны проектирования — это переиспользуемые решения типовых задач в программировании. Они служат шаблонами, которые можно применять в разных языках и на разных платформах.

В 1994 году четверо разработчиков, известные как Gang of Four (Банда четырёх), написали книгу, где описали 23 шаблона проектирования. Эта книга стала классикой, и описанные в ней подходы актуальны до сих пор.

Шаблоны делятся на три группы:

🟢Порождающие — управляют созданием объектов с гибкостью.
🟣Структурные — помогают организовать объекты в более крупные структуры.
🟡Поведенческие — определяют, как объекты взаимодействуют друг с другом.

Вот 7 ключевых шаблонов, которые стоит знать:

Singleton — гарантирует, что будет только один экземпляр класса.

Builder — пошагово конструирует сложные объекты.

Factory — создаёт объекты без указания точного класса.

Facade — упрощает работу со сложной системой через единый интерфейс.

Adapter — позволяет работать вместе несовместимым интерфейсам.

Strategy — позволяет динамически подменять алгоритмы.

Observer — поддерживает зависимость между объектами (реакция на события).


Знание этих шаблонов помогает писать более поддерживаемый код и делает проекты понятнее для других разработчиков.

Но важно помнить: не злоупотребляйте ими. Подходящий шаблон в нужной ситуации — это сила. Но если применять их там, где они не нужны, это только усложнит систему.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
Spring Boot с AOP:

Spring Boot позволяет использовать аспектно-ориентированное программирование , чтобы вынести сквозную логику (например, логирование, безопасность или кеширование) отдельно от бизнес-логики.
Можно даже создавать свои аннотации, которые автоматически навешивают нужное поведение, сохраняя код чистым и декларативным

1. Создаётся аннотация @LogExecutionTime

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {}


Её можно навесить на любой метод, чтобы включить замер времени выполнения.

2. Аспект LoggingAspect

@Aspect
@Component
public class LoggingAspect {
@Around("@annotation(LogExecutionTime)")
public Object logExecution(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();

Object result = joinPoint.proceed(); // выполнить метод

long timeTaken = System.currentTimeMillis() - start;
System.out.println(joinPoint.getSignature() + " executed in " + timeTaken + " ms");

return result;
}
}


- Перехватывает вызов методов с аннотацией @LogExecutionTime
- Сохраняет время старта → выполняет метод → считает разницу → выводит результат в лог.

3. Контроллер TestController

@RestController
public class TestController {

@GetMapping("/hello")
@LogExecutionTime
public String hello() throws InterruptedException {
Thread.sleep(500); // имитация работы
return "Hello, World!";
}
}


- Метод hello() помечен @LogExecutionTime
- При каждом запросе на /hello метод будет логироваться с замером времени.

AOP здесь убирает дублирование логики измерения времени.
Вместо того чтобы вставлять System.currentTimeMillis() в каждый метод, всё вынесено в один аспект.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6