Создание приложений на Go с использованием LLM |
||
|
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ Атаки на ИИ Внедрение ИИИИ теория Компьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Промпты. Генеративные запросы Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2025-10-26 11:50 Как и возможности LLM (Large Language Models) и смежных инструментов, таких как Встраивание моделей значительно выросло за последний год, разработчиков становится все больше и больше рассматривают возможность интеграции LLM в свои приложения. Поскольку для LLM часто требуется выделенное оборудование и значительные вычислительные ресурсы, чаще всего они упаковываются в виде сетевых сервисов, предоставляющих API для доступ. Так работают API для ведущих LLM, таких как OpenAI или Google Gemini; даже инструменты для запуска собственного LLM, такие как обертка Ollama LLM в REST API для локального потребления. Более того, разработчики, которые берут Преимущества LLM в их приложениях часто требуют дополнительных инструментов, таких как Векторные базы данных, которые чаще всего развертываются в качестве сетевых служб в качестве колодец. Другими словами, приложения на базе LLM во многом похожи на другие современные облачные приложения: им требуется отличная поддержка REST и RPC протоколы, параллелизм и производительность. Так уж получилось, что это те самые районы в чем Go превосходен, что делает его фантастическим языком для написания статей на основе LLM Приложений. В этом сообщении блога рассматривается пример использования Go для простого LLM-процессора приложение. Он начинается с описания проблемы, с которой сталкивается демонстрационное приложение и далее представляет несколько вариантов приложения, которые Все они выполняют одну и ту же задачу, но используют разные пакеты для ее реализации. Все Код для демонстраций этого поста доступен в Интернете. RAG-сервер для вопросов и ответов¶ Распространенным методом применения на основе LLM является RAG (Retrieval Augmented Generation). RAG — один из наиболее масштабируемых способов настройки базы знаний LLM для взаимодействий в предметной области. Мы собираемся создать сервер RAG в Go. Это HTTP сервер, который предоставляет Две операции с пользователями:
В типичном реальном сценарии пользователи добавляют корпус документов в сервер, и приступайте к заданию ему вопросов. Например, компания может заправиться базу знаний сервера RAG с внутренней документацией и использовать ее для предоставить возможность вопросов и ответов на основе LLM для внутренних пользователей. Вот схема, показывающая взаимодействие нашего сервера с внешним мир:
В дополнение к отправке пользователем HTTP-запросов (описаны две операции выше), сервер взаимодействует с:
В частности, сервер предоставляет пользователям доступ к двум конечным точкам HTTP:
В нашей демонстрации используются следующие услуги:
Заменить их другими, эквивалентными услугами должно быть очень просто. В Собственно, именно об этом и говорят вторые и третьи варианты сервера! Мы начнем с первого варианта, который использует эти инструменты напрямую. Использование API Gemini и Weaviate напрямую¶ И Gemini API, и Weaviate имеют удобные Go SDK (клиентские библиотеки), И наш первый вариант сервера использует их напрямую. Полный код этого variant находится в этом каталоге. В этой статье мы не будем воспроизводить весь код, но вот несколько заметок Имейте в виду во время чтения: Структура: структура кода будет знакома любому, кто писал HTTP-сервер в Go. Инициализируются клиентские библиотеки для Gemini и Weaviate и клиенты хранятся в значении состояния, которое передается обработчикам HTTP. Регистрация маршрутов: HTTP-маршруты для нашего сервера легко настроить Использование усовершенствований маршрутизации, представленных в Ход 1.22: Параллелизм: обработчики HTTP нашего сервера подключаются к на другие сервисы по сети и ожидать ответа. Это не проблема для Go, так как каждый обработчик HTTP выполняется одновременно в своей собственной горутине. Этот RAG сервер может обрабатывать большое количество одновременных запросов, а код Каждый обработчик является линейным и синхронным. Пакетные API: поскольку запрос может содержать большое количество документов для добавления в базу знаний, сервер использует пакетные API для обоих embeddings () и база данных Weaviate () для эффективности. Использование LangChain для Го¶ Наш второй вариант сервера RAG использует LangChainGo для выполнения той же задачи. LangChain — популярный фреймворк Python для создание приложений на основе LLM. LangChainGo является его эквивалентом Go. Тем Фреймворк имеет некоторые инструменты для создания приложений из модульных компонентов, а также поддерживает множество поставщиков LLM и векторных баз данных в общем API. Это позволяет разработчикам писать код, который может работать с любым поставщиком и изменять поставщиков очень легко. Полный код для этого варианта находится в этом каталоге. При чтении кода вы заметите две вещи: Во-первых, он несколько короче предыдущего варианта. LangChainGo заботится о себе обертывания полных API векторных баз данных в общие интерфейсы, и меньше код нужен для инициализации и работы с Weaviate. Во-вторых, API LangChainGo позволяет довольно легко переключаться между поставщиками. Допустим мы хотим заменить Weaviate на другую векторную БД; В нашем предыдущем варианте мы бы придется переписать весь код, взаимодействующий с векторной БД, чтобы использовать новый API. С фреймворк, такой как LangChainGo, нам больше не нужно этого делать. Пока LangChainGo поддерживает новую векторную БД, которую мы должны иметь возможность заменить всего несколько строк кода на нашем сервере, так как все БД реализуют общий интерфейс: Использование Genkit для Go¶ Ранее в этом году Google представил Genkit для Go - новый фреймворк с открытым исходным кодом для создания приложений на основе LLM. Акции Genkit некоторые характеристики с LangChain, но расходится в других аспектах. Как и LangChain, он предоставляет общие интерфейсы, которые могут быть реализованы с помощью различных провайдеров (в виде плагинов), и тем самым производит переключение с одного на другой Проще. Тем не менее, он не пытается прописать, как разные компоненты LLM взаимодействовать; Вместо этого он фокусируется на производственных функциях, таких как оперативное управление и проектирование и развертывание с помощью интегрированных инструментов разработчика. Наш третий вариант сервера RAG использует Genkit для Go для выполнения той же задачи. Его полный код находится в этом каталоге. Этот вариант довольно похож на вариант LangChainGo - общие интерфейсы для LLM, embedders и векторные базы данных используются вместо API прямого поставщика, что делает возможным Так проще переключаться с одного на другой. Кроме того, развертывание LLM-системы применение в производстве намного проще с Genkit; Мы этого не реализуем в нашем варианте, но не стесняйтесь прочитать документацию, если вам это интересно. Резюме - Выбирайте приложения на базе LLM¶ Примеры в этом посте дают лишь некоторое представление о том, что возможно для строительства Приложения на основе LLM в Go. Это демонстрирует, насколько просто его собрать мощный RAG-сервер с относительно небольшим количеством кода; Самое главное, образцы Упаковка имеет значительную степень готовности производства из-за некоторых фундаментальных Функции Go. Работа с LLM-сервисами часто подразумевает отправку REST или RPC-запросов в сеть сервиса, ожидание ответа, отправка новых запросов в другие сервисы на основе на том и так далее. Go преуспевает во всех этих областях, предоставляя отличные инструменты для управления параллелизм и сложность жонглирования сетевыми службами. Кроме того, высокая производительность и надежность Go в качестве облачного языка делает его естественным выбором для реализации более фундаментальных строительных блоков экосистемы LLM. В качестве примера можно привести такие проекты, как Ollama, LocalAI, Weaviate или Milvus. Источник: go.dev Комментарии: |
|