Itinai.com a website with a catalog of works by branding spec dd70b183 f9d7 4272 8f0f 5f2aecb9f42e 2

Учебное пособие по LangGraph: Пошаговое руководство по созданию текстового анализатора

Itinai.com a website with a catalog of works by branding spec dd70b183 f9d7 4272 8f0f 5f2aecb9f42e 2

LangGraph Tutorial: Пошаговое руководство по созданию пайплайна анализа текста

Время чтения: 5 минут

Введение в LangGraph

LangGraph — это мощная платформа от LangChain, созданная для разработки многофункциональных приложений с использованием больших языковых моделей (LLMs). Она предоставляет структуру и инструменты для построения сложных ИИ-агентов, используя графовый подход. Это позволяет нам настраивать взаимодействие различных функций и управлять потоком информации в нашем агенте.

Ключевые особенности

  • Управление состоянием: Поддерживайте постоянное состояние между взаимодействиями.
  • Гибкая маршрутизация: Определяйте сложные потоки между компонентами.
  • Сохранение: Сохраняйте и возобновляйте рабочие процессы.
  • Визуализация: Видите и понимаете структуру вашего агента.

Настройка нашей среды

Перед тем как погрузиться в код, давайте настроим нашу рабочую среду.

Установка

Установите необходимые пакеты:

pip install langgraph langchain langchain-openai python-dotenv

Настройка API-ключей

Для работы с моделями OpenAI вам понадобится API-ключ, который можно получить на сайте OpenAI.

Понимание силы координированной обработки

LangGraph позволяет создавать многоступенчатый пайплайн анализа текста. Он включает в себя:

  • Классификация текста: Категоризация входного текста на предопределенные категории.
  • Извлечение сущностей: Выявление ключевых сущностей из текста.
  • Резюмирование текста: Генерация краткого резюме входного текста.

Создание нашего пайплайна анализа текста

Давайте импортируем необходимые пакеты и создадим память нашего агента, используя TypedDict для отслеживания информации:

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 для ведения непрерывных бесед.

Все кредиты за это исследование принадлежат исследователям этого проекта. Не стесняйтесь следить за нами в Twitter и присоединяться к нашему сообществу на различных платформах по ML.

Новости в сфере искусственного интеллекта