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.
















