Текст как данные, откуда угодно куда угодно
Введение
В марте 2024 года на SF Unstructured Data Meetup мы услышали выступление AJ Steers о том, как можно использовать Airbyte и PyAirbyte, чтобы работать с текстом как с данными, откуда угодно и куда угодно. Это означает, что мы можем интегрировать и использовать как структурированные, так и неструктурированные данные из различных источников на разных платформах.
Ссылка на запись выступления AJ Steers на YouTube: Смотреть на YouTube.
Кто такой AJ Steers и почему вам стоит обратить внимание на унифицированную интеграцию данных?
AJ Steers — опытный архитектор, дата-инженер, разработчик программного обеспечения и эксперт по data ops. Он проектировал комплексные решения в Amazon и сформировал концепцию моделей количественной персональной аналитики. На данный момент он является штатным инженером-программистом в Airbyte.
Унифицированная интеграция данных объединяет различные типы и источники данных в единую, согласованную систему для эффективного анализа и обработки. Эта возможность крайне важна для раскрытия полного потенциала ваших данных, обеспечивая бесшовный доступ и использование на различных платформах и в приложениях. Как говорит AJ: «Более чем когда-либо прежде нас окружают пригодные для использования данные», и теперь всё сводится к альтернативным издержкам. Сколько времени у нас есть, чтобы получить из источника данные, которые, как мы считаем, могут быть ценными?
Теперь давайте перейдём к выступлению AJ на тему «Текст как данные, откуда угодно и куда угодно» с использованием Airbyte.
Расширение поддерживаемых источников и назначений Airbyte
До сих пор Airbyte фокусировался на обеспечении надёжности, гибких вариантов развертывания и мощной библиотеки коннекторов для бесшовной интеграции традиционных табличных данных. Но что насчёт неструктурированных данных? AJ рассказывает, чем команда Airbyte занималась последние шесть месяцев.
За последние шесть месяцев, считая назад от марта 2024 года, Airbyte расширил свои возможности, чтобы охватить источники неструктурированных данных в дополнение к традиционным источникам табличных данных. Это связано с растущей важностью и распространённостью неструктурированных данных в современной экосистеме данных. В рамках этого расширения Airbyte вышел за пределы назначений типа SQL и файловых назначений, охватив назначения в виде векторных баз данных, таких как Milvus, что позволяет эффективно использовать данные в различных приложениях. Давайте рассмотрим некоторые коннекторы, поддерживаемые Airbyte как для структурированных, так и для неструктурированных источников данных.
Airbyte поддерживает более 350 коннекторов, поэтому мы не можем перечислить их все. Но слайд выше, которым поделился AJ, показывает примеры коннекторов для каждой категории источников и назначений. До сих пор мы говорили о неструктурированных данных и о том, как Airbyte расширяется, чтобы их поддерживать. Но каковы реальные примеры таких данных?
Подумайте об этом блоге, который вы читаете: он организован в табличной форме? Это яркий пример неструктурированных данных, состоящих из текста, который не укладывается аккуратно в строки и столбцы. Неструктурированные данные — это информация, которая не хранится в традиционной базе данных со строками и столбцами. Они включают такие данные, как текст, изображения, видео и публикации в социальных сетях. Давайте посмотрим на некоторые примеры неструктурированных данных, которыми AJ поделился на слайде ниже.
С такими данными и с помощью Airbyte в их потреблении разные сообщества имеют разные ожидания от Airbyte.
Разработчики GenAl: Хотят упрощённые интеграции с другими инструментами и парадигмами экосистемы.
Дата-сайентисты: Хотят библиотеки, которые могут работать в Jupyter notebook, независимо от центрального хранилища данных.
Дата-инженеры: Хотят подход pipelines-as-code, возможность запускать CI-тестовые пайплайны и разработку без лишних препятствий.
Разработчики: хотят создавать и итеративно дорабатывать локально, а затем развертывать позже.
Это показывает, что все мы хотим отличные библиотеки, хорошую совместимость и больше контроля. Но всё сводится к тому, чего хотите вы. Некоторые из нас хотят что-то, для чего можно писать код и что можно контролировать, тогда как другие предпочитают быть менее техническими и использовать пользовательский интерфейс. Традиционно это приводило нас к совершенно разным путям. Airbyte пытается разрушить эти барьеры для всех, кто может запускать и писать код на Python, или для тех, кто может просто скопировать и вставить несколько строк кода с помощью PyAirbyte. Давайте посмотрим, что такое PyAibyte и каковы его преимущества.
Знакомство с PyAirbyte
PyAirbyte — это Python-библиотека, предоставляющая интерфейс для взаимодействия с Airbyte. Она позволяет нам контролировать и управлять нашими экземплярами Airbyte с помощью Python. Думайте об этом как о переносе возможностей Airbyte каждому Python-разработчику.
Преимущества PyAirbyte
- Запуск где угодно: Мы можем запускать PyAirbyte в Jupyter notebook, независимо от какого-либо хранилища данных. Это означает, что мы можем использовать его во многих средах, а не только в тех, которые привязаны к конкретному хранилищу данных, что дает нам гибкость работать в среде, которая лучше всего соответствует нашим потребностям.
- Сокращение времени до получения ценности: С PyAirbyte мы можем создавать и итеративно дорабатывать конвейеры данных локально перед их развертыванием. Это позволяет нам тестировать и улучшать наши конвейеры, чтобы убедиться, что они работают как ожидается, что помогает сократить время, необходимое для получения ценных инсайтов из данных.
- Быстрое прототипирование: PyAirbyte не требует пользовательского интерфейса или регистраций, поэтому мы можем сразу начать определять наши конвейеры данных в коде. Это ускоряет процесс прототипирования.
- Гибкость: Мы можем использовать PyAirbyte с инструментами и фреймворками в нашей экосистеме. Это означает, что мы можем интегрировать его с другими инструментами, которые уже используем, что облегчает включение его в наши существующие рабочие процессы и процедуры.
Теперь давайте углубимся в то, как вы можете начать работу с Airbyte и PyAirbyte всего за несколько шагов.
Демонстрации UI и кода
AJ подробно рассматривает демонстрационную сессию, показывающую, как мы можем использовать размещенную версию Airbyte (подход без кода) и PyAirbyte (подход с минимальным кодом) для интеграции наших источников данных с нашими приемниками данных.
Демонстрация подхода с UI
Для тех, кто любит нажимать кнопки больше, чем печатать код, подход с UI — это воплощение мечты. Это как «легкий режим» в вашей любимой видеоигре. Мы будем кратки, поскольку уже подробно рассмотрели как использовать размещенную версию Airbyte для подключения источника данных и приемника. Связанная статья выходит за рамки части интеграции и показывает нам, как создать реальное приложение, используя установленное соединение.
Есть четыре основных шага, связанных с использованием подхода без кода для подключения источника данных к приемнику данных.
Зарегистрируйтесь или войдите в свою учетную запись Airbyte. При регистрации вам предоставляется 14-дневный пробный период.
Настройте источник данных.
Настройте приемник данных.
Создайте соединение между источником и приемником.
Когда соединение установлено, вы готовы использовать свои данные. Если вы гик кода, как я, и предпочитаете подход с кодом, PyAirbyte вас выручит.
Демонстрация подхода с кодом
Получение данных с помощью PyAirbyte за три шага
Процесс получения данных с помощью PyAirbyte довольно прост.
Шаг 1:
Создайте source с помощью функции get_source().
import airbyte as ab
# Check for supported sources
print(ab.get_available_connectors())
# Create the data source we want
source = ab.get_source("source-github")
Чтобы наглядно увидеть все коннекторы, которые поддерживает Airbyte, посмотрите страницу поддерживаемых коннекторов. Но что, если коннектор вашего источника не поддерживается? Тогда вам нужно создать собственный кастомный коннектор. Не волнуйтесь, это не так сложно, как кажется. Вам просто нужно следовать этому руководству, поскольку Airbyte предлагает no-code конструктор коннекторов, который позволяет нам создавать коннекторы менее чем за 10 минут.
Шаг 2:
Настройте наш источник с помощью set_config().
source.set_config(
{
# Replace with your desired repository
"repositories": ["FINCH285/engineering-education"],
"credentials": {
"personal_access_token": ab.get_secret(
"GITHUB_PERSONAL_ACCESS_TOKEN"
)
}
}
)
# Validate the config and credentials
source.check()
Это просто передача того, откуда в источнике мы хотим получить данные, и необходимых учетных данных для авторизации.
Шаг 3:
Считайте данные с помощью read() function.
# See what streams are avilable from the source
print(source.get_available_streams())
#Pull data rom the steams we choose
read_result = source.read(
streams=['branches', 'collaborators']
)
# Use the interop option
branches_dataframe = read_result["branches"].to_pandas()
branches_sql_table = read_result["branches"].to_sql_table()
branches_lln_docs = read_result["branches"].to_documents()
Опция interop позволяет нам преобразовать полученные данные в различные структуры данных, которые лучше всего подходят для нашего сценария использования. На этом трехэтапный процесс завершен. Однако необязательно выполнять эти три шага отдельно, чтобы получить данные. Airbyte поддерживает одношаговый процесс для достижения того же результата.
Получение данных с помощью PyAirbyte за один шаг
Это версия speedrun. Она включает объединение всех трех шагов в один.
import airbyte as ab
source = ab.get_source(
"source-github",
config={
# Replace with your desired repository
"repositories": ["FINCH285/engineering-education"],
"credentials": {
"personal_access_token": ab.get_secret(
"GITHUB_PERSONAL_ACCESS_TOKEN"
),
},
},
streams=['branches', 'collaborators']
).read()
Код выполняет все три операции за один шаг. Он создает источник, настраивает его и, наконец, считывает данные. Теперь вы можете использовать опцию interop, чтобы преобразовать полученные данные в различные структуры данных, как мы делали ранее. Но если вы хотите сгенерировать LLM-документы из табличных данных, следующий раздел покажет, как это сделать.
Генерация LLM-документов из табличных данных
Если вы хотите, чтобы ваши данные были совместимы с LangChain, вам нужно преобразовать их в LLM-документы. Затем вы можете использовать эти документы для различных задач обработки естественного языка, таких как ответы на вопросы, суммаризация или генерация текста.
import rich
from itertools import islice
dataset = source_github.get_documents(
"issues",
title_property="title",
content_properties=["body"],
)
# Grab a few documents (skipping first 2)
documents = list(islice(dataset, 2, 5))
# Print as markdown
for document in documents:
display(rich.markdown.Markdown(document.content))
Код получит GitHub issues и отобразит их как документы. Затем он установит заголовок документа равным заголовку issue, а содержимое документа будет установлено равным body issue. Затем он использует rich, чтобы вывести документы в формате markdown в консоль.
Имея два доступных варианта, давайте посмотрим, какой подход лучше всего подходит вам.
Выбор между Airbyte и PyAirbyte
Если вам нужен подход без кода к векторным хранилищам, выбирайте hosted version. Если вам нужен полный контроль с минимальным количеством кода, выбирайте PyAirbyte. AJ утверждает, что теоретически PyAirbyte может работать везде, где запускается Python с поддержкой виртуальной среды. Я подготовил таблицу, чтобы помочь вам решить, какой подход вам подходит.
| Критерии | Airbyte (UI/Hosted) | PyAirbyte |
| Подход | Без кода | Код/Python |
| Настройка | Простой процесс регистрации | Требуются навыки программирования на Python |
| Пользовательский интерфейс | Предоставляет удобный пользовательский интерфейс | Нет пользовательского интерфейса, основано на коде |
| Интеграция данных | Подходит как для традиционных, так и для современных задач интеграции данных (неструктурированные данные, векторные базы данных и т. д.) | Подходит как для традиционных, так и для современных задач интеграции данных (неструктурированные данные, векторные базы данных и т. д.) |
| Гибкость | Ограничена вариантами, представленными в UI | Очень гибкая, может быть интегрирована с другими инструментами и фреймворками Python |
| Среда | Hosted environment | Может запускаться в любой среде Python (например, Jupyter Notebook, локальная машина) |
| Развертывание | Развертывает конвейеры данных в hosted environment Airbyte | Развертывание на основе кода может быть интегрировано с CI/CD pipelines |
| Прототипирование | Подходит для нетехнических пользователей или быстрого прототипирования | Идеально для технических пользователей и быстрого прототипирования |
| Кривая обучения | Более низкая кривая обучения | Требуются навыки программирования на Python или базовые навыки программирования |
После сравнения вы можете продолжить и выбрать собственное приключение.
Будущие функции PyAirbyte
PyAirbyte всё ещё находится на стадии бета-версии. Поэтому на данный момент он не поддерживает полноценные destinations, то есть у него нет векторных хранилищ в качестве destinations, но мы можем передавать их в LangChain. Aj делится несколькими ожиданиями, которые у нас должны быть от команды PyAirbyte в этом году: Что дальше для PyAirbyte?
Планы на Q2 2024:
Улучшить поддержку Python 3.9 и 3.11
Добавить поддержку Windows
Улучшить API для настройки sources
Обеспечить совместимость с Airbyte Cloud, OSS и Enterprise versions
Планы на H2 2024:
Добавить поддержку Reverse ETL
Добавить поддержку Vector Store destinations
Добавить поддержку Publish-type destinations
Если вы хотите оставить отзыв и сообщить об ошибках, рассмотрите возможность создания issue на странице PyAirbyte в GitHub.
Заключение
Независимо от того, предпочитаете ли вы подход без кода или с минимальным количеством кода, Airbyte и PyAirbyte предлагают надежные решения для интеграции как структурированных, так и неструктурированных данных. AJ Steers наглядно показал потенциал этих инструментов в революционном преобразовании рабочих процессов с данными. Для получения дополнительной информации ознакомьтесь с ресурсами ниже и начните свой путь к использованию текста как данных — откуда угодно куда угодно.
Дополнительные ресурсы
https://zilliz.com/blog/use-milvus-and-airbyte-for-similarity-search-on-all-your-data
https://zilliz.com/blog/zilliz-introduces-upsert-kafka-connector-and-airbyte-integration
https://github.com/airbytehq/quickstarts/tree/main/pyairbyte_notebooks
Ссылка на запись выступления AJ Steer на YouTube: Смотреть выступление на YouTube.
Читать далее

Why Context Engineering Is Becoming the Full Stack of AI Agents
Discover how context engineering unifies prompts, RAG, and tools to build smarter, production-ready AI agents powered by Milvus.

Vector Databases vs. Document Databases
Use a vector database for similarity search and AI-powered applications; use a document database for flexible schema and JSON-like data storage.

Milvus WebUI: A Visual Management Tool for Your Vector Database
Explore Milvus WebUI to monitor, manage, and optimize your vector database with real-time insights, performance tracking, and system health monitoring.


