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.