Современная разработка и исследование в области искусственного интеллекта всё чаще требуют взаимодействия с облачными 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-формате в блоке вывода.
- Кнопка "Стереть" очищает вывод.