Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве вы узнаете, как открыть функциональность приложения ASP.NET Core через OpenAPI, добавить его в Foundry Agent Service и взаимодействовать с приложением на естественном языке на игровой площадке агентов.
Если веб-приложение уже имеет полезные функции, такие как покупки, бронирование отелей или управление данными, это легко сделать эти возможности доступными агенту ИИ в Службе агента Foundry. Просто добавив в приложение схему OpenAPI, агент может понять и использовать возможности приложения при реагировании на запросы пользователей. Это означает, что ваше приложение может сделать все, что может сделать агент ИИ, с минимальными усилиями, помимо создания конечной точки OpenAPI для вашего приложения. В этом руководстве вы начнёте с простого приложения для списков to-do. К концу вы сможете создавать, обновлять и управлять задачами с агентом с помощью общения ИИ.
- Добавьте функции OpenAPI в веб-приложение.
- Убедитесь, что схема OpenAPI совместима со службой агента Foundry.
- Зарегистрируйте приложение в качестве средства OpenAPI в службе агента Foundry.
- Проверьте агент на игровой площадке агентов.
Предпосылки
В этом руководстве предполагается, что вы работаете с примером, используемым в руководстве. Развертывание приложения ASP.NET Core и Базы данных SQL Azure в Службе приложений Azure.
По крайней мере, откройте образец приложения в GitHub Codespaces и разверните приложение, запустив команду azd up.
Добавление функций OpenAPI в веб-приложение
Подсказка
Чтобы внести все следующие изменения, дайте указания GitHub Copilot в агентском режиме:
I'd like to add OpenAPI functionality to all the methods in Controllers/TodosController.cs, but I don't want to change the existing functionality with MVC. Please also generate the server URL and operation ID in the schema.
В терминале пространства кода добавьте пакеты NuGet Swashbuckle в проект:
dotnet add package Swashbuckle.AspNetCore --version 6.5.0 dotnet add package Swashbuckle.AspNetCore.Annotations --version 6.5.0В controllers/TodosController.cs добавьте следующие методы API. Чтобы обеспечить их совместимость со службой агента Foundry, необходимо указать
OperationIdсвойство в атрибутеSwaggerOperation(см. инструкции по использованию службы агента Foundry с указанными средствами OpenAPI: предварительные требования).// GET: api/todos [HttpGet("api/todos")] [SwaggerOperation(Summary = "Gets all Todo items", OperationId = "GetTodos")] [ProducesResponseType(typeof(IEnumerable<Todo>), 200)] public async Task<ActionResult<IEnumerable<Todo>>> GetTodos() { return await _context.Todo.ToListAsync(); } // GET: api/todos/5 [HttpGet("api/todos/{id}")] [SwaggerOperation(Summary = "Gets a Todo item by ID", OperationId = "GetTodoById")] [ProducesResponseType(typeof(Todo), 200)] [ProducesResponseType(404)] public async Task<ActionResult<Todo>> GetTodo(int id) { var todo = await _context.Todo.FindAsync(id); if (todo == null) { return NotFound(); } return todo; } // POST: api/todos [HttpPost("api/todos")] [ProducesResponseType(StatusCodes.Status201Created)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [SwaggerOperation(Summary = "Creates a new todo item.", Description = "Creates a new todo item and returns it.", OperationId = "CreateTodo")] public async Task<IActionResult> CreateTodo([FromBody] Todo todo) { if (!ModelState.IsValid) { return BadRequest(ModelState); } _context.Add(todo); await _context.SaveChangesAsync(); return CreatedAtAction(nameof(GetTodo), new { id = todo.ID }, todo); } // PUT: api/todos/{id} [HttpPut("api/todos/{id}")] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] [SwaggerOperation(Summary = "Updates a todo item.", Description = "Updates an existing todo item by ID.", OperationId = "UpdateTodo")] public async Task<IActionResult> UpdateTodo(int id, [FromBody] Todo todo) { // Use the id from the URL fragment only, ignore mismatching check if (!TodoExists(id)) { return NotFound(); } todo.ID = id; _context.Entry(todo).State = EntityState.Modified; await _context.SaveChangesAsync(); return NoContent(); } // DELETE: api/todos/{id} [HttpDelete("api/todos/{id}")] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status404NotFound)] [SwaggerOperation(Summary = "Deletes a todo item.", Description = "Deletes a todo item by ID.", OperationId = "DeleteTodo")] public async Task<IActionResult> DeleteTodo(int id) { var todo = await _context.Todo.FindAsync(id); if (todo == null) { return NotFound(); } _context.Todo.Remove(todo); await _context.SaveChangesAsync(); return NoContent(); }В верхней части контроллеров или TodosController.cs добавьте следующее:
using Swashbuckle.AspNetCore.Annotations;Этот код дублирует функциональные возможности существующего контроллера, который является ненужным, но вы будете хранить его для простоты. Рекомендуется переместить логику приложения в класс службы, а затем вызвать методы службы как из действий MVC, так и из методов API.
В Program.cs зарегистрируйте службу генератора Swagger. Это включает документацию по OpenAPI для API, которая позволяет Службе агентов Foundry понять API. Обязательно укажите URL-адрес сервера. Службе агента Foundry требуется схема, содержащая URL-адрес сервера.
builder.Services.AddSwaggerGen(c => { c.EnableAnnotations(); var websiteHostname = Environment.GetEnvironmentVariable("WEBSITE_HOSTNAME"); if (!string.IsNullOrEmpty(websiteHostname)) { c.AddServer(new Microsoft.OpenApi.Models.OpenApiServer { Url = $"https://{websiteHostname}" }); } });В Program.cs включите ПО промежуточного слоя Swagger. Это промежуточное программное обеспечение предоставляет созданную документацию OpenAPI во время выполнения, что делает её доступной через браузер.
app.UseSwagger(); app.UseSwaggerUI();В терминале пространства кода запустите приложение, используя
dotnet run.Выберите Открыть в браузере.
Перейдите на Swagger UI, добавив
/swagger/index.htmlк URL.Убедитесь, что операции API работают, пробуя их в пользовательском интерфейсе Swagger.
Вернитесь в терминал codespace, зафиксируйте изменения (метод GitHub Actions) или запустите
azd up(метод Azure Developer CLI).После развертывания изменений перейдите к
https://<your-app's-url>/swagger/v1/swagger.jsonсхеме и скопируйте ее позже.
Создание агента в Microsoft Foundry
Замечание
В этих шагах используется новый портал Foundry.
На портале Foundry в правом верхнем меню выберите New Foundry.
Если это первый раз на новом портале Foundry, выберите имя проекта и нажмите кнопку "Создать проект".
Присвойте проекту имя и нажмите кнопку "Создать".
Нажмите кнопку "Начать сборку", а затем создайте агент.
Присвойте агенту имя и нажмите кнопку "Создать". Когда агент будет готов, вы увидите песочницу агента.
Обратите внимание на модели, которые можно использовать и доступные регионы.
В песочнице агента разверните Инструменты и выберите Добавить>настраиваемый>инструмент OpenAPI>Создать.
Присвойте инструменту имя и описание. В поле схемы OpenAPI 3.0+ вставьте скопированную ранее схему.
Нажмите "Создать инструмент".
Нажмите кнопку "Сохранить".
Подсказка
В этом руководстве средство OpenAPI настроено для анонимного вызова приложения без проверки подлинности. Для рабочих сценариев необходимо защитить инструмент с помощью идентификации управляемой учетной записи. Пошаговые инструкции см. в разделе "Безопасные конечные точки OpenAPI" для службы агента Foundry.
Тестирование агента
В инструкциях приведены некоторые простые инструкции, например "Используйте средство todosApp для управления задачами".
Свяжитесь с агентом с учетом следующих вариантов запроса:
- Показать мне все задачи.
- Создайте задачу под названием "Придумать три шутки салата".
- Измените это на "Придумать с тремя шутками стука-стука".
Рекомендации по обеспечению безопасности
При предоставлении API-интерфейсов с помощью OpenAPI в Службе приложений Azure следуйте приведенным ниже рекомендациям по обеспечению безопасности.
- Проверка подлинности и авторизация. Защита конечных точек OpenAPI с помощью проверки подлинности Microsoft Entra. Пошаговые инструкции см. в разделе "Безопасные конечные точки OpenAPI" для службы агента Foundry. Кроме того, вы можете защитить свои конечные точки с помощью Azure API Management и идентификатора Microsoft Entra ID, обеспечив доступ только для авторизованных пользователей или агентов.
-
Проверьте входные данные: Пример кода проверяется
ModelState.IsValidв методеCreateTodo, что гарантирует, что входящие данные соответствуют атрибутам проверки модели. Дополнительные сведения см. в разделе "Проверка модели" в ASP.NET Core. - Используйте ПРОТОКОЛ HTTPS: В примере используется служба приложений Azure, которая по умолчанию применяет ПРОТОКОЛ HTTPS и предоставляет бесплатные СЕРТИФИКАТЫ TLS/SSL для шифрования данных во время передачи.
- Ограничение CORS: Ограничить общий доступ к ресурсам между источниками (CORS) только доверенным доменам. Дополнительные сведения см. в разделе "Включение CORS".
- Применение ограничения скорости:Используйте службу управления API или службу пользовательского промежуточного слоя, чтобы предотвратить злоупотребления и атаки типа "отказ в обслуживании".
- Скрытие конфиденциальных конечных точек: Избегайте предоставления внутренних или административных API в схеме OpenAPI.
- Просмотрите схему OpenAPI: Убедитесь, что схема OpenAPI не раскрывает конфиденциальную информацию (например, внутренние ссылки, секреты или детали реализации).
- Обновление зависимостей: Регулярно обновляйте пакеты NuGet и отслеживайте рекомендации по безопасности.
- Ведение журнала и мониторинг активности: Включите ведение журнала и мониторинг доступа для обнаружения подозрительной активности.
- Используйте управляемые удостоверения: При вызове других служб Azure используйте управляемые удостоверения вместо жестко закодированных учетных данных.
Дополнительные сведения см. в статье "Защита приложения службы приложений " и рекомендации по обеспечению безопасности REST API.
Следующий шаг
Теперь вы настроили приложение App Service для использования в качестве инструмента для службы агента Foundry. Взаимодействуйте с API вашего приложения через естественный язык на платформе для агентов. Здесь вы можете продолжать добавлять функции в агент на портале Foundry, интегрировать его в собственные приложения с помощью пакета SDK Microsoft Foundry или REST API или развернуть его в составе более крупного решения. Агенты, созданные в Microsoft Foundry, можно запускать в облаке, интегрировать в чат-боты или внедрять в веб-приложения и мобильные приложения.
Чтобы выполнить следующий шаг и узнать, как запустить агент непосредственно в Службе приложений Azure, ознакомьтесь со следующим руководством.