Hoy en día, los flujos de trabajo geoespaciales suelen consistir en cargar datos, transformarlos y luego producir información visual como mapas, texto o gráficos. La IA generativa puede automatizar estas tareas a través de sistemas autónomos. agentes. En esta publicación, analizamos cómo utilizar los modelos de cimentación de Roca Amazónica para impulsar a los agentes a completar tareas geoespaciales. Estos agentes pueden realizar diversas tareas y responder preguntas utilizando servicios basados en la ubicación, como la codificación geográfica, disponibles a través de Servicio de localización de Amazon. También compartimos un código de muestra que utiliza un agente para unir las capacidades de Amazon Bedrock con Amazon Location. Además, analizamos las consideraciones de diseño que se tuvieron en cuenta para construirlo.
Amazon Bedrock es un servicio totalmente administrado que ofrece una API fácil de usar para acceder a modelos básicos para texto, imágenes e incrustaciones. Amazon Location ofrece una API para mapas, lugares y rutas con datos proporcionados por terceros confiables como Esri, HERE, Grab y OpenStreetMap. Si necesita control total de su infraestructura, puede utilizar Inicio rápido de Amazon SageMakerque le brinda la capacidad de implementar modelos básicos y tiene acceso a cientos de modelos.
Descripción general de la solución
En el ámbito de los grandes modelos de lenguaje (LLM), un agente es una entidad que puede razonar y completar tareas de forma autónoma con la ayuda de un LLM. Esto permite a los LLM ir más allá de la generación de texto para llevar a cabo conversaciones y completar tareas de dominios específicos. Para guiar este comportamiento, empleamos patrones de razonamiento. Según el trabajo de investigación Los modelos de lenguaje grandes son razonadores de tiro cerolos LLM sobresalen en razonamiento de alto nivel, a pesar de tener un límite de conocimientos.
Seleccionamos claudio 2 como nuestro modelo fundacional de Amazon Bedrock con el objetivo de crear un agente geoespacial capaz de manejar tareas geoespaciales. El concepto general era sencillo: pensar como un científico de datos geoespaciales. La tarea implicó escribir código Python para leer datos, transformarlos y luego visualizarlos en un mapa interesante. Utilizamos un patrón de incitación conocido como Indicaciones para planificar y resolver para este propósito.
El uso de una estrategia de Planificar y Resolver permite un razonamiento de varios pasos y desarrollar un plan de alto nivel como primera tarea. Esto funciona bien para nuestro flujo de trabajo de carga, transformación y visualización, y es el plan de alto nivel que utilizará nuestro agente. Cada una de estas subtareas se envía a Claude 2 para que las resuelva por separado.
Ideamos una tarea de ejemplo para crear un mapa de calor de precios de Anuncios de Airbnb en Nueva York. Para planificar una ruta para completar la tarea, el agente debe comprender el conjunto de datos. El agente necesita conocer las columnas del conjunto de datos y el tipo de datos en esas columnas. Generamos un resumen del conjunto de datos para que el agente pueda planificar la tarea proporcionada por el usuario, en este caso, generando un mapa de calor.
Requisitos previos
Hay algunos requisitos previos para implementar la demostración. Necesitará acceso a una cuenta de AWS con una llave de acceso o Gestión de acceso e identidad de AWS (SOY) role con permisos para Amazon Bedrock y Amazon Location. Necesitará crear un mapaa índice de lugaresy un Clave API de ubicación de Amazon utilizando la consola de ubicación de Amazon. También necesitará acceso a un entorno local o virtual donde esté instalado Docker. En nuestra demostración utilizamos un Nube informática elástica de Amazon Instancia (Amazon EC2) que ejecuta Amazon Linux con Docker instalado.
Leer y resumir los datos.
Para brindarle al agente contexto sobre el conjunto de datos, le solicitamos a Claude 2 que escriba código Python que lea los datos y proporcione un resumen relevante para nuestra tarea. Las siguientes son algunas de las indicaciones que incluimos. La lista completa está disponible en el prompts.py archivo en el proyecto.
A partir de estas indicaciones, Claude 2 generó el siguiente código Python:
El agent:// El prefijo le dice a nuestra CLI que este archivo está almacenado dentro de la carpeta de almacenamiento de la sesión. Al ejecutar la CLI, creará una carpeta de almacenamiento de sesiones de agente geoespacial para almacenar datos locales. El agente ahora reconoce los datos cargados de Airbnb y los nombres de sus columnas. A continuación, pidámosle a Claude algunos consejos para generar un mapa de calor usando estas columnas. Pasaremos las siguientes indicaciones.
Claude 2 responde con una pista.
Planificar una solución
Ahora podemos pedirle a Claude 2 que redacte un plan de alto nivel. Podemos usar una biblioteca de gráficos para Python llamada RedX para trazar los pasos para resolver nuestro problema.
De manera similar a nuestro último mensaje, pasamos algunos requisitos para guiar a Claude 2:
A partir de estas indicaciones, Claude 2 generó el siguiente código Python:
En este gráfico de NetworkX, Claude 2 divide el proceso en tres segmentos principales:
- Cargando datos – Importar los precios de listado de Airbnb desde una URL determinada a un Pandas DataFrame
- Transformando datos – Crear una columna de geometría basada en las coordenadas de latitud y longitud.
- Visualizando datos – Generar un mapa de calor para mostrar los precios de los listados de Airbnb
Este enfoque permite una implementación clara y directa de la tarea geoespacial en cuestión. Podemos usar GraphViz para visualizar el siguiente flujo de trabajo.
implementar el plan
Ahora que Claude 2 nos ha proporcionado un plan, es hora de darle vida. Para cada paso, le pedimos a Claude 2 que escriba el código correspondiente. Para mantener a Claude 2 enfocado, proporcionamos requisitos de alto nivel para cada tarea. Profundicemos en el código que Claude 2 generó para cada fase individual.
Cargar los datos
Para cargar los datos de precios de listado de Airbnb en un Pandas DataFrame, creamos un mensaje y pasamos algunos parámetros. “Cargar datos de Airbnb” en Operation_task hace referencia al nodo Cargar datos en nuestro gráfico que creamos anteriormente.
A partir de estas indicaciones, Claude 2 generó el siguiente código Python:
Transformar los datos
A continuación, Claude 2 genera el código para agregar un geometry columna a nuestro DataFrame usando latitude y longitude. Para este mensaje, pasamos los siguientes requisitos:
A partir de estas indicaciones, Claude 2 generó el siguiente código Python:
Visualiza los datos
Finalmente, Claude 2 crea una visualización de mapa de calor usando pydeck, que es una biblioteca de Python para representación espacial. Para este mensaje, pasamos los siguientes requisitos:
A partir de estas indicaciones, Claude 2 generó el siguiente código Python:
Cuando Claude 2 devuelve una respuesta, también incluye algunas notas útiles que explican cómo cada función cumple con los requisitos proporcionados. Por ejemplo, para la visualización del mapa de calor, Claude 2 observó lo siguiente:
"This function generates a heatmap of Airbnb listing prices using pydeck and saves the resulting HTML locally. It fulfills the requirements specified in the prompt."
Ensamblar el código generado
Ahora que Claude 2 ha creado los bloques de construcción individuales, es hora de juntarlos todos. El agente reúne automáticamente todos estos fragmentos en un único archivo Python. Este script llama a cada una de nuestras funciones en secuencia, agilizando todo el proceso.
El paso final se parece al siguiente código:
Una vez completado el script, podemos ver que Claude 2 ha creado un archivo HTML con el código para visualizar nuestro mapa de calor. La siguiente imagen muestra Nueva York en un mapa base de ubicaciones de Amazon con un mapa de calor que visualiza los precios de listado de Airbnb.
Utilice la ubicación de Amazon con Amazon Bedrock
Aunque nuestro agente Planificar y resolver puede manejar esta tarea geoespacial, debemos adoptar un enfoque ligeramente diferente para tareas como geocodificar una dirección. Para ello podemos utilizar una estrategia llamada Reaccionardonde combinamos el razonamiento y la acción con nuestro LLM.
En el patrón ReAct, el agente razona y actúa basándose en la información del cliente y en la herramientas a su disposición. Para equipar a este agente impulsado por Claude 2 con la capacidad de geocodificar, desarrollamos una herramienta de geocodificación. Esta herramienta utiliza la API de Amazon Location Places, específicamente la SearchPlaceIndexForText método, para convertir una dirección en sus coordenadas geográficas.
En este breve intercambio, el agente descifra su intención de geocodificar una dirección, activa la herramienta de geocodificación y devuelve la latitud y longitud.
Ya sea trazando un mapa de calor o codificando geográficamente una dirección, Claude 2 combinado con agentes como ReAct y Plan and Solve puede simplificar los flujos de trabajo geoespaciales.
Implementar la demostración
Para comenzar, complete los siguientes pasos:
- Clone el siguiente repositorio en su máquina local o en una instancia EC2. Es posible que necesites correr
aws configure --profile <profilename>y establecer una Región predeterminada; esta aplicación fue probada usandous-east-1.
Ahora que tenemos el repositorio clonado, configuramos nuestras variables de entorno.
- Cambie los directorios a la carpeta del proyecto clonado:
- Editar el
.envarchivo usando su editor de texto preferido:
- Agregue el nombre de su mapa, el nombre del índice del lugar y la clave API:
- Ejecute el siguiente comando para construir su contenedor:
- Ejecute el siguiente comando para ejecutar y conectarse a su contenedor Docker:
- Tome el conjunto de datos de Airbnb:
- Ejecute el siguiente comando para crear una sesión. Usamos sesiones para aislar entornos de chat únicos.
Ahora estás listo para iniciar la aplicación.
- Ejecute el siguiente comando para iniciar la aplicación de chat:
Serás recibido con un mensaje de chat.
- Puedes comenzar haciendo la siguiente pregunta:
El agente agarra el Airbnb_listings_price.csv archivo que hemos descargado en el /data carpeta y la analiza en un DataFrame geoespacial. Luego genera el código para transformar los datos así como el código para la visualización. Finalmente, crea un archivo HTML que se escribirá en el /data carpeta, que puede abrir para visualizar el mapa de calor en un navegador.
Otro ejemplo utiliza la API de Amazon Location Places para geocodificar una dirección. Si le pedimos al agente que geocodifique la dirección 112 E 11th St, Austin, TX 78701, obtendremos una respuesta como se muestra en la siguiente imagen.
Conclusión
En esta publicación, brindamos una breve descripción general de Amazon Bedrock y Amazon Location, y cómo puede usarlos juntos para analizar y visualizar datos geoespaciales. También analizamos Plan-and-Solve y ReAct y cómo los usamos en nuestro agente.
Nuestro ejemplo sólo roza la superficie. Intente descargar nuestro código de muestra y agregue sus propios agentes y herramientas para sus tareas geoespaciales.
Sobre los autores
Jeff Demuth es un arquitecto de soluciones que se unió a Amazon Web Services (AWS) en 2016. Se enfoca en la comunidad geoespacial y le apasionan los sistemas de información geográfica (SIG) y la tecnología. Fuera del trabajo, a Jeff le gusta viajar, crear aplicaciones de Internet de las cosas (IoT) y jugar con los últimos dispositivos.
Swagata Prateek es un ingeniero de software senior que trabaja en Amazon Location Service en Amazon Web Services (AWS), donde se enfoca en IA generativa y geoespacial.