Общаемся с DeepSeek-R1 в Engee

Автор
avatar-alexevsalexevs
Notebook

Использование DeepSeek-R1 в Engee

В этом примере мы рассмотрим процесс создания и отправки запросов, а также вывода ответов в Engee для большой языковой модели (LLM) DeepSeek-R1 через API стороннего сервиса на языке Python.

Введение

DeepSeek-R1 - наиболее актуальная и нашумевшая в последнее время модель из всех LLM компании DeepSeek. Существует несколько способов бесплатного и платного доступа к чату с этой моделью, в нашем примере мы рассмотрим наиболее простой и бесплатный способ доступа.

Мы будем отправлять JSON запросы к открытому сервису доступа к LLM - https://openrouter.ai/. Это один из возможных способов интеграции языковых моделей в пользовательские приложения.

Сайт openrouter.ai используется для примера API доступа к чату с LLM. Мы предупреждаем Вас о наличии на нём платных сервисов и рекомендуем воспользоваться помощью специалистов для выполнения аналогичной работы. Кроме этого мы заявляем, что данный пример не служит рекламой используемого сервиса.

Начало работы

Для начала проверим, установлена ли библиотека requests Python. Она позволяет работать с HTTP-запросами. Следующий код можно выполнить, например, в ячейке файла .ipynb:

!pip install requests

После этого установим и подключим библиотеку PyCall.jl для работы с кодом на Python в Julia.

In [ ]:
]add PyCall     # Установка библиотеки
In [ ]:
using PyCall    # Подключение библиотеки

Теперь подключим библиотеку requests:

In [ ]:
py"""
import requests
"""

Подготовка к работе проведена, можно перейти к формированию запроса.

Формируем запрос

Создадим переменные со страницей доступа к API Openrouter (API_URL) и пользовательским ключом (API_KEY). Введённый ниже ключ используется исключительно в текущем примере и на данный момент отключен для использования. При необходимости, впишите свой API-ключ.

In [ ]:
py"""
API_KEY = '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'
API_URL = 'https://openrouter.ai/api/v1/chat/completions'
"""

Далее определим заголовки API-запроса:

In [ ]:
py"""
headers = {
    'Authorization': f'Bearer {API_KEY}',
    'Content-Type': 'application/json'
}
"""

Определим данные для запроса в формате JSON:

In [ ]:
py"""
data = {
    "model": "deepseek/deepseek-r1:free",
    "messages": [{"role": "user", "content": "Напиши программу Hello World! на Julia"}]
}
"""

Здесь: deepseek/deepseek-r1:free - это бесплатная модель DeepSeek-R1, доступная для чата через OpenRouter.
В поле messages для роли пользователя ("role": "user") определяется текстовый запрос content.

Получаем и выводим ответ

Отправим сформированный POST-запрос в OpenRouter:

In [ ]:
py"""
response = requests.post(API_URL, json=data, headers=headers)   # Отправляем POST-запрос
"""

Проверим успешность запроса и выведем в печать необходимые данные.

In [ ]:
py"""
if response.status_code == 200:                                                 # если код ответа "200", то:
    for content in response.json()['choices']:                                      # из поля "choices" ответа
        output = content                                                                # получаем содержимое "content"
    print(output['message']['content'])                                             # а из этого содержимого печатаем "content" поля "messages"              
else:                                                                           # иначе:
    print("Failed to fetch data from API. Status Code:", response.status_code)      # Печать сообщения об ошибке
"""
Для написания программы "Hello World!" на языке Julia достаточно использовать встроенную функцию `println`, которая выводит текст с переводом строки. Вот пример кода:

```julia
println("Hello World!")
```

**Объяснение:**
- `println` — функция, выводящая переданные аргументы в консоль, добавляя символ новой строки.
- Строковые литералы заключаются в двойные кавычки (`"..."`).

**Как запустить:**
1. Сохраните код в файл с расширением `.jl` (например, `hello.jl`).
2. Запустите в терминале: `julia hello.jl`.

Это минимальный пример, демонстрирующий базовый вывод в Julia. Для более сложных программ код можно организовать в функции и модули.

В случае успешной обработки запроса, как в случае выше, мы получаем ответ от нейросети.
Так как ответ DeepSeek размечен в Markdown, то для наглядности мы можем сохранить его в файл с соответствующим расширением.

In [ ]:
write("Py_LLM.md", py"output['message']['content']");

Маскирование кода

Неоспоримое удобство Engee при работе со скриптами заключается в возможности маскирования кодовых ячеек. Так, мы можем легко создать минимально необходимый GUI для работы с написанным приложением:

In [ ]:
py"""
# Define the request payload (data)
Вопрос = "Ответь максимально коротко на вопрос о жизни, вселенной и вообще" # @param {type:"string"}

data = {
    "model": "deepseek/deepseek-r1:free",
    "messages": [{"role": "user", "content": str(Вопрос)}]
}

# Send the POST request to the DeepSeek API
response = requests.post(API_URL, json=data, headers=headers)

# Check if the request was successful
if response.status_code == 200:
    for content in response.json()['choices']:
        output = content
    print(output['message']['content'])
else:
    print("Failed to fetch data from API. Status Code:", response.status_code)
"""
42.

$$\blacksquare$$

Заключение

В примере мы рассмотрели достаточно простой подход для подключения чата с нейросетью DeepSeek-R1 в скрипте Engee. Программа реализована на языке Python, её работа заключается в формировании запроса в формате JSON по API стороннего сервиса. В дополнение показаны вывод полученного ответа в файл Markdown и маскирование кодовой ячейки для создания GUI программы в скрипте Engee.