В этом уроке мы демонстрируем, как построить многоэтапный, интеллектуальный агент обработки запросов с использованием Flash Langgraph и Gemini 1.5. Основная идея состоит в том, чтобы структурировать рассуждения ИИ как рабочий процесс состояния, где входящий запрос передается через серию целенаправленных узлов: маршрутизация, анализ, исследования, генерация ответов и валидация. Каждый узел работает как функциональный блок с четко определенной ролью, что делает агент не просто реактивным, но и аналитическим осведомленным. Используя Stategraph Langgraph, мы организуем эти узлы для создания системы зацикля, которая может повторно анализировать и улучшить его выход, пока ответ не будет подтвержден в качестве полного или достигнута максимального порога итерации.
!pip install langgraph langchain-google-genai python-dotenv
Во-первых, команда! PIP установить Langgraph Langchain-Google-Genai Python-Dotenv Установка три пакета Python, необходимые для создания рабочих процессов интеллектуального агента. Langgraph обеспечивает графическую оркестровку агентов AI, Langchain-Google-Genai обеспечивает интеграцию с моделями Gemini Google, а Python-Dotenv позволяет безопасную загрузку переменных среды из файлов .env.
import os
from typing import Dict, Any, List
from dataclasses import dataclass
from langgraph.graph import Graph, StateGraph, END
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.schema import HumanMessage, SystemMessage
import json
os.environ("GOOGLE_API_KEY") = "Use Your API Key Here"
Мы импортируем основные модули и библиотеки для рабочих процессов здания агента, включая Chatgooglegenerativeai для взаимодействия с моделями Gemini и Stategraph для управления разговорным состоянием. Line OS.ENVIRON («Google_API_KEY») = «Используйте свой клавиш API здесь» назначает ключ API с переменной среды, позволяя модели Близнецов аутентифицировать и генерировать ответы.
@dataclass
class AgentState:
"""State shared across all nodes in the graph"""
query: str = ""
context: str = ""
analysis: str = ""
response: str = ""
next_action: str = ""
iteration: int = 0
max_iterations: int = 3
Проверьте ноутбук здесь
Этот Agentstate DataClass определяет общее состояние, которое сохраняется в разных узлах в рабочем процессе Langgraph. Он отслеживает ключевые поля, в том числе запрос пользователя, полученный контекст, любой проведенный анализ, сгенерированный ответ и рекомендуемое следующее действие. Он также включает в себя счетчик итерации и ограничение MAX_ITERTATIONS, чтобы контролировать, сколько раз рабочие процессы могут зацикливаться, что позволяет агенту итеративное рассуждение или принятие решений.
@dataclass
class AgentState:
"""State shared across all nodes in the graph"""
query: str = ""
context: str = ""
analysis: str = ""
response: str = ""
next_action: str = ""
iteration: int = 0
max_iterations: int = 3
This AgentState dataclass defines the shared state that persists across different nodes in a LangGraph workflow. It tracks key fields, including the user's query, retrieved context, any analysis performed, the generated response, and the recommended next action. It also includes an iteration counter and a max_iterations limit to control how many times the workflow can loop, enabling iterative reasoning or decision-making by the agent.
class GraphAIAgent:
def __init__(self, api_key: str = None):
if api_key:
os.environ("GOOGLE_API_KEY") = api_key
self.llm = ChatGoogleGenerativeAI(
model="gemini-1.5-flash",
temperature=0.7,
convert_system_message_to_human=True
)
self.analyzer = ChatGoogleGenerativeAI(
model="gemini-1.5-flash",
temperature=0.3,
convert_system_message_to_human=True
)
self.graph = self._build_graph()
def _build_graph(self) -> StateGraph:
"""Build the LangGraph workflow"""
workflow = StateGraph(AgentState)
workflow.add_node("router", self._router_node)
workflow.add_node("analyzer", self._analyzer_node)
workflow.add_node("researcher", self._researcher_node)
workflow.add_node("responder", self._responder_node)
workflow.add_node("validator", self._validator_node)
workflow.set_entry_point("router")
workflow.add_edge("router", "analyzer")
workflow.add_conditional_edges(
"analyzer",
self._decide_next_step,
{
"research": "researcher",
"respond": "responder"
}
)
workflow.add_edge("researcher", "responder")
workflow.add_edge("responder", "validator")
workflow.add_conditional_edges(
"validator",
self._should_continue,
{
"continue": "analyzer",
"end": END
}
)
return workflow.compile()
def _router_node(self, state: AgentState) -> Dict(str, Any):
"""Route and categorize the incoming query"""
system_msg = """You are a query router. Analyze the user's query and provide context.
Determine if this is a factual question, creative request, problem-solving task, or analysis."""
messages = (
SystemMessage(content=system_msg),
HumanMessage(content=f"Query: {state.query}")
)
response = self.llm.invoke(messages)
return {
"context": response.content,
"iteration": state.iteration + 1
}
def _analyzer_node(self, state: AgentState) -> Dict(str, Any):
"""Analyze the query and determine the approach"""
system_msg = """Analyze the query and context. Determine if additional research is needed
or if you can provide a direct response. Be thorough in your analysis."""
messages = (
SystemMessage(content=system_msg),
HumanMessage(content=f"""
Query: {state.query}
Context: {state.context}
Previous Analysis: {state.analysis}
""")
)
response = self.analyzer.invoke(messages)
analysis = response.content
if "research" in analysis.lower() or "more information" in analysis.lower():
next_action = "research"
else:
next_action = "respond"
return {
"analysis": analysis,
"next_action": next_action
}
def _researcher_node(self, state: AgentState) -> Dict(str, Any):
"""Conduct additional research or information gathering"""
system_msg = """You are a research assistant. Based on the analysis, gather relevant
information and insights to help answer the query comprehensively."""
messages = (
SystemMessage(content=system_msg),
HumanMessage(content=f"""
Query: {state.query}
Analysis: {state.analysis}
Research focus: Provide detailed information relevant to the query.
""")
)
response = self.llm.invoke(messages)
updated_context = f"{state.context}\n\nResearch: {response.content}"
return {"context": updated_context}
def _responder_node(self, state: AgentState) -> Dict(str, Any):
"""Generate the final response"""
system_msg = """You are a helpful AI assistant. Provide a comprehensive, accurate,
and well-structured response based on the analysis and context provided."""
messages = (
SystemMessage(content=system_msg),
HumanMessage(content=f"""
Query: {state.query}
Context: {state.context}
Analysis: {state.analysis}
Provide a complete and helpful response.
""")
)
response = self.llm.invoke(messages)
return {"response": response.content}
def _validator_node(self, state: AgentState) -> Dict(str, Any):
"""Validate the response quality and completeness"""
system_msg = """Evaluate if the response adequately answers the query.
Return 'COMPLETE' if satisfactory, or 'NEEDS_IMPROVEMENT' if more work is needed."""
messages = (
SystemMessage(content=system_msg),
HumanMessage(content=f"""
Original Query: {state.query}
Response: {state.response}
Is this response complete and satisfactory?
""")
)
response = self.analyzer.invoke(messages)
validation = response.content
return {"context": f"{state.context}\n\nValidation: {validation}"}
def _decide_next_step(self, state: AgentState) -> str:
"""Decide whether to research or respond directly"""
return state.next_action
def _should_continue(self, state: AgentState) -> str:
"""Decide whether to continue iterating or end"""
if state.iteration >= state.max_iterations:
return "end"
if "COMPLETE" in state.context:
return "end"
if "NEEDS_IMPROVEMENT" in state.context:
return "continue"
return "end"
def run(self, query: str) -> str:
"""Run the agent with a query"""
initial_state = AgentState(query=query)
result = self.graph.invoke(initial_state)
return result("response")
Проверьте ноутбук здесь
Класс Graphaiagent определяет рабочий процесс AI на основе Langgraph, использующий модели Gemini для итеративного анализа, исследования, ответов и проверки ответов на запросы пользователей. Он использует модульные узлы, такие как маршрутизатор, анализатор, исследователь, респондент и валидатор, чтобы рассуждать через сложные задачи, уточнение ответов посредством контролируемых итераций.
def main():
agent = GraphAIAgent("Use Your API Key Here")
test_queries = (
"Explain quantum computing and its applications",
"What are the best practices for machine learning model deployment?",
"Create a story about a robot learning to paint"
)
print("🤖 Graph AI Agent with LangGraph and Gemini")
print("=" * 50)
for i, query in enumerate(test_queries, 1):
print(f"\n📝 Query {i}: {query}")
print("-" * 30)
try:
response = agent.run(query)
print(f"🎯 Response: {response}")
except Exception as e:
print(f"❌ Error: {str(e)}")
print("\n" + "="*50)
if __name__ == "__main__":
main()
Наконец, функция Main () инициализирует GraphAiagent с помощью ключа API Gemini и запускает ее на наборе тестовых запросов, охватывающих технические, стратегические и творческие задачи. Он печатает каждый запрос и сгенерированный AI-ответ, демонстрируя, как агент, управляемый LangGraph, обрабатывает различные типы ввода, используя рассуждения Gemini и генерацию.
В заключение, комбинируя структурированную машину Langgraph с силой разговорного интеллекта Близнецов, этот агент представляет новую парадигму в области разработки рабочих процессов ИИ, которая отражает человеческие циклы рассуждений, анализа и валидации. Учебное пособие предоставляет модульный и расширяемый шаблон для разработки передовых агентов ИИ, которые могут автономно выполнять различные задачи, начиная от ответа на сложные запросы до генерации творческого контента.
Проверьте ноутбук здесьПолем Весь кредит на это исследование направлено на исследователей этого проекта.
🆕 Вы знали? MarkTechPost-самая быстрорастущая медиа-платформа AI, на которой представлены более 1 миллиона читателей в месяц. Забронируйте стратегию, чтобы обсудить цели вашей кампании. Кроме того, не стесняйтесь следить за нами Twitter И не забудьте присоединиться к нашему 95K+ ML Subreddit и подписаться на Наша информационный бюллетеньПолем
ASIF Razzaq является генеральным директором Marktechpost Media Inc. как дальновидного предпринимателя и инженера, ASIF стремится использовать потенциал искусственного интеллекта для социального блага. Его последнее усилие-запуск медиа-платформы искусственного интеллекта, Marktechpost, которая выделяется благодаря глубокому освещению машинного обучения и новостей о глубоком обучении, которое является технически обоснованным и легко понятным для широкой аудитории. Платформа может похвастаться более чем 2 миллионами ежемесячных просмотров, иллюстрируя свою популярность среди зрителей.