Мы создаём продвинутую мультиагентную систему 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, печатает статусы и возвращает окончательный отчёт.