Создание AI-агента с помощью функции Cloud Functions
- Что такое AI-агент и зачем он нужен
- Подготовьте облако к работе
- Автоматизированное создание AI-агента
- Создание AI-агента вручную
- Создайте сервисный аккаунт
- Создайте API-ключ сервисного аккаунта
- Создайте секрет Yandex Lockbox
- Подготовьте ZIP-архив с кодом функции
- Создайте функцию
- Протестируйте работу функции
- Как удалить созданные ресурсы
Узнайте, как с помощью функции Cloud Functions с использованием OpenAI Agents SDK
В данном руководстве вы создадите простого AI-агента, который через функцию Cloud Functions будет получать информацию о погоде, взаимодействовать с языковой моделью Yandex Foundation Models и, чтобы было интереснее, отвечать пользователю в форме хайку
На схеме:
- Пользователь отправляет запрос к AI-агенту. Запрос поступает в обработчик функции Cloud Functions.
- Обработчик функции Cloud Functions создает и запускает AI-агента.
- AI-агент запрашивает дополнительные данные о погоде в нужном городе в пользовательской функции
get_weather()
. - AI-агент отправляет расширенный дополнительным контекстом запрос пользователя в модель генерации текста Foundation Models.
- Сервисный аккаунт с помощью API-ключа авторизует для AI-агента доступ к Text Generation API Foundation Models.
- Сервисный аккаунт предоставляет функции Cloud Functions доступ к секрету Yandex Lockbox, в котором хранится API-ключ сервисного аккаунта.
- Функция Cloud Functions получает из секрета Yandex Lockbox API-ключ сервисного аккаунта.
- Модель Foundation Models передает AI-агенту сгенерированный ответ.
- AI-агент возвращает полученный ответ пользователю.
Созданный в этом руководстве AI-агент будет развернут в Yandex Cloud с помощью Yandex Cloud Functions. При этом вы создадите необходимые для доступа к модели Foundation Models ресурсы: сервисный аккаунт, API-ключ сервисного аккаунта, секрет Yandex Lockbox и функцию Cloud Functions.
Вы можете создать эти ресурсы автоматически или вручную.
Что такое AI-агент и зачем он нужен
AI-агент — это программный помощник на базе искусственного интеллекта, который может выполнять инструкции, отвечать на вопросы и взаимодействовать с пользователями или другими системами в заданном контексте. В отличие от обычных моделей генеративного искусственного интеллекта, AI-агенты могут:
- обладать персонализированными инструкциями и «личностью»;
- использовать внешние источники информации и сторонние инструменты, позволяющие получить дополнительную информацию;
- поддерживать контекст диалога;
- выполнять последовательности действий для решения комплексных задач.
Почему бессерверные функции подходят для работы с AI-агентами
Функции Cloud Functions при развертывании AI-агентов предоставляют несколько преимуществ:
- Масштабируемость — автоматическое масштабирование в зависимости от нагрузки.
- Экономичность — плата только за фактическое время выполнения.
- Отсутствие необходимости управлять инфраструктурой — не нужно настраивать и поддерживать серверы.
- Быстрое развертывание — простота создания и обновления AI-агента.
- Интеграция с другими сервисами — простота подключения к API и другим сервисам Yandex Cloud.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры для этого практического руководства входят:
- Плата за использование функции (см. тарифы Yandex Cloud Functions).
- Плата за генерацию текста (см. тарифы Yandex Foundation Models).
- Плата за хранение секрета и операции с ним (см. тарифы Yandex Lockbox).
- Плата за запись и хранение данных в лог-группе (см. тарифы Yandex Cloud Logging), если вы используете сервис Cloud Logging.
Автоматизированное создание AI-агента
Запустите скрипт, который автоматически создаст в выбранном вами каталоге все необходимые ресурсы и развернет готового AI-агента, с которым вы сможете поэкспериментировать.
Чтобы создать AI-агента в автоматическом режиме:
-
Установите Yandex Cloud CLI и аутентифицируйтесь.
-
Склонируйте репозиторий
со скриптами для создания AI-агента:git clone https://github.com/yandex-cloud-examples/yc-serverless-ai-agent
Репозиторий содержит скрипты для создания трех вариантов AI-агента:
Простой AI-агентПродвинутый AI-агентАгент-переводчикСкрипт
create-simple-ai-agent.py
создаст простого AI-агента, который при запуске возвращает информацию о погоде в Токио в форме хайку.Скрипт
create-advanced-ai-agent.py
создаст продвинутого AI-агента, который отвечает на пользовательские запросы в форме хайку. При отсутствии пользовательского запроса агент возвращает ответ на запрос по умолчанию.Скрипт
create-complex-ai-agent.py
создаст Агента-переводчика, которому можно передавать пользовательские запросы на перевод текста на нужный язык в нужном стиле. -
Сделайте файл скрипта исполняемым, например:
chmod +x create-simple-ai-agent.py
-
Выполните скрипт, например:
./create-simple-ai-agent.py
В процессе выполнения скрипта укажите данные вашего облака и каталога, после чего дождитесь создания ресурсов.
-
Протестируйте работу AI-агента.
Простой AI-агентПродвинутый AI-агентАгент-переводчикПротестируйте работу функции в консоли управления.
Протестируйте работу функции в консоли управления.
Дополнительно вы можете протестировать работу функции, передав AI-агенту пользовательский запрос с помощью Yandex Cloud CLI. Для этого выполните команду, указав полученный при создании AI-агента идентификатор функции:
echo '{"query": "What's the weather in Paris?"}' > request.json \ yc serverless function invoke <идентификатор_функции> --data-file request.json
Протестируйте работу функции в консоли управления.
Дополнительно вы можете протестировать работу функции, передав AI-агенту пользовательский запрос с помощью Yandex Cloud CLI. Для этого выполните команду, указав полученный при создании AI-агента идентификатор функции:
echo '{"text": "Hello, world!", "target_language": "русский", "tone": "дружеский"}' > translate.json \ yc serverless function invoke <идентификатор_функции> --data-file translate.json
-
Если созданные ресурсы вам больше не нужны, удалите их.
Создание AI-агента вручную
Чтобы вручную создать AI-агента с помощью функции Cloud Functions:
- Создайте сервисный аккаунт.
- Создайте API-ключ сервисного аккаунта.
- Создайте секрет Yandex Lockbox.
- Подготовьте ZIP-архив с кодом функции.
- Создайте функцию.
- Протестируйте работу функции.
Если созданные ресурсы вам больше не нужны, удалите их.
Создайте сервисный аккаунт
- В консоли управления
выберите каталог, в котором вы будете создавать инфраструктуру. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта:
function-sa
. - Нажмите
Добавить роль и выберите рольai.languageModels.user
. - Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>
. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name
или --folder-id
.
-
Создайте сервисный аккаунт
function-sa
в каталоге по умолчанию:yc iam service-account create \ --name function-sa
Результат:
done (1s) id: aje23dgspcpi******** folder_id: b1gt6g8ht345******** created_at: "2025-06-04T19:34:58.145514099Z" name: function-sa
Сохраните идентификаторы сервисного аккаунта (значение поля
id
) и каталога (значение поляfolder_id
) — они понадобятся позднее.Подробнее о команде
yc iam service-account create
читайте в справочнике CLI. -
Назначьте созданному сервисному аккаунту роль
ai.languageModels.user
на каталог, указав сохраненные на предыдущем шаге идентификаторы каталога и сервисного аккаунта:yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role ai.languageModels.user \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>
Результат:
done (2s) effective_deltas: - action: ADD access_binding: role_id: ai.languageModels.user subject: id: aje23dgspcpi******** type: serviceAccount
Подробнее о команде
yc resource-manager folder add-access-binding
читайте в справочнике CLI.
Чтобы создать сервисный аккаунт, воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.
Чтобы назначить сервисному аккаунту роль ai.languageModels.user
на каталог, воспользуйтесь методом REST API updateAccessBindings для ресурса Folder или вызовом gRPC API FolderService/UpdateAccessBindings.
Создайте API-ключ сервисного аккаунта
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Identity and Access Management и выберите созданный ранее сервисный аккаунт
function-sa
. -
На панели сверху нажмите кнопку
Создать новый ключ и выберите пункт Создать API-ключ. -
В поле Область действия выберите область действия
yc.ai.languageModels.execute
. -
(Опционально) Укажите Срок действия API-ключа.
-
Нажмите кнопку Создать.
-
Сохраните полученный секретный ключ — он понадобится при создании функции.
Внимание
После закрытия диалога значение ключа будет недоступно.
-
Создайте API-ключ для сервисного аккаунта
function-sa
:yc iam api-key create \ --service-account-name function-sa \ --scopes yc.ai.languageModels.execute
Результат:
api_key: id: ajemcpt92i9j******** service_account_id: aje23dgspcpi******** created_at: "2025-06-04T19:41:28.960624728Z" scope: yc.ai.languageModels.execute scopes: - yc.ai.languageModels.execute secret: AQVN1mZ6kUkzDCjhNJxmjDX6WeJdOlJv********
Сохраните полученное значение ключа — получить его повторно будет невозможно.
Подробнее о команде
yc iam api-key create
читайте в справочнике CLI.
Чтобы создать API-ключ, воспользуйтесь методом REST API create для ресурса ApiKey или вызовом gRPC API ApiKeyService/Create.
Создайте секрет Yandex Lockbox
- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Lockbox и нажмите кнопку Создать секрет.
- В поле Имя укажите имя секрета
api-key-secret
. - В поле Тип секрета выберите
Пользовательский
. - В поле Ключ введите ключ секрета
api-key
. - В поле Значение вставьте полученный на предыдущем шаге секретный ключ.
- Нажмите кнопку Создать.
-
Создайте секрет Yandex Lockbox
api-key-secret
в каталоге по умолчанию, указав полученный на предыдущем шаге секретный ключ:yc lockbox secret create \ --name api-key-secret \ --payload "[{'key': 'api-key', 'text_value': '<секретный_ключ>'}]"
Результат:
done (1s) id: e6q7c0n0n7ji******** folder_id: b1gt6g8ht345******** created_at: "2025-06-04T19:50:38.690Z" name: api-key-secret status: ACTIVE current_version: id: e6qhmal099ki******** secret_id: e6q7c0n0n7ji******** created_at: "2025-06-04T19:50:38.690Z" status: ACTIVE payload_entry_keys: - api-key
Подробнее о команде
yc lockbox secret create
читайте в справочнике CLI.
Чтобы создать секрет, воспользуйтесь методом REST API create для ресурса Secret или вызовом gRPC API SecretService/Create.
Назначьте сервисному аккаунту права на чтение содержимого секрета
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Lockbox и выберите созданный ранее секрет
api-key-secret
. -
На панели слева выберите раздел
Права доступа и нажмите кнопку Назначить роли. В открывшемся окне:- В строке поиска введите имя созданного ранее сервисного аккаунта
function-sa
и выберите этот сервисный аккаунт. - Нажмите кнопку
Добавить роль и выберите рольlockbox.payloadViewer
. - Нажмите Сохранить.
- В строке поиска введите имя созданного ранее сервисного аккаунта
-
Назначьте сервисному аккаунту
function-sa
рольlockbox.payloadViewer
на секретapi-key-secret
:yc lockbox secret add-access-binding \ --name api-key-secret \ --service-account-name function-sa \ --role lockbox.payloadViewer
Подробнее о команде
yc lockbox secret add-access-binding
читайте в справочнике CLI.
Чтобы назначить сервисному аккаунту роль на секрет, воспользуйтесь методом REST API setAccessBindings для ресурса Secret или вызовом gRPC API SecretService/SetAccessBindings.
Подготовьте ZIP-архив с кодом функции
-
Сохраните следующий код в файл с названием
index.py
:import os from openai import AsyncOpenAI from agents import ( Agent, OpenAIChatCompletionsModel, Runner, function_tool, set_tracing_disabled, ) BASE_URL = os.getenv("BASE_URL") API_KEY = os.getenv("API_KEY") MODEL_NAME = os.getenv("MODEL_NAME") client = AsyncOpenAI(base_url=BASE_URL, api_key=API_KEY) set_tracing_disabled(disabled=True) @function_tool def get_weather(city: str): print(f"[debug] getting weather for {city}") return f"The weather in {city} is sunny." async def handler(event, context): agent = Agent( name="Assistant", instructions="You only respond in haikus.", model=OpenAIChatCompletionsModel(model=MODEL_NAME, openai_client=client), tools=[get_weather], ) result = await Runner.run(agent, "What's the weather in Tokyo?") return { "statusCode": 200, "body": result.final_output, }
-
Сохраните следующий код в файл с названием
requirements.txt
:openai-agents
-
Добавьте файлы
index.py
иrequirements.txt
в ZIP-архивopenai-function.zip
.
Создайте функцию
- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Cloud Functions.
- Создайте функцию:
- Нажмите кнопку Создать функцию.
- В открывшемся окне введите имя функции
ai-agent-function
. - Нажмите кнопку Создать.
- Создайте версию функции:
- Выберите среду выполнения
Python 3.12
, отключите опцию Добавить файлы с примерами кода и нажмите кнопку Продолжить. - В поле Способ выберите
ZIP-архив
и прикрепите созданный ранее файлopenai-function.zip
. - Укажите точку входа
index.handler
. - В блоке Параметры укажите:
- Таймаут —
5 минут
. - Память —
128 МБ
. - Сервисный аккаунт — выберите сервисный аккаунт
function-sa
. - Переменные окружения:
-
MODEL_NAME
— URI модели генерации текста Yandex Foundation Models.Например:
gpt://<идентификатор_каталога>/yandexgpt/latest
.Где
<идентификатор_каталога>
— идентификатор каталога, в котором вы создаете инфраструктуру. -
BASE_URL
— URL сервиса Yandex Foundation Models:https://llm.api.cloud.yandex.net/v1
.
-
- Секреты Lockbox:
- В поле Переменная окружения укажите
API_KEY
и выберите созданный ранее секретapi-key-secret
, его версию и ключapi-key
.
- В поле Переменная окружения укажите
- Если вы не хотите сохранять логи и платить за использование сервиса Cloud Logging, отключите опцию Запись логов, чтобы отключить логирование.
- Таймаут —
- Нажмите кнопку Сохранить изменения.
- Выберите среду выполнения
-
Создайте функцию
ai-agent-function
в каталоге по умолчанию:yc serverless function create \ --name ai-agent-function
Результат:
id: d4edhic2qf3i******** folder_id: b1gt6g8ht345******** created_at: "2025-06-04T20:02:14.741Z" name: ai-agent-function http_invoke_url: https://functions.yandexcloud.net/d4edhic2qf3i******** status: ACTIVE
Подробнее о команде
yc serverless function create
читайте в справочнике CLI. -
Создайте версию функции
ai-agent-function
:yc serverless function version create \ --function-name ai-agent-function \ --memory=128m \ --execution-timeout=5m \ --runtime=python312 \ --entrypoint=index.handler \ --service-account-id=<идентификатор_сервисного_аккаунта> \ --environment MODEL_NAME="gpt://<идентификатор_каталога>/yandexgpt/latest",BASE_URL="https://llm.api.cloud.yandex.net/v1" \ --secret name=api-key-secret,key=api-key,environment-variable=API_KEY \ --source-path=./openai-function.zip \ --no-logging
Где:
--service-account-id
— идентификатор сервисного аккаунтаfunction-sa
, сохраненный ранее при его создании.<идентификатор_каталога>
— идентификатор каталога, сохраненный ранее при создании сервисного аккаунта.
Результат:
done (16s) id: d4e1vnnvhk5p******** function_id: d4edhic2qf3i******** created_at: "2025-06-04T20:09:59.675Z" runtime: python312 entrypoint: index.handler resources: memory: "134217728" execution_timeout: 300s service_account_id: aje23dgspcpi******** image_size: "14958592" status: ACTIVE tags: - $latest environment: BASE_URL: https://llm.api.cloud.yandex.net/v1 MODEL_NAME: gpt://b1gt6g8ht345********/yandexgpt/latest secrets: - id: e6q7c0n0n7ji******** version_id: e6qhmal099ki******** key: api-key environment_variable: API_KEY log_options: disabled: true folder_id: b1gt6g8ht345******** concurrency: "1"
Подробнее о команде
yc serverless function version create
читайте в справочнике CLI.
Чтобы создать функцию, воспользуйтесь методом REST API create для ресурса Function или вызовом gRPC API FunctionService/Create.
Чтобы создать версию функции, воспользуйтесь методом REST API createVersion для ресурса Function или вызовом gRPC API FunctionService/CreateVersion.
Протестируйте работу функции
-
В консоли управления
выберите каталог, в котором вы создали инфраструктуру. -
В списке сервисов выберите Cloud Functions и выберите созданную функцию.
-
Перейдите на вкладку
Тестирование. -
Нажмите кнопку
Запустить тест и посмотрите результат тестирования.При успешном выполнении запроса состояние функции изменится на
Выполнена
, а ответ функции будет содержать код статуса200
и ответ модели. Например:{ "statusCode": 200, "body": "In Tokyo's sky,\nSunshine beams so bright and clear,\nWarmth fills the air." }
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите функцию.
- Удалите секрет.
- Если вы записывали логи в лог-группу, удалите ее.