Мы создаём продвинутую мультиагентную систему LangGraph, которая использует модель Gemini от Google для сквозных исследовательских рабочих процессов. В этом руководстве мы начнём с установки необходимых библиотек: LangGraph, LangChain-Google-GenAI и LangChain-Core. Затем мы определим структурированное состояние, симулируем инструменты исследования и анализа и настроим трёх специализированных агентов: Research (Исследование), Analysis (Анализ) и Report (Отчёт).
Установка библиотек
!pip install -q langgraph langchain-google-genai langchain-core
“`
import os
from typing import TypedDict, Annotated, List, Dict, Any
from langgraph.graph import StateGraph, END
from langchaingooglegenai import ChatGoogleGenerativeAI
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage
import operator
import json
“`
Настройка ключа API
“`
os.environ[“GOOGLEAPIKEY”] = “Use Your Own API Key”
“`
Определение состояния агента
“`
class AgentState(TypedDict):
messages: Annotated[List[BaseMessage], operator.add]
current_agent: str
research_data: dict
analysis_complete: bool
final_report: str
“`
Инициализация модели
“`
llm = ChatGoogleGenerativeAI(model=”gemini-1.5-flash”, temperature=0.7)
“`
Определение функций
Симуляция веб-поиска
“`
def simulatewebsearch(query: str) -> str:
“””Симулированный веб-поиск — замените на реальный API в продакшене”””
return f”Результаты поиска по ‘{query}’: найдена релевантная информация о {query}, включая последние разработки, мнения экспертов и статистические данные.”
“`
Симуляция анализа данных
“`
def simulatedataanalysis(data: str) -> str:
“””Симулированный инструмент анализа данных”””
return f”Анализ завершён: ключевые инсайты из данных включают новые тенденции, статистические закономерности и практические рекомендации.”
“`
Агент исследования
“`
def research_agent(state: AgentState) -> AgentState:
“””Агент, который исследует заданную тему”””
messages = state[“messages”]
last_message = messages[-1].content
searchresults = simulatewebsearch(lastmessage)
prompt = f”””Вы — агент по исследованию. На основе запроса: “{last_message}”
Здесь результаты поиска: {search_results}
Проведите тщательное исследование и соберите соответствующую информацию. Предоставьте структурированные результаты с:
1. Ключевыми фактами и данными
2. Текущими тенденциями и разработками
3. Экспертными мнениями и инсаЙтами
4. Релевантной статистикой
Будьте всесторонними и аналитическими в вашем резюме исследования.”””
response = llm.invoke([HumanMessage(content=prompt)])
research_data = {
“topic”: last_message,
“findings”: response.content,
“searchresults”: searchresults,
“sources”: [“academicpapers”, “industryreports”, “expert_analyses”],
“confidence”: 0.88,
“timestamp”: “2024-research-session”
}
return {
“messages”: state[“messages”] + [AIMessage(content=f”Исследование завершено по ‘{last_message}’: {response.content}”)],
“current_agent”: “analysis”,
“researchdata”: researchdata,
“analysis_complete”: False,
“final_report”: “”
}
“`
Реализация агентов
Агент анализа
“`
def analysis_agent(state: AgentState) -> AgentState:
“””Агент, который анализирует данные исследования и извлекает инсайты”””
researchdata = state[“researchdata”]
analysisresults = simulatedataanalysis(researchdata.get(‘findings’, ”))
prompt = f”””Вы — агент по анализу. Проанализируйте эти данные исследования:
Тема: {research_data.get(‘topic’, ‘Unknown’)}
Результаты исследования: {research_data.get(‘findings’, ‘No findings’)}
Результаты анализа: {analysis_results}
Предоставьте глубокие инсайты, включая:
1. Идентификацию паттернов и анализ тенденций
2. Сравнительный анализ с отраслевыми стандартами
3. Оценку рисков и возможностей
4. Стратегические последствия
5. Практические рекомендации с уровнями приоритета
Будьте аналитичны и предоставляйте основанные на доказательствах инсайты.”””
response = llm.invoke([HumanMessage(content=prompt)])
return {
“messages”: state[“messages”] + [AIMessage(content=f”Анализ завершён: {response.content}”)],
“current_agent”: “report”,
“researchdata”: state[“researchdata”],
“analysis_complete”: True,
“final_report”: “”
}
“`
Агент отчёта
“`
def report_agent(state: AgentState) -> AgentState:
“””Агент, который генерирует окончательные комплексные отчёты”””
researchdata = state[“researchdata”]
analysis_message = None
for msg in reversed(state[“messages”]):
if isinstance(msg, AIMessage) and “Анализ завершён:” in msg.content:
analysis_message = msg.content.replace(“Анализ завершён: “, “”)
break
prompt = f”””Вы — агент по созданию профессиональных отчётов. Создайте комплексный исполнительный отчёт на основе:
Тема исследования: {research_data.get(‘topic’)}
Результаты исследования: {research_data.get(‘findings’)}
Результаты анализа: {analysis_message or ‘Анализ в ожидании’}
Сгенерируйте хорошо структурированный, профессиональный отчёт с этими разделами:
## КРАТКОЕ СОДЕРЖАНИЕ
## ОСНОВНЫЕ НАХОДКИ ИССЛЕДОВАНИЯ
[Подробно опишите наиболее важные открытия и данные]
## АНАЛИТИЧЕСКИЕ ИНСАЙТЫ
[Представьте глубокий анализ, паттерны и тенденции]
## СТРАТЕГИЧЕСКИЕ РЕКОМЕНДАЦИИ
[Предоставьте практические рекомендации с уровнями приоритета]
## ОЦЕНКА РИСКОВ И ВОЗМОЖНОСТЕЙ
[Определите потенциальные риски и возможности]
## ЗАКЛЮЧЕНИЕ И СЛЕДУЮЩИЕ ШАГИ
[Обобщите и предложите последующие действия]
Сделайте отчёт профессиональным, основанным на данных и практичным.”””
response = llm.invoke([HumanMessage(content=prompt)])
return {
“messages”: state[“messages”] + [AIMessage(content=f” СГЕНЕРИРОВАН ФИНАЛЬНЫЙ ОТЧЁТ:\n\n{response.content}”)],
“current_agent”: “complete”,
“researchdata”: state[“researchdata”],
“analysis_complete”: True,
“final_report”: response.content
}
“`
Заключение
Мы строим StateGraph, добавляем трёх агентов в качестве узлов с условными рёбрами, заданными shouldcontinue, устанавливаем точку входа в «research» и компилируем граф в исполняемый рабочий процесс. Затем мы определяем runresearch_assistant() для инициализации состояния, последовательного вызова каждого агента, исследования, анализа и отчёта, печати статусов и возврата окончательного отчёта.
Проверьте полные коды здесь.
1. Какие библиотеки необходимо установить для реализации мультиагентной системы LangGraph?
Ответ: Для реализации мультиагентной системы LangGraph необходимо установить библиотеки LangGraph, LangChain-Google-GenAI и LangChain-Core.
2. Какие специализированные агенты настраиваются в системе LangGraph и какие функции они выполняют?
Ответ: В системе LangGraph настраиваются три специализированных агента: Research (Исследование), Analysis (Анализ) и Report (Отчёт). Агент Research исследует заданную тему, агент Analysis анализирует данные исследования и извлекает инсайты, а агент Report генерирует окончательные комплексные отчёты.
3. Какие функции используются для симуляции веб-поиска и анализа данных в системе LangGraph?
Ответ: Для симуляции веб-поиска в системе LangGraph используется функция simulatewebsearch(), а для симуляции анализа данных — функция simulatedataanalysis(). Эти функции возвращают результаты поиска и анализа данных соответственно.
4. Какие параметры используются при инициализации модели ChatGoogleGenerativeAI в системе LangGraph?
Ответ: При инициализации модели ChatGoogleGenerativeAI в системе LangGraph используется параметр model, который задаёт модель Gemini от Google, и параметр temperature, который задаёт температуру модели. В примере используется модель “gemini-1.5-flash” и температура 0.7.
5. Какие шаги необходимо выполнить для инициализации состояния и последовательного вызова каждого агента в системе LangGraph?
Ответ: Для инициализации состояния и последовательного вызова каждого агента в системе LangGraph необходимо определить функцию runresearchassistant(), которая инициализирует состояние, последовательно вызывает агентов Research, Analysis и Report, печатает статусы и возвращает окончательный отчёт.