Comenzando con el Protocolo de comunicación del agente (ACP): construya un agente meteorológico con Python

El Protocolo de comunicación del Agente (ACP) es un estándar abierto diseñado para permitir una comunicación perfecta entre agentes de IA, aplicaciones y humanos. Como los sistemas de IA a menudo se desarrollan utilizando diversos marcos e infraestructuras, pueden terminar aislados e incompatibles, lo que limita su capacidad de colaborar. ACP aborda esta fragmentación ofreciendo una API unificada RESTful que facilita:

  • Comunicación multimodal
  • Mensajes sincrónicos y asincrónicos
  • Transmisión en tiempo real
  • Soporte para interacciones de agentes con estado y estado
  • Descubrimiento de agentes, ya sea en línea o fuera de línea
  • Ejecución de tareas de larga duración

En este tutorial, daremos nuestros primeros pasos con ACP construyendo un servidor básico que proporcione la información meteorológica de Londres y un cliente simple que pueda interactuar con él.

Configuración de las dependencias

Instalación de las bibliotecas

pip install acp acp-sdk beeai-framework httpx

Creando el servidor ACP

Comenzaremos configurando el servidor ACP, comenzando con la creación de un agente.py archivo.

Comenzaremos importando las bibliotecas necesarias. Para obtener los datos meteorológicos de Londres, utilizaremos la biblioteca HTTPX para hacer una solicitud a la API Open -Meteo.

import asyncio
from collections.abc import AsyncGenerator
import httpx                              

from acp_sdk.models import Message, MessagePart
from acp_sdk.server import Context, RunYield, RunYieldResume, Server

server = Server()

A continuación, definiremos una función de ayudante asíncrono llamada get_london_weather que recupera el clima actual en Londres usando la API Open -Meteeo. Esta función envía una solicitud con las coordenadas de Londres y devuelve un resumen del clima formateado que incluye la temperatura, la velocidad del viento y el código de condición climática.

async def get_london_weather() -> str:
    """Fetch current London weather from the free Open‑Meteo API."""
    params = {
        "latitude": 51.5072,          # London coordinates
        "longitude": -0.1276,
        "current_weather": True,
        "timezone": "Europe/London"
    }
    url = "https://api.open-meteo.com/v1/forecast"

    async with httpx.AsyncClient(timeout=10) as client:
        resp = await client.get(url, params=params)
        resp.raise_for_status()
        cw = resp.json()["current_weather"]

    return (
        f"Weather in London: {cw['temperature']} °C, "
        f"wind {cw['windspeed']} km/h, code {cw['weathercode']}."
    )

Este código define un agente compatible con ACP utilizando el decorador @server.agent (). La función London_Weather_Agent maneja los mensajes entrantes al generar primero un mensaje de pensamiento, luego obtener asincrónicamente el clima actual en Londres usando el ayudante get_london_weather (). Los datos meteorológicos se devuelven como un mensaje de texto sin formato. Finalmente, Server.run () inicia el servidor ACP y hace que el agente esté disponible para manejar las solicitudes

@server.agent()
async def london_weather_agent(
    input: list[Message], context: Context
) -> AsyncGenerator[RunYield, RunYieldResume]:
    """Returns current London weather."""
    for _ in input:
        yield {"thought": "Fetching London weather..."}
        weather = await get_london_weather()
        yield Message(
            role="agent",
            parts=[MessagePart(content=weather, content_type="text/plain")]
        )

server.run()

Ejecutando el servidor

A continuación, ejecutaremos el archivo agente.py para iniciar el servidor. Una vez ejecutándose, el agente ACP estará disponible para manejar las solicitudes en http: // localhost: 8000

Para verificar que su agente esté en funcionamiento, abra un nuevo terminal y ejecute el siguiente comando CURL:

curl http://localhost:8000/agents

Si todo funciona correctamente, recibirá una respuesta JSON que enumera su agente, confirmando que está disponible y está listo para manejar las solicitudes.

{
    "agents": [
        {
            "name": "london_weather_agent",
            "description": "Returns current London weather.",
            "metadata": {
                "annotations": null,
                "documentation": null,
                "license": null,
                "programming_language": null,
                "natural_languages": null,
                "framework": null,
                "capabilities": null,
                "domains": null,
                "tags": null,
                "created_at": null,
                "updated_at": null,
                "author": null,
                "contributors": null,
                "links": null,
                "dependencies": null,
                "recommended_models": null
            },
            "input_content_types": [
                "*/*"
            ],
            "output_content_types": [
                "*/*"
            ]
        }
    ]
}

Creando el cliente ACP

Ahora crearemos un cliente ACP (Client.py) interactuar con nuestro servidor.

Este script de cliente utiliza el SDK ACP para conectarse a la ejecución local de Londres_Weather_Agent a través del servidor ACP en http: // localhost: 8000. Envía un mensaje sincrónico pidiendo el clima usando el método run_sync. Una vez que el agente responde, el script imprime los detalles meteorológicos devueltos.

import asyncio

from acp_sdk.client import Client
from acp_sdk.models import Message, MessagePart


async def call_london_weather_agent() -> None:
    async with Client(base_url="http://localhost:8000") as client:
        run = await client.run_sync(
            agent="london_weather_agent",
            input=[
                Message(
                    parts=[MessagePart(content="Tell me the weather", content_type="text/plain")]
                )
            ],
        )

        print("Response from london_weather_agent:")
        for message in run.output:
            for part in message.parts:
                print("-", part.content)


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

Ejecutando el cliente

En otro terminal, ejecute el siguiente comando para enviar una solicitud a nuestro servidor ACP

Debería ver una respuesta del servidor que contiene el clima actual en Londres, devuelto por Londres_Weather_Agent.

Response from london_weather_agent:                                                     
- Weather in London: 20.8 °C, wind 10.1 km/h, code 3.

Mira el Codos. Todo el crédito por esta investigación va a los investigadores de este proyecto. Además, siéntete libre de seguirnos Gorjeo, YouTube y Spotify Y no olvides unirte a nuestro Subreddit de 100k+ ml y suscribirse a Nuestro boletín.


Soy un graduado de ingeniería civil (2022) de Jamia Millia Islamia, Nueva Delhi, y tengo un gran interés en la ciencia de datos, especialmente las redes neuronales y su aplicación en varias áreas.