Сегодня мы подробно рассмотрим .NET AI Template от Microsoft, выпущенный в марте. Этот шаблон включает два типа проектов — AI Chat Web App и Local MCP Server Console App.
В этом обзоре мы сосредоточимся на AI Chat Web App: установим шаблон, посмотрим, что в него входит, создадим проект в Visual Studio и запустим его, чтобы увидеть, как всё работает.
Установка .NET AI Template
Начнём с установки шаблона AI.
Откройте терминал и выполните команду:
dotnet new install Microsoft.Extensions.AI.Templates
Эта команда установит шаблоны локально. После завершения установки вы увидите два новых шаблона:
AI Chat Web App
Local MCP Server Console App
Использовать их можно в Visual Studio, Visual Studio Code (с установленным C# Dev Kit) или напрямую из командной строки, выполнив:
dotnet new aichatweb
или
dotnet new mcpserver
чтобы создать проект прямо в рабочей директории.
Для сегодняшней демонстрации мы выберем AI Chat Web App и будем работать в Visual Studio.
Создание проекта в Visual Studio
Перейдём в Visual Studio.
На экране Create a new project (создание нового проекта) откройте выпадающее меню All project types. Вы увидите новую категорию AI.
Выберите её — появятся два шаблона:
AI Chat Web App
Local MCP Server Console App
Выберите AI Chat Web App и нажмите Next.
Введите имя проекта, например ChatApp1
. Укажите папку для сохранения и нажмите Create.
После этого появится возможность выбрать поставщика AI-модели и хранилище векторов.
Доступные поставщики AI-сервисов:
Azure OpenAI
GitHub Models
Alma
OpenAI Platform
В этом примере мы используем GitHub Models с локальным хранилищем векторов — это самый простой способ быстро начать работу.
Нажмите Create, и Visual Studio автоматически создаст проект, включая интерфейс на Blazor, папку Data и службы (Services).
Настройка GitHub-токена
Далее необходимо добавить GitHub-токен.
В файле README
вашего проекта указана инструкция:
"GitHubModelsToken": "your-token"
Этот токен нужно вставить в файл secrets.json
вашего проекта.
Откройте secrets.json
и вставьте туда свой токен, соблюдая тот же JSON-формат, что в примере.
Изучаем структуру проекта
Теперь, когда токен добавлен, давайте посмотрим, какие файлы создались.
Папка Pages содержит страницы Blazor, например
Chat.razor
— это основной интерфейс чата.В папке Services находится логика, управляющая ходом диалога.
В
wwwroot/data
расположены примерные PDF-файлы, используемые для загрузки данных и семантического поиска.
Когда вы запускаете приложение, оно считывает эти PDF-файлы, создаёт эмбеддинги (векторные представления) и позволяет чату отвечать на вопросы, основываясь на содержании документов.
Файл Program.cs
Откройте файл Program.cs
. В нём автоматически настроены AI-сервисы и хранилище векторов.
В качестве языковой модели (LLM) используется GPT-4.0 Mini.
Для эмбеддингов — Text-embedding-3-small.
Векторная база данных — SQLite.
Всё это создаётся автоматически — вручную ничего настраивать не нужно.
Как работает загрузка данных
Проект содержит несколько ключевых классов, отвечающих за обработку данных.
Класс DataIngestor
Этот класс читает и обрабатывает PDF-файлы из папки wwwroot/data
.
Он извлекает текст, создаёт эмбеддинги с помощью выбранной модели и сохраняет их в векторной базе данных SQLite.
Таким образом, ваши документы превращаются в поисковый векторный индекс, с которым может работать искусственный интеллект.
Класс SemanticSearch
Во время диалога этот класс преобразует вопрос пользователя в эмбеддинг, сравнивает его с сохранёнными векторами документов и выбирает наиболее релевантные фрагменты информации.
Затем эти результаты передаются языковой модели, которая формирует естественный ответ, часто включая ссылки на источник данных.
Благодаря этим классам приложение может отвечать, опираясь на содержимое документов, а не генерировать случайный текст.
Запуск приложения
Теперь давайте запустим приложение и посмотрим, как оно работает.
После запуска программа автоматически обработает примерные PDF-файлы из папки wwwroot/data
и создаст их эмбеддинги.
Затем откроется браузер с чистым и удобным интерфейсом чата на Blazor.
Теперь можно задавать вопросы, например:
«Что входит в набор для выживания?»
Приложение выполнит:
Обработку вопроса,
Семантический поиск по базе векторов,
Формирование ответа с указанием источника (файла и страницы).
Всё это происходит автоматически — без дополнительной настройки.
Использование собственных данных
Теперь посмотрим, как заставить чат-бота работать с вашими собственными документами.
Откройте папку wwwroot/data
— там находятся два PDF-файла по умолчанию.
Чтобы добавить свои данные, просто поместите туда нужный PDF.
Например, можно взять свою статью о пагинации в EF Core, сохранить её как PDF и скопировать в эту папку.
После этого перезапустите приложение.
Класс DataIngestor
автоматически обнаружит новый файл, извлечёт текст, создаст эмбеддинги и добавит их в базу.
Теперь можно задать вопрос:
«Какой метод пагинации лучше использовать для больших наборов данных?»
Чат ответит, используя контент из вашей статьи, объяснив, что Keyset Pagination эффективнее Offset Pagination на больших таблицах, поскольку она не пропускает строки и работает быстрее.
Под ответом вы также увидите ссылки на файл и страницу, откуда взята информация.
Расширение возможностей чат-бота
Теперь, когда приложение работает, посмотрим, как можно расширить его функциональность.
Проект построен на Microsoft.Extensions.AI, что позволяет легко добавлять собственные C#-функции, которые чат-бот сможет вызывать.
Это значит, что вы можете добавить новые возможности — например, получать актуальные данные, подключать API или выполнять действия по запросу пользователя.
Пример: функция GetWeather
В файле Chat.razor
можно определить новую C#-функцию, например:
string GetWeather(string city) { // Возвращает пример прогноза погоды return city switch { "London" => "Drizzle", "Paris" => "Sunny", _ => "Cloudy" }; }
Затем нужно зарегистрировать её в методе OnInitialized
, обновив список инструментов в chat options
.
Теперь чат-бот сможет вызывать эту функцию при соответствующем запросе.
Если теперь спросить:
«Какая погода в Лондоне?»
Чат-бот вызовет функцию GetWeather
и ответит:
«Погода в Лондоне — моросящий дождь.»
Так чат-бот напрямую взаимодействует с вашим кодом на C#.
Далее вы можете подключать реальные API, базы данных или даже устройства IoT.
Заключение
Вот и всё — полный обзор работы .NET AI Template от Microsoft.
Этот шаблон — отличная отправная точка, если вы хотите создать:
AI-ассистента
Бота-документацию
Пользовательское AI-приложение на .NET