LangGraph Tutorial: Пошаговое руководство по созданию конвейера текстового анализа
В современной бизнес-среде, где информация на вес золота, умение эффективно анализировать текстовые данные становится необходимостью. LangGraph в этом контексте представляет собой мощный инструмент, помогающий перейти на новый уровень автоматизации анализа текста. В данном руководстве мы покажем вам, как с помощью LangGraph создать конвейер текстового анализа, который поможет вашему бизнесу работать быстрее и умнее.
Введение в LangGraph
LangGraph — это фреймворк от LangChain, разработанный для создания многозначных приложений на базе языковых моделей. Он предлагает структуру и инструменты для построения сложных ИИ-агентов с помощью графового подхода. Это означает, что вы можете не только реализовать множество функций, но и спроектировать, как информация будет перемещаться между ними.
Ключевые функции
- Управление состоянием: Поддержка постоянного состояния между взаимодействиями.
- Гибкая маршрутизация: Определение сложных потоков между компонентами.
- Сохранение данных: Возможность сохранять и возобновлять рабочие процессы.
- Визуализация: Возможность видеть и понимать структуру вашего агента.
Настройка окружения
Перед тем, как приступить к коду, необходимо настроить ваше окружение разработки. Убедитесь, что у вас установлен Python и следуйте приведенным ниже инструкциям.
Установка
pip install langgraph langchain langchain-openai python-dotenv
Настройка API-ключей
Для работы с моделями OpenAI вам потребуется API-ключ. Получите его на сайте OpenAI и добавьте в ваше окружение.
Понимание силы координированной обработки
LangGraph позволяет создать многопоточный конвейер текстового анализа, который будет включать следующие этапы:
- Классификация текста: Категоризация входящего текста в предопределенные категории.
- Извлечение сущностей: Выделение ключевых сущностей из текста.
- Суммирование текста: Генерация краткого резюме входного текста.
Создание конвейера текстового анализа
Сначала импортируем необходимые пакеты и создадим структуру для хранения информации о состоянии:
class State(TypedDict):
text: str
classification: str
entities: List[str]
summary: str
После этого инициализируем языковую модель:
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
Создание основных возможностей агента
Определим функции для каждого типа анализа, начиная с классификации текста:
def classification_node(state: State):
prompt = PromptTemplate(
input_variables=["text"],
template="Классифицируйте следующий текст в одну из категорий: Новости, Блог, Исследование или Другое.\n\nТекст:{text}\n\nКатегория:"
)
message = HumanMessage(content=prompt.format(text=state["text"]))
classification = llm.invoke([message]).content.strip()
return {"classification": classification}
Аналогично создадим функции для извлечения сущностей и суммирования текста.
Итоговая схема
Теперь свяжем все возможности в единую систему с помощью LangGraph:
workflow = StateGraph(State)
workflow.add_node("classification_node", classification_node)
workflow.add_node("entity_extraction", entity_extraction_node)
workflow.add_node("summarization", summarization_node)
workflow.set_entry_point("classification_node")
workflow.add_edge("classification_node", "entity_extraction")
workflow.add_edge("entity_extraction", "summarization")
workflow.add_edge("summarization", END)
app = workflow.compile()
Используйте свой собственный текст
Попробуйте протестировать конвейер с помощью собственных текстовых примеров:
sample_text = """ OpenAI анонсировала модель GPT-4... """
state_input = {"text": sample_text}
result = app.invoke(state_input)
Добавление дополнительных возможностей (Р高级)
Мы можем улучшить наш конвейер, добавив узел анализа настроений. Для этого обновим структуру состояния:
class EnhancedState(TypedDict):
text: str
classification: str
entities: List[str]
summary: str
sentiment: str
Добавление условных ребер (Сложная логика)
Условные ребра позволяют нашему графу действовать умно, основываясь на данных текущего состояния. Создадим функцию маршрутизации для управления этой логикой:
def route_after_classification(state: EnhancedState) -> str:
category = state["classification"].lower()
return category in ["news", "research"]
Определяем условный рабочий процесс и компилируем его:
conditional_workflow = StateGraph(EnhancedState)
conditional_workflow.add_node("classification_node", classification_node)
conditional_workflow.add_node("entity_extraction", entity_extraction_node)
conditional_workflow.add_node("summarization", summarization_node)
conditional_workflow.add_node("sentiment_analysis", sentiment_node)
conditional_workflow.set_entry_point("classification_node")
conditional_workflow.add_conditional_edges("classification_node", route_after_classification, path_map={True: "entity_extraction", False: "summarization"})
conditional_app = conditional_workflow.compile()
Заключение
В этом руководстве мы построили конвейер обработки текста с использованием LangGraph, исследуя его возможности для классификации, извлечения сущностей и суммирования. Также мы улучшили наш конвейер дополнительными функциями и условными ребрами для динамической обработки.
Следующие шаги
- Добавьте дополнительные узлы, чтобы расширить возможности вашего агента.
- Экспериментируйте с различными LLM и параметрами.
- Изучите функции сохранения состояния LangGraph для продолжения разговоров.
FAQ
Что такое LangGraph?
LangGraph — это фреймворк для создания приложений на базе языковых моделей с графовой структурой.
Каковы основные функции LangGraph?
Главные функции включают управление состоянием, гибкую маршрутизацию, сохранение данных и визуализацию структуры агента.
Как настроить окружение для работы с LangGraph?
Вам нужно установить необходимые пакеты и настроить API-ключи OpenAI.
Какие типы анализа можно проводить с помощью LangGraph?
LangGraph позволяет классифицировать текст, извлекать сущности и создавать резюме текстов.
Как улучшить функциональность конвейера?
Можно добавить новые узлы, такие как анализ настроений или другие типы анализа, для расширения возможностей.
Как осуществляется маршрутизация и управление логикой в LangGraph?
Используются условные ребра и функции маршрутизации для управления потоками данных на каждом этапе.