Введение в библиотеку LangGraph
LangGraph - это платформа для создания приложений, использующих рабочие процессы на основе графов. Каждый узел (node) представляет функцию или вычислительный этап, а рёбра (edges) определяют процесс (flow) между этими узлами на основе определенных условий.
- Управление состоянием (State Management)
- Гибкая маршрутизация (Flexible Routing)
- Сохранение (или Персистентность) (Persistence)
- Визуализация (Visualization)
Немного пояснения об этих понятиях.
1. Управление состоянием (State Management)
Это метод или подход для отслеживания и управления состоянием приложения. "Состояние" — это данные, которые определяют текущее положение приложения в любой момент времени.
2. Гибкая маршрутизация (Flexible Routing)
Маршрутизация — это процесс определения пути, по которому пользователь или данные перемещаются в рамках приложения. Гибкая маршрутизация означает, что библиотека или система позволяют легко настраивать и изменять маршруты в зависимости от условий.
Персистентность означает сохранение данных таким образом, чтобы они сохранялись даже после перезагрузки приложения или закрытия браузера. Это важный аспект для тех случаев, когда данные нужно хранить не только в оперативной памяти, но и в более долговременных хранилищах, таких как базы данных или файлы.
4. Визуализация (Visualization)
Визуализация — это представление данных или процессов в графическом формате для упрощения восприятия и анализа. Визуализация часто используется для упрощения сложной информации и облегчения взаимодействия с данными.
Построение простого Pipeline для анализа текста
В этом примере мы продемонстрируем мощь LangGraph, построив многоступенчатый конвейер (Pipeline) анализа текста. В нашем примере использования мы рассмотрим обработку заданного текста на трех ключевых этапах:
- Классификация текста (Text Classification): Мы распределим вводимый текст по предопределенным категориям (например, Новости, блоги, исследования или другие).
- Извлечение объектов/сущностей (Entity Extraction): Мы определим и выделим из текста ключевые объекты, такие как лица, организации и местоположения.
- Краткое изложение текста (Text Summarization): Наконец, мы сгенерируем краткое изложение введенного текста.
Этот конвейер (Pipeline) демонстрирует, как LangGraph можно использовать для создания модульного, расширяемого рабочего процесса для задач обработки естественного языка. К концу этого руководства вы поймете, как создать приложение на основе графов, которое можно легко модифицировать или расширить для различных задач анализа текста.
Установка библиотек
pip install langgraph langchain langchain_openai
Построение конвейера обработки текста (Text Processing Pipeline)
Определение класса состояния (State) и инициализация LLM
Здесь мы импортируем основные библиотеки, и определяем класс State для хранения данных нашего рабочего процесса, и инициализируем модель ChatOpenAI.
from IPython.display import display, Image from langgraph.graph import StateGraph, END from langchain.prompts import PromptTemplate from langchain.schema import HumanMessage from langchain_core.runnables.graph import MermaidDrawMethod from langchain_openai import ChatOpenAI from typing import TypedDict, List class State(TypedDict): text: str classification: str entities: List[str] summary: str llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
Определение функций узлов (Node Functions)
Эти функции определяют операции, выполняемые в каждом узле нашего графика: классификацию (classification), извлечение объектов (entity extraction) и обобщение (summarization).
def classification_node(state: State): ''' Классифицируй текст по одной из категорий: Новости, Блог, исследования или другие ''' prompt = PromptTemplate( input_variables=["text"], template="Соотнеси следующий текст к одной из категорий: Новости, Блог, Исследование или Другое.\n\Текст:{text}\n\Категория:" ) message = HumanMessage(content=prompt.format(text=state["text"])) classification = llm.predict_messages([message]).content.strip() return {"classification": classification} def entity_extraction_node(state: State): ''' Извлеки все объекты (Человек, Организация, Местоположение) из текста ''' prompt = PromptTemplate( input_variables=["text"], template="Извлеки все объекты (Человек, Организация, Местоположение) из следующего текста. Укажи результат в виде списка, разделенного запятыми.\n\Текст:{text}\n\Объекты:" ) message = HumanMessage(content=prompt.format(text=state["text"])) entities = llm.predict_messages([message]).content.strip().split(", ") return {"entities": entities} def summarization_node(state: State): ''' Резюме текста в одном коротком предложении ''' prompt = PromptTemplate( input_variables=["text"], template="Резюмируй следующий текст в одном коротком предложении.\n\Текст:{text}\n\Резюме:" ) message = HumanMessage(content=prompt.format(text=state["text"])) summary = llm.predict_messages([message]).content.strip() return {"summary": summary}
Создаём инструменты (Tools) и рабочий процесс (Workflow)
Далее создаём рабочий процесс StateGraph.
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()
Визуализация рабочего процесса (Workflow)
display( Image( app.get_graph().draw_mermaid_png( draw_method=MermaidDrawMethod.API, ) ) )
Тестирование Pipeline
sample_text = """ OpenAI анонсировала модель GPT-4, которая представляет собой крупную мультимодальную модель, демонстрирующую производительность на уровне человека в различных профессиональных тестах. Она разработана для улучшения согласованности и безопасности систем искусственного интеллекта. Кроме того, модель разработана таким образом, чтобы быть более эффективной и масштабируемой, чем ее предшественница GPT-3. Ожидается, что в ближайшие месяцы будет выпущена модель GPT-4, которая будет доступна широкой публике для целей исследований и разработок. """ state_input = {"text": sample_text} result = app.invoke(state_input) print("\nClassification:", result["classification"]) print("\nEntities:", result["entities"]) print("\nSummary:", result["summary"])
Classification: Новости Entities: ['OpenAI', 'GPT-4', 'GPT-3', 'человек'] Summary: OpenAI анонсировала модель GPT-4, мультимодальную и более эффективную, чем GPT-3, с производительностью на уровне человека и улучшенной безопасностью, ожидая её выпуск для широкой публики.
Заключение
- Изучили концепции LangGraph
- Построили конвейер обработки текста
- Продемонстрировали использование LangGraph в рабочих процессах обработки данных
- Визуализировали рабочий процесс
Этот пример демонстрирует, как LangGraph можно использовать для задач, выходящих за рамки диалоговых агентов, предоставляя гибкую платформу для создания сложных рабочих процессов на основе графов.
https://colab.research.google.com/drive/1XYUeWcYHSlQ-4CPYKIyoLklrDHilEdvi?usp=sharing