Markdown - это легкий язык разметки, который позволяет форматировать текст с помощью обычного текстового редактора.
В этой статье рассказывается о том, как LangChain загружает документы в формате Markdown для последующего использования.
from langchain_community.document_loaders import UnstructuredMarkdownLoader
markdown_path = "../../../../../README.md"
loader = UnstructuredMarkdownLoader(markdown_path)
data = loader.load()
data
[Document(page_content="🦜🔗 LangChain\n\n⚡ Построение приложений с помощью LLMs через композицию ⚡\n\nИщете версию на JS / TS? Посмотрите LangChain.js.\n\nПоддержка в производстве: когда вы переводите свои LangChains в производство, мы с радостью предложим более полную поддержку.\nЗаполните эту форму, и мы настроим отдельный канал поддержки в Slack.\n\nБыстрая установка\n\npip install langchain\nили\nconda install langchain -c conda-forge\n\n🤔 Что это такое?\n\nБольшие языковые модели (LLMs) становятся трансформационной технологией, позволяющей разработчикам создавать приложения, которые прежде не могли. Однако использование этих LLMs в изоляции часто недостаточно для создания действительно мощного приложения - настоящая мощь приходит, когда их можно объединить с другими источниками вычислений или знаний.\n\nЭта библиотека призвана помочь в разработке таких типов приложений. Общие примеры таких приложений включают в себя:\n\n📚 Вопросно-ответные системы по конкретным документам\n\nДокументация\n\nПолный пример: Вопросно-ответная система по базе знаний Notion\n\n📬 Чат-боты\n\nДокументация\n\nПолный пример: Чат-бот LangChain\n\n🤖 Агенты\n\nДокументация\n\nПолный пример: GPT+WolframAlpha\n\n📝 Документация\n\nПожалуйста, см. здесь полную документацию по:\n\nНачало работы (установка, настройка среды, простые примеры)\n\nПримеры использования (демонстрации, интеграции, вспомогательные функции)\n\nСправка (полная документация API)\n\nРесурсы (высокоуровневое объяснение основных концепций)\n\n🚀 В чем это может помочь?\n\nЕсть шесть основных областей, в которых LangChain призван помочь.\nЭто, по мере увеличения сложности, включает в себя:\n\n📃 LLMs и Промпты:\n\nСюда входит управление промтами, оптимизация промтов, общий интерфейс для всех LLMs и общие утилиты для работы с LLMs.\n\n🔗 Цепи:\n\nЦепи выходят за рамки одного вызова LLM и включают последовательности вызовов (будь то к LLM или другой утилите). LangChain предоставляет стандартный интерфейс для цепочек, множество интеграций с другими инструментами и полные цепочки для общих приложений.\n\n🚚 Генерация с использованием данных:\n\nГенерация с использованием данных включает в себя конкретные типы цепочек, которые вначале взаимодействуют с внешним источником данных для получения данных для использования на этапе генерации. Примеры включают в себя суммирование больших текстовых фрагментов и вопросно-ответные системы по конкретным источникам данных.\n\n🤖 Агенты:\n\nАгенты включают в себя LLM, принимающие решения о том, какие действия предпринимать, совершающие это действие, видящие наблюдение и повторяющие это до завершения. LangChain предоставляет стандартный интерфейс для агентов, выбор агентов для выбора и примеры полных агентов.\n\n🧠 Память:\n\nПамять относится к сохранению состояния между вызовами цепочки/агента. LangChain предоставляет стандартный интерфейс для памяти, коллекцию реализаций памяти и примеры цепочек/агентов, использующих память.\n\n📐 Оценка:\n\n[BETA] Генеративные модели известны своей сложностью оценки с использованием традиционных метрик. Один из новых способов оценки - использование самих языковых моделей для этой цели. LangChain предоставляет некоторые промтов/цепочек для помощи в этом.\n\nДля получения более подробной информации по этим концепциям, пожалуйста, см. нашу полную документацию.\n\n📁 Содействие\n\nКак проект с открытым исходным кодом в быстро развивающейся области, мы очень открыты для вклада, будь то в виде новой функции, улучшенной инфраструктуры или лучшей документации.\n\nДля подробной информации о том, как внести вклад, см. здесь.", metadata={'source': '../../../../../README.md'})]
За кулисами Unstructured создает разные "элементы" для различных текстовых блоков. По умолчанию мы объединяем их вместе, но вы легко можете сохранить это разделение, указав mode="elements"
.
loader = UnstructuredMarkdownLoader(markdown_path, mode="elements")
data = loader.load()
data[0]
Document(page_content='ð\x9f¦\x9cï¸\x8fð\x9f”\x97 LangChain', metadata={'source': '../../../../../README.md', 'page_number': 1, 'category': 'Title'})