💬 Как использовать графы знаний для повышения качества ответов чат-ботов
|
Граф знаний – это способ структурированного представления информации и знаний в виде семантической сети, состоящей из узлов (сущностей, концепций) и связей (отношений) между ними. Основные компоненты графа знаний: - Узлы – отдельные сущности или концепции предметной области. Например, «Альберт Эйнштейн», «Теория относительности», «Физика» и т.д.
- Ребра – связи между узлами, которые описывают отношения между сущностями. Например, «Альберт Эйнштейн» – «разработал» – «Теория относительности».
- Типы узлов и связей – позволяют категорировать сущности (персоны, концепции, места и т.д.) и отношения между ними (родственные, временные, иерархические и др.)
- Веса связей – числовые значения, указывающие на важность или релевантность связей между узлами.
|
Графы знаний используются в поисковых системах, электронной коммерции, биоинформатике, научных исследованиях и многих других сферах, где требуется систематизация и анализ больших объемов структурированных и неструктурированных данных. С их помощью можно создать контекстную память для чат-бота, и это значительно улучшит качество его работы: - Снизит уровень галлюцинаций.
- Повысит релевантность и точность ответов LLM.
- Даст модели возможность корректно обрабатывать данные, которых она не знает.
Подробный туториал показывает, как именно это сделать – на примере данных из Википедии и Gemini Pro. В этой публикации: - Описывается процесс создания графа знаний путем анализа страниц Википедии, извлечения концепций, связей между ними и весов этих связей на основе статистики упоминаний на страницах.
- Приводится подробный код на Python для реализации этого процесса с использованием библиотек Wikipedia, Pandas, NetworkX и др.
- Демонстрируется визуализация полученного графа знаний.
- Показано, как интегрировать полученный граф знаний с LangChain для использования в качестве контекстной памяти для большой языковой модели Gemini-1.0-Pro от Google.
|
Визуализация готового графа знаний |
🎩 Hatchet – эффективная альтернатива Celery
|
Hatchet – новая система распределения задач для управления сложными процессами. Это эффективная и производительная альтернатива устаревшим менеджерам очередей. Hatchet позволяет создавать отказоустойчивые процессы, решающие проблемы параллелизма, справедливости распределения задач и ограничения скорости обработки. Вместо того чтобы самостоятельно настраивать очередь задач или систему pub/sub, можно использовать Hatchet для распределения функций между несколькими рабочими процессами с минимальной конфигурацией и настройкой инфраструктуры. Преимущества Hatchet: - Сверхнизкая задержка и высокая пропускная способность. Hatchet построена на очереди с низкой задержкой (среднее время начала задачи – 25 мс), что идеально подходит для ситуаций, где нужно одновременно обеспечить взаимодействие в режиме реального времени и надежность для критически важных задач.
- Справедливость распределения задач, защита от перегрузки и ограничения скорости. Hatchet предлагает встроенные стратегии, такие как FIFO (первым пришел - первым обслужен), LIFO (последним пришел - первым обслужен), Round Robin (циклическое обслуживание) и приоритетные очереди. Эти стратегии помогают избежать распространенных проблем масштабирования с минимальной настройкой.
- Устойчивость к ошибкам. Благодаря настраиваемой политике повторных попыток и встроенной обработке ошибок, Hatchet гарантирует быстрое восстановление операций после временных сбоев. Можно разбить большие задачи на мелкие, чтобы завершить выполнение без необходимости перезапускать всю работу целиком.
В контроль выполнения задач в Hatchet входят: - Отслеживание. Всестороннее отслеживание позволяет быстро выявлять проблемы. Hatchet отслеживает задержку, частоту ошибок и другие пользовательские показатели.
- Восстановление выполнения. Можно воспроизвести события и вручную возобновить выполнение с определенных шагов рабочего процесса.
- Расписание задач. Есть удобные настройки для повторяющихся задач, и разовое выполнение функций в определенное время.
- Защита от перегрузки. Сглаживает скачки трафика и выполняет только то, что система может обработать.
А еще Hatchet предлагает ряд преимуществ по сравнению с Celery: - Использование PostgreSQL в качестве хранилища очереди. Hatchet использует базу данных PostgreSQL, которая считается более надежной и масштабируемой, чем традиционные хранилища, такие как Redis или Mnesia в RabbitMQ.
- Простота использования. Hatchet разработан с упором на простоту использования и отладки.
- Встроенные инструменты для наблюдения. Hatchet не нуждается в ручной настройке со стороны инфраструктурной команды – в нем есть все нужные инструменты для наблюдения за выполнением задач.
|
🌐 Niquests – продвинутая альтернатива Requests
| У популярной библиотеки Requests немало недостатков: - Переусложненный API с избыточными параметрами, плохо взаимодействующими друг с другом (например, проблемы с сочетанием json, files и headers).
- Внутренняя архитектура кода плохо структурирована – это сильно затрудняет поддержку.
- Обработка перенаправлений и повторных попыток (retry) реализована неудачно, с потерей информации об исключениях.
- Неудобная работа cookies из-за имитации словаря.
- Проблемы с поддержкой таймаутов из-за особенностей разрешения DNS.
- Ограниченные возможности настройки TLS и прокси-соединений.
- Механизм аутентификации не взаимодействует с логикой повторов запросов.
- Недостаточное покрытие тестами приводит к проблемам при нестандартном использовании.
- Сложность добавления новых функций из-за обратной несовместимости.
- Документация по использованию внутренних модулей библиотеки оставляет желать лучшего.
Но нашелся герой, написавший новую библиотеку, свободную от этих и многих других недочетов – Niquest. Вот некоторые из преимуществ: - Поддержка HTTP/2 по умолчанию, доступен HTTP/3. HTTP/2 и HTTP/3 обеспечивают более быстрое и эффективное взаимодействие с серверами. В отличие от других библиотек, которым требуется отдельная настройка для использования HTTP/2, Niquests включает его по умолчанию.
- Мультиплексированные соединения устраняют необходимость в асинхронном программировании. Niquests позволяет выполнять одновременные HTTP-запросы без необходимости переписывать код в асинхронном стиле (async/await). Это упрощает разработку и повышает производительность для синхронного кода.
- Повышенная безопасность. Niquests использует безопасные протоколы TLS 1.2 и выше, а также применяет рекомендуемые наборы шифров для защиты от изощренных атак.
- Проверка сертификатов OCSP. Клиент проверяет действительность сертификатов сервера с помощью OCSP (Online Certificate Status Protocol) – это обеспечивает дополнительный уровень безопасности.
- Зависимости с проверкой целостности. Niquests использует библиотеки с проверкой целостности с помощью SLSA (Supply chain Levels for Software Artifacts) – это гарантирует подлинность и неизменность зависимостей.
- Доверие системным корневым сертификатам. Клиент использует доверенные корневые сертификаты из хранилища вашей операционной системы, которое защищено и постоянно обновляется.
Дополнительные фичи: - Производительность. Клиент может быть в 3 раза быстрее, чем другие библиотеки, при работе в синхронном режиме, особенно при использовании HTTP/2.
- Сертификаты в памяти. Позволяет загружать клиентские сертификаты mTLS и ключи без необходимости хранения их в файлах.
- Объектно-ориентированные заголовки. Предоставляет удобный доступ к заголовкам ответов с помощью объектно-ориентированного синтаксиса.
- Исправленные ошибки. Разработчики клиента устранили ряд известных ошибок, которые присутствовали в других Requests.
- Аннотации типов. Niquests использует аннотации для улучшения автодополнения и проверки кода в IDE.
|
Использовать Niquests даже проще, чем Requests |
🤖 Мнение: пора переключаться с бэкенда на ИИ
|
Общемировой тренд – значительное снижение спроса на «обычных» разработчиков ПО, и резкое увеличение потребности в ИИ-разработчиках. Это, несомненно, печальная тенденция – особенно для фронтендеров, спрос на которых снизился значительнее всего. Но у Python-разработчиков есть огромное преимущество – они без особых усилий могут переключиться с бэкенда на машинное обучение. Автор этой публикации рассказал, с чего проще всего начать – с изучения супервостребованной RAG-технологии, – и еще раз подчеркнул, что переключение на разработку ИИ сейчас – оптимальное решение для питонистов: - Рынок традиционных программистов перенасыщен, в то время как экспертов по ИИ не хватает.
- Переквалифицироваться из программиста в разработчика ИИ не так уж сложно – питонистам нужно будет лишь освоить базовые концепции ИИ.
- Разработка ИИ более перспективна с точки зрения востребованности и повышения зарплаты, чем все остальное, что можно сделать на Python.
На этом все, до встречи через неделю! |
|
|
Вы получили это письмо, потому что подписались на нашу рассылку. Если вы больше не хотите получать наши письма, нажмите здесь.
|
|
|
|