Создать ассистента с получением промежуточных результатов генерации ответа
Функциональность AI Assistant API находится на стадии Preview.
AI Assistant API — это инструмент создания AI-ассистентов. С его помощью можно создать персонализированных помощников, реализовывать сценарий генеративного ответа с учетом информации из внешних источников (RAG, Retrieval Augmented Generation), а также сохранять контекст запросов к модели. При выполнении запросов к ассистенту вы можете получать промежуточные результаты генерации по мере формирования моделью ответа.
Перед началом работы
Чтобы воспользоваться примерами:
-
Создайте сервисный аккаунт и назначьте ему роли
ai.assistants.editor
иai.languageModels.user
. -
Получите и сохраните API-ключ сервисного аккаунта.
В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.
-
С помощью менеджера пакетов pip
установите библиотеку ML SDK:pip install yandex-cloud-ml-sdk
Создайте ассистента
Этот пример показывает, как создать ассистента, который будет хранить переписку с моделью YandexGPT Pro RC, а при обращении к модели будет выводить промежуточные результаты генерации по мере формирования моделью ответа.
-
Создайте файл
simple-assistant.py
и добавьте в него следующий код:#!/usr/bin/env python3 from __future__ import annotations from yandex_cloud_ml_sdk import YCloudML def main() -> None: sdk = YCloudML( folder_id="<идентификатор_каталога>", auth="<API-ключ>", ) sdk.setup_default_logging() assistant = sdk.assistants.create( "yandexgpt", temperature=0.5, max_prompt_tokens=50, ttl_days=6, expiration_policy="static", ) thread = sdk.threads.create( name="foo", ttl_days=6, expiration_policy="static", ) # Основной цикл взаимодействия пользователя с ассистентом input_text = input('Задайте вопрос ассистенту ("exit" — для выхода): ') while input_text.lower() != "exit": thread.write(input_text) # Так можно отдать модели все содержимое треда run = assistant.run_stream(thread) # Так можно посмотреть промежуточные результаты по мере генерации моделью ответа for event in run: print(event._message.parts) # Так можно посмотреть все поля окончательного результата print(f"run {event=}") input_text = input('Задайте ваш вопрос ассистенту ("exit" — для выхода): ') # Вывод на экран всей истории сообщений в чате print("Вывод всей истории сообщений при выходе из чата:") for message in thread: print(f" {message=}") print(f" {message.text=}\n") # Удаление всего ненужного for assistant in sdk.assistants.list(): assistant.delete() thread.delete() if __name__ == "__main__": main()
Где:
-
<идентификатор_каталога>
— идентификатор каталога, в котором создан сервисный аккаунт. -
<API-ключ>
— API-ключ сервисного аккаунта, полученный ранее и необходимый для аутентификации в API.В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.
-
-
Выполните созданный файл:
python3 simple-assistant.py
В примере реализован простейший вариант чата: вводите с клавиатуры запросы ассистенту и получайте ответы на них. Чтобы прекратить диалог, введите
exit
.Примерный результат выполнения
Задайте вопрос ассистенту ("exit" — для выхода): Привет! ('Здравствуйте',) ('Здравствуйте! Чем могу помочь?',) ('Здравствуйте! Чем могу помочь?',) run event=RunStreamEvent(status=<StreamEvent.DONE: 3>, error=None, _message=Message (id='fvtbkt2tbf7a********', parts=('Здравствуйте! Чем могу помочь?',), thread_id='fvt50ma5302n********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2025, 3, 13, 17, 51, 22, 146833), labels=None, author=Author(id='fvtle31p6lv2********', role='ASSISTANT'), citations=())) Задайте ваш вопрос ассистенту ("exit" — для выхода): Сколько планет в Солнечной системе? ('В',) ('В Солнечной системе **восемь планет**: Меркурий, Венера, Земля, Марс, Юпитер, Сатур',) ('В Солнечной системе **восемь планет**: Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран и Нептун.',) ('В Солнечной системе **восемь планет**: Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран и Нептун.',) run event=RunStreamEvent(status=<StreamEvent.DONE: 3>, error=None, _message=Message (id='fvt4f3p6ddue********', parts=('В Солнечной системе **восемь планет**: Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран и Нептун.',), thread_id='fvt50ma5302n********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2025, 3, 13, 17, 51, 33, 36643), labels=None, author=Author(id='fvtle31p6lv2********', role='ASSISTANT'), citations=())) Задайте ваш вопрос ассистенту ("exit" — для выхода): Как далеко от Солнца до Земли? ('Среднее',) ('Среднее расстояние от Земли до Солнца составляет приблизительно 149,6 миллиона километров. Это расстояние',) ('Среднее расстояние от Земли до Солнца составляет приблизительно 149,6 миллиона километров. Это расстояние также известно как астрономическая единица (АЕ).',) ('Среднее расстояние от Земли до Солнца составляет приблизительно 149,6 миллиона километров. Это расстояние также известно как астрономическая единица (АЕ).',) run event=RunStreamEvent(status=<StreamEvent.DONE: 3>, error=None, _message=Message (id='fvtees4295mr********', parts=('Среднее расстояние от Земли до Солнца составляет приблизительно 149, 6 миллиона километров. Это расстояние также известно как астрономическая единица (АЕ).',), thread_id='fvt50ma5302n********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2025, 3, 13, 17, 51, 44, 33797), labels=None, author=Author(id='fvtle31p6lv2********', role='ASSISTANT'), citations=())) Задайте ваш вопрос ассистенту ("exit" — для выхода): Exit Вывод всей истории сообщений при выходе из чата: message=Message(id='fvtees4295mr********', parts=('Среднее расстояние от Земли до Солнца составляет приблизительно 149,6 миллиона километров. Это расстояние также известно как астрономическая единица (АЕ).',), thread_id='fvt50ma5302n********', created_by='ajegtlf2q28a********', created_at=datetime. datetime(2025, 3, 13, 17, 51, 44, 33798), labels=None, author=Author(id='fvtle31p6lv2********', role='ASSISTANT'), citations=()) message.text='Среднее расстояние от Земли до Солнца составляет приблизительно 149,6 миллиона километров. Это расстояние также известно как астрономическая единица (АЕ).' message=Message(id='fvto6b4rdg0o********', parts=('Как далеко от Солнца до Земли?',), thread_id='fvt50ma5302n********', created_by='ajegtlf2q28a********', created_at=datetime.datetime (2025, 3, 13, 17, 51, 42, 941742), labels=None, author=Author(id='fvtjnthkl0g5********', role='USER'), citations=()) message.text='Как далеко от Солнца до Земли?' message=Message(id='fvt4f3p6ddue********', parts=('В Солнечной системе **восемь планет**: Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран и Нептун.',), thread_id='fvt50ma5302n********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2025, 3, 13, 17, 51, 33, 36644), labels=None, author=Author(id='fvtle31p6lv2********', role='ASSISTANT'), citations=()) message.text='В Солнечной системе **восемь планет**: Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран и Нептун.' message=Message(id='fvtme86dsuju********', parts=('Сколько планет в Солнечной системе?',), thread_id='fvt50ma5302n********', created_by='ajegtlf2q28a********', created_at=datetime.datetime (2025, 3, 13, 17, 51, 32, 139), labels=None, author=Author(id='fvtjnthkl0g5********', role='USER'), citations=()) message.text='Сколько планет в Солнечной системе?' message=Message(id='fvtbkt2tbf7a********', parts=('Здравствуйте! Чем могу помочь?',), thread_id='fvt50ma5302n********', created_by='ajegtlf2q28a********', created_at=datetime.datetime (2025, 3, 13, 17, 51, 22, 146834), labels=None, author=Author(id='fvtle31p6lv2********', role='ASSISTANT'), citations=()) message.text='Здравствуйте! Чем могу помочь?' message=Message(id='fvtemh1qqc50********', parts=('Привет!',), thread_id='fvt50ma5302n********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2025, 3, 13, 17, 51, 21, 359885), labels=None, author=Author(id='fvtjnthkl0g5********', role='USER'), citations=()) message.text='Привет!'
См. также
- Создать простого ассистента
- Создать ассистента с поисковым индексом
- Примеры работы с ML SDK на GitHub