Современная разработка и исследование в области искусственного интеллекта всё чаще требуют взаимодействия с облачными API ведущих поставщиков ИИ-моделей. Работа с такими API позволяет быстро интегрировать мощные алгоритмы обработки естественного языка, компьютерного зрения и других технологий без необходимости самостоятельно обучать сложные модели. В этой задаче актуально создание удобных инструментов для отправки запросов к ИИ-сервисам и получения развернутых, легко интерпретируемых результатов.

Практичность использования таких инструментов повышается за счёт применения универсальных средств, например, REST API, позволяющего оперативно протестировать запросы и отладить взаимодействие, не прибегая к полной разработке клиентского приложения. Наглядное представление результатов в удобном интерфейсе (например, в Jupyter Notebook с поддержкой Markdown и виджетов) существенно повышает продуктивность работы. Сочетание работы с API ИИ, использования компактных и универсальных средств для запросов и отображения результатов в визуально удобной форме представляет собой важный этап эффективной интеграции и разработки современных ИИ-приложений. И я вам хочу это продемонстрировать на примере.

Давайте рассмотрим решение несложной задачи и поступим как настоящие дата-сайентисты, применяя для своих изысканий Jupyter Notebook (по идее этот же код можно исполнить в среде Google Codelab). Приведенный код создаёт небольшой интерактивный интерфейс в Jupyter Notebook для общения с моделью ИИ через API: пользователь вводит текст, нажимает кнопку — и получает ответ ИИ прямо внутри блокнота, с возможностью очистить результаты вывода, попутно проведя замеры исполнения запроса. Т.к. вывод чаще всего осуществляется в markdown разметке, то неплохо бы было отрендерить response и тогда ответ предстанет в очень красивом виде. 

Т.к. API у разных поставщиков ИИ немного разные, то для более точного описания запроса обращайтесь к оригинальной документации поставщика ИИ моделей. Конечно же код можно усовершенствовать, но данным примером (повторюсь) хотелось бы показать удобство использования Jypiter Notebook для прототипирования и отладки python-приложений.

Jupyter листинг (Python код) приложения для интерактивного взаимодействия с сервером ИИ через запросы cURL

%%time
import requests
from IPython.display import Markdown, display, HTML
import ipywidgets as widgets

out = widgets.Output()

display(HTML("""
<style>
.my-textarea textarea {
    border: 1px solid #0062c2; 
    margin: 10px;
    padding: 8px;
    width: 650px;
    height: 150px;
    box-sizing: border-box;
    font-family: Arial, sans-serif; 
    font-size: 16px; 
    border-radius: 5px;
    color: #3E3578;
}
</style>
"""))

input_text = widgets.Textarea(
    value='',
    placeholder = 'Введите запрос',
    description = 'Запрос к ИИ:',
    layout=widgets.Layout(width='800px'),
    disabled=False
)
input_text.add_class('my-textarea')

button = widgets.Button(description='Получить ответ')
clear_btn = widgets.Button(description='Стереть')

def on_clear_clicked(с):
    out.clear_output()

def on_button_clicked(b):
    user_input = input_text.value
    url = "{URL ЗАПРОСА К СЕРВЕРУ ИИ}"
    headers = {
         "Authorization": "{СВОЙ КОД АВТОРИЗАЦИИ ПРИ НЕОБХОДИМОСТИ}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "{НАИМЕНОВАНИЕ МОДЕЛИ Х}",
        "messages": [
            {
                "role": "user",
                "content": user_input
            }
        ]
    }
    response = requests.post(url, headers=headers, json=data)
    if response.status_code == 200:
        jsanswer = response.json()
        with out:
            out.clear_output()
            display(Markdown((jsanswer['choices'][0]['message']['content'])))
    else:
        print (response.status_code)
    
button.on_click(on_button_clicked)
clear_btn.on_click(on_clear_clicked)

display (input_text,button,clear_btn,out)

Пояснение. Код создаёт в Jupyter Notebook простой интерфейс для общения с ИИ-моделью через REST API:

  • Отображает стилизованное многострочное текстовое поле для ввода запроса.
  • Две кнопки: одна отправляет запрос к ИИ, другая очищает вывод.
  • При нажатии "Получить ответ" текст из поля отправляется POST-запросом к API серверу с ИИ-моделью Х.
  • Полученный ответ отображается в отрендеренном Markdown-формате в блоке вывода.
  • Кнопка "Стереть" очищает вывод.