En este codigo se puede ver como se gestiona los mensajes compartidos, interactuan con el chat, y les devuelve la cantidad de mensajes, y el ultimo.
# -*- coding: utf-8 -*-
from langchain.chat_models import init_chat_model
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage, AnyMessage
from langgraph.graph import StateGraph, START, END, MessagesState
# ===== Inicializamos modelos =====
claude = init_chat_model("anthropic:claude-3-haiku-20240307", temperature=0)
openai = init_chat_model("openai:gpt-3.5-turbo", temperature=0)
# ===== Estado =====
class State(MessagesState):
model_name: str # 'claude' o 'openai'
#aca podemos poner un monton de cosas, como nombre de cliente, edad, etc y va a ir persistiendo a lo largo de la conversacion y puede cambiar tb
# ===== Nodos =====
def node_prompt(state: State) -> dict:
"""Crea un mensaje humano inicial si no hay mensajes previos."""
if not state.get("messages"):
human_msg = HumanMessage(content="¿Cuál es la capital de Alemania?")
return {"messages": [human_msg]}
return {}
def node_llm_invoke(state: State) -> dict:
"""
Invoca un modelo LLM y añade su respuesta al historial.
'messages' contiene todo el contexto acumulado (System + Human + AI previos).
"""
model_name = state.get("model_name", "openai")
llm = claude if model_name == "claude" else openai
# Aquí se aprecia cómo LangGraph pasa el historial entero al modelo:
response = llm.invoke(state["messages"])
# Retornamos el nuevo AIMessage para concatenarlo al historial
return {"messages": [response]}
def node_probe(state: State) -> dict:
"""Muestra cuántos mensajes hay y el contenido del último."""
msgs = state["messages"]
last = msgs[-1]
resumen = f"[PROBE] Total mensajes: {len(msgs)} | Último: ({last.type}) → {last.content[:80]}"
return {"messages": [AIMessage(content=resumen)]}
# ===== Grafo =====
builder = StateGraph(State)
builder.add_node("prompt", node_prompt)
builder.add_node("llm_invoke", node_llm_invoke)
builder.add_node("probe", node_probe)
builder.add_edge(START, "prompt")
builder.add_edge("prompt", "llm_invoke")
builder.add_edge("llm_invoke", "probe")
builder.add_edge("probe", END)
agent = builder.compile()
# ===== Ejecución =====
initial_state = {
"messages": [
SystemMessage(content="Eres un asistente conciso."),
HumanMessage(content="¿Cuál es la capital de Alemania?")
],
"model_name": "claude"
}
final_state = agent.invoke(initial_state)
# ===== Visualización =====
print("\n=== HISTORIAL COMPLETO ===")
for i, m in enumerate(final_state["messages"], 1):
print(f"{i:02d}. {m.type.upper()}: {m.content}")