Создать простого ассистента
Функциональность 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(): sdk = YCloudML( folder_id="<идентификатор_каталога>", auth="<API-ключ>", ) # Создаем тред, в котором будем хранить переписку # Тред будет храниться в течение 5 дней thread = sdk.threads.create( name="SimpleAssistant", ttl_days=5, expiration_policy="static" ) print(f"new {thread=}") # Определяем модель YandexGPT Pro RC и ее максимальный контекст model = sdk.models.completions("yandexgpt", model_version="rc") # Создаем ассистента для модели # Ассистент будет удален через 4 дня, если к нему не будут обращаться assistant = sdk.assistants.create( model, ttl_days=4, expiration_policy="since_last_active", max_tokens=500 ) # Здесь нужно предусмотреть чтение сообщений пользователей # Пока же мы просто запишем что-нибудь в тред input_text = "" while input_text != "exit": input_text = input("Введите ваш вопрос ассистенту: ") if input_text != "exit": thread.write(input_text) # Так можно отдать модели все содержимое треда run = assistant.run(thread) print(f"{run=}") # Чтобы получить результат, нужно дождаться окончания запуска result = run.wait() # Можно посмотреть все поля результата print(f"run {result=}") # В поле text сохраняется удобная для дальнейшей работы строка print("Answer:", result.text) # Можно посмотреть, что хранится в треде print("Вывод всей истории сообщений при выходе из чата:") for message in thread: print(f" {message=}") print(f" {message.text=}\n") # Удаляем все ненужное thread.delete() assistant.delete() if __name__ == "__main__": main()
Где:
-
<идентификатор_каталога>
— идентификатор каталога, в котором создан сервисный аккаунт. -
<API-ключ>
— API-ключ сервисного аккаунта, полученный ранее и необходимый для аутентификации в API.В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.
-
-
Выполните созданный файл:
python3 simple-assistant.py
В примере реализован простейший вариант чата: вводите с клавиатуры запросы ассистенту и получайте ответы на них. Чтобы прекратить диалог, введите
exit
.Примерный результат выполнения
new thread=Thread(id='fvt67i1ettn5********', expiration_config=ExpirationConfig(ttl_days=5, expiration_policy=<ExpirationPolicy.STATIC: 1>), name='SimpleAssistant', description=None, created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 5, 33, 8133), updated_by='ajegtlf2q28a********', updated_at=datetime.datetime(2024, 12, 15, 21, 5, 33, 8133), expires_at=datetime.datetime(2024, 12, 20, 21, 5, 33, 8133), labels=None) Введите ваш вопрос ассистенту: Привет! run=Run(id='fvtm4n1o2hla********', assistant_id='fvthtngdnlkq********', thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 5, 53, 312504), labels=None, custom_temperature=None, custom_max_tokens=None, custom_max_prompt_tokens=None) run result=RunResult(status=<RunStatus.COMPLETED: 4>, error=None, _message=Message(id='fvtburadn35c********', parts=('Здравствуйте! Чем могу помочь?',), thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 5, 53, 728330), labels=None, author=Author(id='fvthtngdnlkq********', role='ASSISTANT')), usage=Usage(input_text_tokens=12, completion_tokens=6, total_tokens=18)) Answer: Здравствуйте! Чем могу помочь? Введите ваш вопрос ассистенту: Сколько будет 2 + 2? run=Run(id='fvt2eajhkqnb********', assistant_id='fvthtngdnlkq********', thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 7, 36, 751185), labels=None, custom_temperature=None, custom_max_tokens=None, custom_max_prompt_tokens=None) run result=RunResult(status=<RunStatus.COMPLETED: 4>, error=None, _message=Message(id='fvtnmfeavsm1********', parts=('2 + 2 = 4.',), thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 7, 37, 294861), labels=None, author=Author(id='fvthtngdnlkq********', role='ASSISTANT')), usage=Usage(input_text_tokens=36, completion_tokens=9, total_tokens=45)) Answer: 2 + 2 = 4. Введите ваш вопрос ассистенту: А 15234 - 265? run=Run(id='fvt55e1qr4d0********', assistant_id='fvthtngdnlkq********', thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 7, 59, 483141), labels=None, custom_temperature=None, custom_max_tokens=None, custom_max_prompt_tokens=None) run result=RunResult(status=<RunStatus.COMPLETED: 4>, error=None, _message=Message(id='fvtujctocrak********', parts=('15234 − 265 = 14969.',), thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 8, 0, 244274), labels=None, author=Author(id='fvthtngdnlkq********', role='ASSISTANT')), usage=Usage(input_text_tokens=68, completion_tokens=19, total_tokens=87)) Answer: 15234 − 265 = 14969. Введите ваш вопрос ассистенту: exit Вывод всей истории сообщений при выходе из чата: message=Message(id='fvtujctocrak********', parts=('15234 − 265 = 14969.',), thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 8, 0, 244274), labels=None, author=Author(id='fvthtngdnlkq********', role='ASSISTANT')) message.text='15234 − 265 = 14969.' message=Message(id='fvthbaqg1rep********', parts=('А 15234 - 265?',), thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 7, 59, 375702), labels=None, author=Author(id='fvt82v4kgb7i********', role='USER')) message.text='А 15234 - 265?' message=Message(id='fvtnmfeavsm1********', parts=('2 + 2 = 4.',), thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 7, 37, 294862), labels=None, author=Author(id='fvthtngdnlkq********', role='ASSISTANT')) message.text='2 + 2 = 4.' message=Message(id='fvtdd4fbb4n8********', parts=('Сколько будет 2 + 2?',), thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 7, 36, 625764), labels=None, author=Author(id='fvt82v4kgb7i********', role='USER')) message.text='Сколько будет 2 + 2?' message=Message(id='fvtburadn35c********', parts=('Здравствуйте! Чем могу помочь?',), thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 5, 53, 728331), labels=None, author=Author(id='fvthtngdnlkq********', role='ASSISTANT')) message.text='Здравствуйте! Чем могу помочь?' message=Message(id='fvt9apvs2au9********', parts=('Привет!',), thread_id='fvt67i1ettn5********', created_by='ajegtlf2q28a********', created_at=datetime.datetime(2024, 12, 15, 21, 5, 53, 136965), labels=None, author=Author(id='fvt82v4kgb7i********', role='USER')) message.text='Привет!'
См. также
- Создать ассистента с поисковым индексом
- Примеры работы с ML SDK на GitHub