Función create_agent() de LangChain

create_agent() es la función más central de LangChain; crea un grafo de agente completo (StateGraph) que incluye toda la lógica de invocación del modelo, ejecución de herramientas, control de bucles, etc.

Sintaxis

La sintaxis de la función create_agent() es la siguiente:

from langchain.agents import create_agent

agent = create_agent(
    model,                     # str | BaseChatModel:语言模型
    tools=None,                # Sequence:工具列表
    *,
    system_prompt=None,        # str | SystemMessage:系统提示
    middleware=(),             # Sequence[AgentMiddleware]:中间件列表
    response_format=None,      # ResponseFormat | type:结构化输出配置
    state_schema=None,         # type[AgentState]:自定义状态结构
    context_schema=None,       # type:运行时上下文结构
    checkpointer=None,         # Checkpointer:对话持久化
    store=None,                # BaseStore:跨会话存储
    interrupt_before=None,     # list[str]:在哪些节点前暂停
    interrupt_after=None,      # list[str]:在哪些节点后暂停
    debug=False,               # bool:是否输出详细日志
    name=None,                 # str:Agent 名称
    cache=None,                # BaseCache:缓存配置
)

Parámetro model: configuración del modelo

El parámetro model puede aceptar dos formas: una cadena (procesada por init_chat_model()) o una instancia BaseChatModel ya construida.

Ejemplo

from langchain.agents import create_agent
from langchain.chat_models import init_chat_model

# Forma 1: pasar una cadena (la más común)
# create_agent llamará internamente a init_chat_model() para procesarla
agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    system_prompt="Eres el asistente de EJEMPLO (Tutorial para novatos)",
)

# Forma 2: pasar una instancia de modelo ya construida
# Adecuado para escenarios que requieren un control fino de los parámetros del modelo
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0.3, max_tokens=500)
agent = create_agent(
    model=model,
    system_prompt="Eres el asistente de EJEMPLO (Tutorial para novatos)",
)

# Forma 3: pasar una instancia de modelo con herramientas ya vinculadas
# menos común; normalmente se deja que create_agent gestione la vinculación de herramientas
model_with_tools = init_chat_model("deepseek:deepseek-v4-flash").bind_tools([...])

Se recomienda usar la forma 1 (pasar una cadena). create_agent() maneja automáticamente la inicialización del modelo, la vinculación de herramientas y la salida estructurada. La forma 2 es adecuada si necesitas usar la misma instancia de modelo también fuera del agente.

Parámetro tools: lista de herramientas

El parámetro tools acepta herramientas en tres formatos:

Ejemplo

from langchain.tools import tool
from langchain.agents import create_agent

# Formato 1: función decorada con @tool (la más común)
@tool
def search_course(keyword: str) -> str:
    """Buscar cursos del tutorial de EJEMPLO"""
    return f"Resultados de búsqueda: cursos relacionados con {keyword}"


# Formato 2: clase Pydantic BaseModel
from pydantic import BaseModel, Field

class WeatherQuery(BaseModel):
    """Consultar el tiempo"""
    city: str = Field(description="Nombre de la ciudad")


# Formato 3: diccionario (describe herramientas remotas o integradas)
mcp_tool = {
    "type": "mcp",
    "server_label": "weather_server",
    "server_url": "https://weather.example.com/sse",
    "allowed_tools": ["get_forecast"],
}

# Uso mixto
agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    tools=[search_course, WeatherQuery, mcp_tool],
)

Pasar None o una lista vacía indica que el agente no tiene herramientas disponibles; en ese caso, es un modelo de conversación puro:

Ejemplo

from langchain.agents import create_agent
from langchain.messages import HumanMessage

# Agente sin herramientas: equivalente a invocar el modelo directamente
agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    tools=None,
    system_prompt="Eres el asistente de EJEMPLO (Tutorial para novatos)",
)

