Иностранный язык с ИИ: Deepseek Languages Models
Используем подготовленный prompt для генерирования Android JAVA приложения, реализующего запрос в ИИ Depseek с помощью API
Запрос:
Напиши код Android 11 JAVA приложения для Android Studio. Приложение должно по нажатию кнопки отправлять указанный ниже запрос на генерирование учебного упражнения в API deepseek AI, получать сгенерированное учебное упражнение от ИИ и выводить текст упражнения в окно TextView приложения
Используй java.util.concurrent вместо AsyncTask, так как AsyncTask deprecated в Android 11
Используй compileSdk 34
Не оказывай прогресс-бар во время выполнения запроса
Deepseek API Example
Запрос:
Давай подготовим учебное упражнение по методике Oflameron WORDS для изучения немецкого языка. Для этого выбери 15 немецких слов на тему "Я учусь в Университете. Посещаю лекции и семинары, живу в кампусе, хожу в спортзал и студенческую столовую" и сделаем из них спец-слова, обработав каждое из них по следующему алгоритму:
Преобразуй слова в одномерные матрицы (строки), элементы матриц - буквы из исходных слов (т.е. надо разделить слово на буквы). Это будет исходная матрица.
Пересортируй элементы каждой матрицы случайным образом (используй только один вариант сортировки для каждого слова). Количество и состав букв не должен измениться. Это будет целевая матрица.
Создай из целевой матрицы специальное слово (спец-слово) следующим образом: путем строгого, буква за буквой, последовательного объединения всех элементов матрицы в одну непрерывную строку без каких-либо изменений порядка, пропусков или интерпретаций.
Запомни исходные немецкие слова и соответствующие им спец-слова для использования далее.
Выведи на экран только конечный результат - в каждой строке исходное немецкое слово, количество букв в исходном слове, исходную матрицу, целевую матрицу, получившееся соответствующее ему спец-слово и подсчитай и напиши количество букв в спец-слове.
Составь учебный текст длиной 5-6 предложений на выбранную выше тему с использованием исходных 15 немецких слов, но замени их в готовом учебном тексте на соответствующие спец-слова, которые были подготовлены.
Напиши готовый текст и в конце каждого предложения для проверки в скобках покажи использованные исходные немецкие слова, которые были заменены на спец-слова.
Deepseek API Example
Покажи полный код программы.
Ответ Deppseek:
Вот код приложения для Android 11:
1. Манифест (AndroidManifest.xml)
xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.deepseekapp">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Deepseek API Example
2. Разметка (activity_main.xml)
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<Button
android:id="@+id/btnGenerate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Сгенерировать упражнение" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp">
<TextView
android:id="@+id/tvResult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Нажмите кнопку для генерации упражнения..."
android:textSize="14sp" />
</ScrollView>
</LinearLayout>
Deepseek API Example
3. Основной код (MainActivity.java)
java
package com.example.deepseekapp;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.Executors;
public class MainActivity extends AppCompatActivity {
private Button btnGenerate;
private TextView tvResult;
private static final String API_KEY = "YOUR_DEEPSEEK_API_KEY"; // Замените на ваш ключ
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnGenerate = findViewById(R.id.btnGenerate);
tvResult = findViewById(R.id.tvResult);
btnGenerate.setOnClickListener(v -> generateExercise());
}
private void generateExercise() {
Executors.newSingleThreadExecutor().execute(() -> {
try {
String response = sendRequestToDeepSeek();
runOnUiThread(() -> tvResult.setText(response));
} catch (Exception e) {
runOnUiThread(() -> {
tvResult.setText("Ошибка: " + e.getMessage());
Toast.makeText(this, "Ошибка запроса", Toast.LENGTH_SHORT).show();
});
}
});
}
Deepseek API Example
private String sendRequestToDeepSeek() throws Exception {
// Создаем JSON запрос
JSONObject request = new JSONObject();
request.put("model", "deepseek-chat");
request.put("max_tokens", 2000);
request.put("temperature", 0.7);
JSONArray messages = new JSONArray();
JSONObject message = new JSONObject();
message.put("role", "user");
message.put("content", buildPrompt());
messages.put(message);
request.put("messages", messages);
// Настраиваем соединение
HttpURLConnection conn = (HttpURLConnection) new URL("https://api.deepseek.com/v1/chat/completions").openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
conn.setDoOutput(true);
// Отправляем данные
try (OutputStream os = conn.getOutputStream()) {
os.write(request.toString().getBytes());
os.flush();
}
Deepseek API Example
// Читаем ответ
if (conn.getResponseCode() == 200) {
StringBuilder response = new StringBuilder();
try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
String line;
while ((line = br.readLine()) != null) {
response.append(line);
}
}
return parseResponse(response.toString());
} else {
throw new Exception("HTTP ошибка: " + conn.getResponseCode());
}
}
private String buildPrompt() {
return "Давай подготовим учебное упражнение по методике Oflameron WORDS для изучения немецкого языка. " +
"Для этого выбери 15 немецких слов на тему \"Я учусь в Университете. Посещаю лекции и семинары, " +
"живу в кампусе, хожу в спортзал и студенческую столовую\" и сделаем из них спец-слова, обработав " +
"каждое из них по следующему алгоритму:\n\n" +
"1. Преобразуй слова в одномерные матрицы (строки), элементы матриц - буквы из исходных слов " +
"(т.е. надо разделить слово на буквы). Это будет исходная матрица.\n\n" +
"2. Пересортируй элементы каждой матрицы случайным образом (используй только один вариант сортировки " +
"для каждого слова). Количество и состав букв не должен измениться. Это будет целевая матрица.\n\n" +
"3. Создай из целевой матрицы специальное слово (спец-слово) следующим образом: путем строгого, " +
"буква за буквой, последовательного объединения всех элементов матрицы в одну непрерывную строку " +
"без каких-либо изменений порядка, пропусков или интерпретаций.\n\n" +
"4. Запомни исходные немецкие слова и соответствующие им спец-слова для использования далее.\n\n" +
"5. Выведи на экран только конечный результат - в каждой строке исходное немецкое слово, " +
"количество букв в исходном слове, исходную матрицу, целевую матрицу, получившееся соответствующее " +
"ему спец-слово и подсчитай и напиши количество букв в спец-слове.\n\n" +
"6. Составь учебный текст длиной 5-6 предложений на выбранную выше тему с использованием исходных " +
"15 немецких слов, но замени их в готовом учебном тексте на соответствующие спец-слова, которые были подготовлены.\n\n" +
"7. Напиши готовый текст и в конце каждого предложения для проверки в скобках покажи использованные " +
"исходные немецкие слова, которые были заменены на спец-слова.";
}
private String parseResponse(String jsonResponse) {
try {
JSONObject json = new JSONObject(jsonResponse);
JSONArray choices = json.getJSONArray("choices");
JSONObject firstChoice = choices.getJSONObject(0);
JSONObject message = firstChoice.getJSONObject("message");
return message.getString("content");
} catch (Exception e) {
return "Ошибка парсинга ответа. Полный ответ:\n" + jsonResponse;
}
}
}
Deepseek API Example
4. build.gradle (Module: app)
gradle
android {
compileSdk 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.example.deepseekapp"
minSdk 21
targetSdk 30
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
}
Deepseek API Example
Основные изменения и упрощения:
1. Убран ProgressBar - нет индикатора загрузки
2. Упрощена структура кода - меньше методов
3. Прямое выполнение в Executor без дополнительных классов
4. Минимальная обработка ошибок - только базовые исключения
5. Упрощенный парсинг JSON - прямой доступ к полям ответа
Как использовать:
1. Замените `YOUR_DEEPSEEK_API_KEY` на ваш настоящий API-ключ
2. Приложение отправит запрос к DeepSeek API при нажатии кнопки
3. Результат появится в TextView
4. При ошибке покажется сообщение и Toast
Код полностью соответствует требованиям Android 11 и использует современные подходы с `java.util.concurrent` вместо устаревшего `AsyncTask`.
Deepseek API Example
Direct Link: https://chat.deepseek.com/share/98agk8pwlx4neai22b
...