Найти в Дзене
Архитектура на .NET

Что необходимо знать .NET разработчику про LLM и AI, часть 1

Сейчас тема больших языковых моделей (LLM) очень актуальна. Их применяют для построения интеллектуальных ассистентов, помощников, или агентов. Несмотря на то, что традиционно для работы с машинным обучением (ML), анализоv данных (Data Science) и подобными областями используется Python, .NET разработчикам вовсе не обязательно оставаться в стороне или учить другие языки. Microsoft внимательно следит за трендами и адаптирует весь необходимый инструментарий под .NET, выпуская соответствующие SDK и фреймворки. Хочется коснуться этой темы на канале, рассказать о применении MCP C# SDK и Microsoft Agent Framework с практическими примерами и необходимой теоретической базой, но одной статьёй тут явно не обойтись, поэтому будет серия. А начнём с того, что определимся с базовыми терминами и концепциями. Итак, ИИ. Под термином искусственного интеллекта можно подразумевать очень многое, но для нас в первую очередь важно понимать, что есть несколько решаемых ИИ задач: Относить рассматриваемый ввод к

Сейчас тема больших языковых моделей (LLM) очень актуальна. Их применяют для построения интеллектуальных ассистентов, помощников, или агентов.

Несмотря на то, что традиционно для работы с машинным обучением (ML), анализоv данных (Data Science) и подобными областями используется Python, .NET разработчикам вовсе не обязательно оставаться в стороне или учить другие языки.

Microsoft внимательно следит за трендами и адаптирует весь необходимый инструментарий под .NET, выпуская соответствующие SDK и фреймворки.

Хочется коснуться этой темы на канале, рассказать о применении MCP C# SDK и Microsoft Agent Framework с практическими примерами и необходимой теоретической базой, но одной статьёй тут явно не обойтись, поэтому будет серия. А начнём с того, что определимся с базовыми терминами и концепциями.

Итак, ИИ. Под термином искусственного интеллекта можно подразумевать очень многое, но для нас в первую очередь важно понимать, что есть несколько решаемых ИИ задач:

  • Относить рассматриваемый ввод к какому-нибудь классу. Это задача классификации. Например, по не очень внятному описанию товара на маркетплейсе необходимо определить категорию и тип товара.
  • Заполнять пробелы в последовательностях, или предсказывать продолжение последовательности. Это задачи генеративные. Например, сгенерировать программный код по текстовому описанию.

Эти задачи решаются с помощью обученных моделей, представляющих собой нейронные сети. Огромное количество входов, соединённых с огромным количеством выходов через огромное количество промежуточных слоёв. При этом сигнал от каждого входа, проходя через очередной слой, трансформируется (ослабляется или усиливается) согласно передаточной функции. Работа передаточной функции определяется значением передаточного коэффициента. Значения эти коэффициентов в каждой передаточной функции сети – это результат обучения модели.

Нас в первую очередь интересуют большие языковые модели (LLM).

Языковая модель — это особая нейронная сеть, обученная на огромном количестве текстов. Суть обучения, условно, сводится к тому, чтобы научить модель предсказывать следующее слово в тексте. Или, иногда, вставлять пропущенные в тексте слова. Такие модели называются генеративными, т.к. они в итоге могут на определенный ввод (вопрос) сгенерировать некий очень правдоподобно выглядящей вывод (ответ).

Получается, что этот ответ не обязан быть абсолютно точным или вообще правдивым или опирающимся на реальность, он просто генерируется так, как, по статистике, должен выглядеть ответ на заданный вопрос. Никакой магии, сплошная математика и статистика.

Сама модель представляет собой большой файл (большие модели могут занимать сотни гигабайт), содержащий данные о конфигурации нейронной сети (количестве и размере слоев и связей), а так же веса всех связей в этой сети (те самые коэффициенты передаточных функций).

От количества параметров в модели будет зависеть размер её файла.

Например, модель deepseek-r1:1.5b имеет полтора миллиарда параметров и весит 1.1GB, а модель deepseek-r1:671b имеет 671 миллиард параметров и весит 404GB.

Сам файл модели можно сравнить с файлом базы данных — сам по себе он не предоставляет никакого API и не является запускаемым. Чтобы им воспользоваться, необходимо его загрузить в специальную систему, как файл БД загружается в СУБД.

Популярным решением для работы с LLM является Ollama. Это программа, которую можно установить локально и загрузить в неё какую-нибудь open-source языковую модель. Например, одну из упомянутых выше.

Ollama, в свою очередь, уже представляет API для работы с загруженным в неё файлом модели. Но чтобы модель сгенерировала ответ на запрос, необходимо "прогнать" входные данные через все слои вплоть до последнего, выходного слоя. Технически это предполагает огромное количество (сотни и тысячи миллиардов) арифметических операций. С подобного рода задачами графический процессор справляется куда лучше, чем центральный. Именно поэтому для быстрой работы LLM требуется GPU с большим количеством видеопамяти (в идеале таким, чтобы в ней разместилась вся модель).

С загруженной в Ollama моделью уже можно работать. В том числе, из .NET приложений. В следующей статье разберём использование OllamaSharp для этой цели.