result = agent.invoke({
    "messages": [HumanMessage(content="¿Es Python adecuado para aprender desde cero?")]
})
print(result["messages"][-1].content)

Parámetro system_prompt: indicación del sistema

Define el rol de comportamiento y las reglas de restricción del agente. Admite cadenas y objetos SystemMessage.

Ejemplo

from langchain.agents import create_agent
from langchain.messages import SystemMessage

# Forma 1: cadena (simple y directa)
agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    system_prompt="Eres el asesor de aprendizaje de EJEMPLO. Responde de forma concisa, sin superar los 100 caracteres.",
)

# Forma 2: objeto SystemMessage (reutilizable entre varios agentes)
system_msg = SystemMessage(
    content="Eres el asesor de aprendizaje de EJEMPLO. Responde de forma concisa, sin superar los 100 caracteres."
)
agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    system_prompt=system_msg,
)

system_prompt es opcional, pero si no se pasa, el modelo responderá con el rol de "asistente general". Para aplicaciones con escenarios de negocio claros, se recomienda establecer siempre system_prompt para limitar el comportamiento del modelo.

Parámetro state_schema: estado personalizado

El AgentState predeterminado solo contiene messages, jump_to y structured_response. Si necesitas campos de estado adicionales, puedes extenderlo:

Ejemplo

from typing import Annotated
from langchain.agents import create_agent, AgentState
from langchain.messages import HumanMessage
from langchain.tools import tool, InjectedState
from typing_extensions import TypedDict


# Extender AgentState y añadir campos personalizados
class LearningAgentState(AgentState):
    """Estado personalizado, con campos adicionales de progreso de aprendizaje"""
    user_level: str                       # Nivel del usuario
    completed_topics: list[str]           # Lista de temas completados


@tool
def track_progress(
    topic: str,
    state: Annotated[dict, InjectedState],
) -> str:
    """Registra el progreso de aprendizaje del usuario.

    Args:
topic: nombre del tema que acaba de completarse
    """

    completed = state.get("completed_topics", [])
    completed.append(topic)
    return (
        f"Progreso registrado. Temas completados actualmente: {len(completed)}:"
        f"{', '.join(completed)}"
    )


agent = create_agent(
    model="deepseek:deepseek-v4-flash",
    tools=[track_progress],
    state_schema=LearningAgentState,  # Usar estado personalizado
    system_prompt="Eres el asistente de aprendizaje de EJEMPLO.",
)

# En tiempo de ejecución, se debe proporcionar el valor inicial del estado personalizado
result = agent.invoke({
    "messages": [HumanMessage(content="He terminado los fundamentos de Python, regístralo para mí")],
    "user_level": "Principiante",
    "completed_topics": ["Fundamentos de HTML"],
})

print(f"Nivel de usuario: {result.get('user_level')}")
print(f"Temas completados: {result.get('completed_topics')}")
print(f"Respuesta: {result['messages'][-1].content[:100]}")

Resultado de la ejecución:

Nivel de usuario: 入门
Temas completados: ['HTML 基础', 'Python 基础']
Respuesta: Progreso de aprendizaje registrado. Temas completados: 2 (Fundamentos de HTML, Fundamentos de Python)

Valor de retorno: CompiledStateGraph

create_agent() devuelve unCompiledStateGraphobjeto, que es el grafo compilado de LangGraph y proporciona múltiples formas de ejecución:

MétodoDescripciónEscenario de uso
invoke(input, config)Ejecución síncrona, espera el resultado completoScripts, interfaces sencillas
ainvoke(input, config)Ejecución asíncrona, espera el resultado completoServicios web
stream(input, config, stream_mode)Ejecución síncrona en streamingMostrar los pasos intermedios en tiempo real
astream(input, config, stream_mode)Ejecución asíncrona en streamingWebSocket、SSE
get_state(config)Obtener el estado actualVer/restaurar el estado de la conversación
update_state(config, values)Actualizar el estadoModificar manualmente el estado de la conversación
Otras extensiones