Skip to content
chatflow-agent logochatflow-agent
Primeros Pasos

Inicio Rápido

Construye y ejecuta tu primer agente de IA conversacional con chatflow-agent en menos de 5 minutos.


1. Crear un Agente Básico

En chatflow-agent, un Agent representa una entidad con instrucciones y capacidades especializadas, mientras que el Runner orquesta los turnos conversacionales y el ciclo de evaluación de herramientas.

Crea un archivo llamado quickstart.py:

# [min-version: 0.3.0]
# [no-exec: requires real openai api key for live response]
import os
from chatflow_agent import Agent, Runner

# 1. Definir la identidad del agente, instrucciones y modelo objetivo
# chatflow-agent enruta automáticamente "gpt-4o" al motor OpenAI usando OPENAI_API_KEY
agent = Agent(
    name="Assistant",
    instructions="You are a concise and helpful AI technical assistant.",
    model="gpt-4o",
)

# 2. Inicializar el Runner con tu agente inicial
runner = Runner(starting_agent=agent)

# 3. Ejecutar un turno conversacional
response = runner.run(
    session_id="quickstart_session",
    user_message="Explain async Python in two concise sentences.",
)

# 4. Mostrar la respuesta
print("Agent Response:")
print(response.content)

Ejecuta el script desde tu terminal:

python quickstart.py

Protección del Bucle de Eventos

runner.run() es un método síncrono de conveniencia diseñado para scripts y utilidades CLI. Si te encuentras dentro de un bucle de eventos asíncrono activo (por ejemplo, FastAPI, Jupyter Notebook o asyncio), utiliza await runner.run_async() en su lugar. Invocar runner.run() dentro de un bucle activo generará un error claro de tipo RuntimeError.


2. Agregar Herramientas con @tool

Los agentes se vuelven exponencialmente más capaces al otorgarles acceso a funciones deterministas. Utiliza el decorador @tool para convertir cualquier función de Python en una herramienta introspeccionable:

# [min-version: 0.3.0]
# [no-exec: requires real openai api key for live response]
import os
from chatflow_agent import Agent, Runner, tool

# 1. Definir una herramienta con parámetros tipados y docstrings
@tool(name="calculate_discount", description="Calculate discounted price from original amount and percentage.")
def calculate_discount(price: float, discount_percent: float) -> str:
    """Calculate the final price after applying a percentage discount.

    Args:
        price: The original price in dollars.
        discount_percent: The percentage discount to apply (e.g. 15 for 15%).
    """
    savings = price * (discount_percent / 100.0)
    final_price = price - savings
    return f"Original: ${price:.2f}, Savings: ${savings:.2f}, Final Price: ${final_price:.2f}"

# 2. Asociar la herramienta al Agent
agent = Agent(
    name="SalesBot",
    instructions="You help customers with purchase calculations. Always use calculate_discount for math.",
    model="gpt-4o",
    tools=[calculate_discount],
)

runner = Runner(starting_agent=agent)

# 3. Realizar una consulta que requiera ejecutar la herramienta
response = runner.run(
    session_id="sales_session_1",
    user_message="What is the final price for a jacket priced at $120 with a 25% discount?",
)
print(response.content)

Inspeccionar la Ejecución de Herramientas

El objeto AgentResponse retornado conserva total transparencia sobre el turno conversacional:

# Inspeccionar nombres de herramientas ejecutadas
for tool_name in response.tool_calls_executed:
    print(f"Tool executed: {tool_name}")

3. Ejecución Asíncrona con Runner.run_async

Para servicios web de alta concurrencia, chatbots y arquitecturas basadas en eventos, utiliza la API asíncrona nativa:

import asyncio
import os
from chatflow_agent import Agent, Runner

async def main() -> None:
    agent = Agent(
        name="AsyncBot",
        instructions="Provide concise answers.",
        model="gpt-4o",
    )

    runner = Runner(starting_agent=agent)

    # Turno asíncrono
    response = await runner.run_async(
        session_id="async_session_1",
        user_message="List three key advantages of asynchronous Python.",
    )

    print(response.content)

if __name__ == "__main__":
    asyncio.run(main())

4. Flexibilidad Multiproveedor

Gracias a que chatflow-agent utiliza motores REST directos, cambiar de proveedor es instantáneo sin necesidad de alterar la lógica del agente:

import os
from chatflow_agent import Agent, OpenAIEngine

# Opción 1: Configuración directa por modelo (los motores se resuelven automáticamente)
openai_agent = Agent(
    name="OpenAIBot",
    instructions="You are powered by GPT-4o.",
    model="gpt-4o",
)

claude_agent = Agent(
    name="ClaudeBot",
    instructions="You are powered by Claude 3.5 Sonnet.",
    model="claude-3-5-sonnet-20241022",
)

gemini_agent = Agent(
    name="GeminiBot",
    instructions="You are powered by Google Gemini.",
    model="gemini-2.5-flash",
)

# Opción 2: Endpoints personalizados mediante OpenAIEngine (Groq, Ollama, DeepSeek)
groq_engine = OpenAIEngine(
    base_url="https://api.groq.com/openai/v1",
    api_key=os.getenv("GROQ_API_KEY"),
    provider="groq",
)

groq_agent = Agent(
    name="GroqBot",
    instructions="You are powered by LLaMA 3.3 on Groq.",
    model="llama-3.3-70b-versatile",
    engine=groq_engine,
)

Diferencias de Proveedores en v0.3.4 vs v0.4.0rc1

En Stable (0.3.4), GeminiEngine depende del paquete google-genai. En Prerelease (0.4.0rc1), GeminiEngine fue rediseñado a REST HTTP puro mediante httpx, eliminando las dependencias externas del SDK de Google.


Próximos Pasos

Ahora que has ejecutado tus primeros agentes, profundiza en los conceptos fundamentales:

On this page