<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Jonathan Simon - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Jonathan Simon - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/es/search-labs/author/jonathan-simon</link>
    </image>
    <link>https://www.elastic.co/es/search-labs/author/jonathan-simon</link>
    <atom:link href="https://www.elastic.co/es/search-labs/rss/author/jonathan-simon.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[es]]></language>
    <lastBuildDate>Tue, 22 Sep 2026 20:44:35 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Primeros pasos con Elastic Agent Builder y Strands Agents SDK]]></title>
    <description><![CDATA[Aprende a crear un agente con Elastic Agent Builder y, a continuación, descubre cómo utilizar el agente a través del protocolo A2A orquestado con el SDK de Strands Agents.]]></description>
    <content:encoded><![CDATA[<p>¿Tienes una idea para un agente de IA? Probablemente implica hacer algo con datos porque, si un agente va a iniciar una acción útil, necesita tomar una decisión y necesita los datos correctos para tomar la decisión correcta.</p><p>Elastic Agent Builder facilita la creación de agentes de IA conectados a datos. Te mostraremos cómo hacerlo en esta publicación de blog. Veamos todos los pasos necesarios para crear un agente con una herramienta MCP que acceda a los datos almacenados en Elastic. Luego usaremos el SDK de Strands Agents y sus capacidades Agent2Agent (A2A) para operar el agente. El <a href="https://strandsagents.com/">SDK de Strands Agents</a> es una plataforma de desarrollo de IA multiagente que puedes usar para crear apps de agentes con el código justo para asegurarte de obtener el resultado que quieres.</p><p>Construyamos un agente de IA que juegue el juego de RPS+, que es una versión del clásico juego de "Piedra, papel o tijeras" con un toque adicional; les da a los jugadores del juego un par de opciones adicionales.</p><h2>Requisitos previos</h2><p>Aquí está lo que se requiere para seguir los pasos en esta publicación de blog:</p><ul><li><p>Un editor de texto ejecutándose en tu computadora local</p><ul><li><p><a href="https://code.visualstudio.com/download">Visual Studio Code</a> es lo que usaremos para las instrucciones de ejemplo en esta publicación de blog</p></li></ul></li><li><p><a href="https://www.python.org/downloads/">Python 3.10 o superior</a> funcionando en tu computadora local</p></li></ul><h2>Crea un proyecto Serverless</h2><p>Lo primero que necesitamos es un proyecto Elasticsearch Serverless, que incluye Elastic Agent Builder.</p><p>Ve a <a href="http://cloud.elastic.co/">cloud.elastic.co</a> y crea un nuevo proyecto de Elasticsearch Serverless.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3472edce39ec0b81/6a17060e66c4f93c17f8bf57/31b6a5c1c30dacbb4d5e58d1c566071e7143a0c8-1600x879.gif" alt="" /><h2>Crea un índice y agrega datos</h2><p>A continuación, vamos a agregar algunos datos a nuestro proyecto de Elasticsearch. Abre Developer Tools, donde podemos ejecutar comandos para crear un nuevo índice e insertar algunos datos en él. Selecciona Herramientas para desarrolladores en el menú de navegación de nivel superior.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltaedaa94068c07a17/6a17060f961e697558c4ce5f/f97d5af077504463155655a9e27c171a7f974f71-1600x879.jpg" alt="" /><p>Copia y pega el siguiente comando PUT en el área de entrada de solicitud de la consola de Developer Tools. Esta declaración crea un índice de Elasticsearch llamado “game-docs”.</p>PUT /game-docs
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "content": { 
        "type": "text"
      },
      "filename": { "type": "keyword" },
      "last_modified": { "type": "date" }
    }
  }
}<p>Haz clic en el botón <strong>Enviar solicitud</strong> que aparece en el lado derecho de la declaración en Herramientas para desarrolladores. Deberías ver una notificación que confirme que el índice <em>game-docs</em> se creó en el área de respuesta de Herramientas para desarrolladores.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt430c357b479d93af/6a170611a6c2b98191e79624/be0555a1930e4d4f58b7ed8b669c9b702532ed17-1600x880.jpg" alt="" /><p>Un índice llamado <em>game-docs</em> es el lugar ideal para almacenar los datos del juego que estamos creando. Pongamos un documento llamado <em>rps+-md</em> en este índice que contiene todos los datos que requiere nuestro juego. Copia y pega el siguiente comando PUT en la consola de Herramientas para desarrolladores.</p>PUT /game-docs/_doc/rps+-md
{
  "title": "Rock Paper Scissors +",
  "content": "
# Game Name
RPS+

# Starting Prompt
Let's play RPS+ !
---
What do you choose?

# Game Objects
1. Rock 🪨 👊
2. Paper 📜 🖐
3. Scissors ✄ ✌️
4. Light ☼ 👍
5. Dark Energy ☄ 🫱

# Judgement of Victory
* Rock beats Scissors
  * because rocks break scissors
* Paper beats Rock
  * because paper covers rock
* Scissors beat Paper
  * because scissors cut paper
* Rock beats Light
  * because you can build a rock structure to block out light
* Paper beats Light
  * because knowledge stored in files and paper books helps us understand light
* Light beats Dark Energy
  * because light enables humans to lighten up and laugh in the face of dark energy as it causes the eventual heat death of the universe
* Light beats Scissors
  * because light is needed to use scissors safely
* Dark Energy beats Rock
  * because dark energy rocks more than rocks. It rocks rocks and everything else in its expansion of the universe
* Dark Energy beats Paper
  * because humans, with their knowledge stored in files and paper books, can't explain dark energy 
* Scissors beat Dark Energy
  * because a human running with scissors is darker than dark energy

# Invalid Input
I was hoping for an worthy opponent
  - but alas it appears that time has past
  - but alas there's little time for your todo list when [todo:fix this] is so vast

# Cancel Game
The future belongs to the bold. Goodbye..
",
  "filename": "RPS+.md",
  "last_modified": "2025-11-25T12:00:00Z"
}<p>Haz clic en el <strong>botón Enviar solicitud</strong> junto a la instrucción para ejecutarlo y agregar el documento <em>rps+-md</em> al índice de documentación del juego.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt64d49e13754d5b25/6a17061214b270524be3c55d/3c01d8a4602de5c33337457591a388a4a4e3fad3-1600x879.jpg" alt="" /><p>Ahora deberíamos tener algunos datos para consultar, y con Agent Builder, eso es más simple que nunca.</p><p>Selecciona <strong>Agentes</strong> en el menú de navegación superior.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb4d374bf2ba9135c/6a1706147d8d67468570e63e/82dbd2e9a439cabd5a5eea3d0ce005b87df0c3ea-1600x879.jpg" alt="" /><p>Luego, todo lo que tienes que hacer es preguntarle al agente de Elastic AI predeterminado: "¿Qué datos tengo?".</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc0f879cf28772718/6a1706161949f7f25ee7a92d/f7a2f39c9d1486bdf02d9e88a732b540ac2e2cd1-1600x872.gif" alt="" /><p>El agente de Elastic AI evalúa los datos y devuelve una explicación concisa de los datos que tenemos.</p><h2>Crear una herramienta</h2><p>Listo, ahora tenemos algunos datos en Elastic; vamos a ponerlos en práctica. Agent Builder incluye soporte integrado para crear herramientas <a href="https://modelcontextprotocol.io/">MCP</a> que ayudan a los agentes a acceder a los datos que necesitan para tener el contexto adecuado para su tarea. Vamos a crear una herramienta sencilla que recupere los datos de nuestro juego.</p><p>Haz clic en el menú de acciones de Agent Builder.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7802a6b94e81440c/6a170618ab7f085287db9db4/0e327c202674dda33bcc0e494d2b588fa8b32e4f-1600x879.png" alt="" /><p>Selecciona <strong>Ver todas las herramientas </strong>en las opciones del menú.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9f52ffe114fb6ea7/6a17061a4a531b801b36a884/1ebf58650e9fb56750d3f0b1700fab50b44f9bdf-1600x879.png" alt="" /><p>Haz clic en <strong>+ Nueva herramienta.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8090769f6c4d1899/6a17061c286714294093e219/6c03a7f28b99ac2d805f34f39948979893316a00-1600x879.png" alt="" /><p>En el formulario <strong>Crear herramienta</strong>, selecciona <a href="https://www.elastic.co/docs/explore-analyze/query-filter/languages/esql"><strong>ES|QL</strong></a>como <strong>Tipo</strong> de herramienta e ingresa los siguientes valores.</p><p><strong>Para el ID de la herramienta</strong>:</p>example.get_game_docs<p>Para la <strong>Descripción</strong>:</p>Get RPS+ doc from Elasticsearch game-docs index.<p>Para <strong>la configuración, </strong>ingresa la siguiente consulta en el área de texto <strong>Consulta ES|QL </strong> :</p>FROM game-docs | WHERE filename == "RPS+.md"<p>Tu formulario completado de <strong>Crear herramienta</strong> debería verse así. Haz clic en <strong>Guardar</strong> para crear la herramienta.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt77034c305198217a/6a17061e66c4f9e54ef8bf5e/b6c93e344600f319b9d2c3030020cf2d171ac1c4-1600x1312.png" alt="" /><p>Tenemos una nueva herramienta disponible en el estante de herramientas. Las herramientas no deberían estar colgadas perpetuamente en un estante; hay que darles un uso digno. Creemos un agente que pueda emplear nuestra nueva herramienta personalizada.</p><h2>Crea un agente y asígnale una herramienta</h2><p>Crear un agente es sorprendentemente sencillo con Agent Builder. Solo tienes que ingresar las instrucciones del agente con algunos detalles y eso es todo lo que necesitas. Vamos a crear un agente ahora.</p><p>Haz <strong>clic en Gestionar agentes.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltaa8a83fc2f3758a9/6a1706201949f71a10e7a931/53934b93db07187e251d4b321cb9ca647e2fd51b-1600x858.png" alt="" /><p>Haz clic en<strong> + Nuevo agente.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3778403c5101a000/6a17062160084be12f3c449e/fae3ad8f31e71a6dfd044e1daa025a4e280b4e68-1600x490.png" alt="" /><p>Introduce la siguiente información en el formulario <strong>Nuevo agente</strong>.</p><p>Para <strong>ID de agente, </strong>ingresa el texto a continuación:</p>rps_plus_agent<p>En el área de texto de <strong>Instrucciones personalizadas</strong> , ingresa las siguientes instrucciones:</p>When prompted, if the prompt contains an integer, then select the corresponding numbered item in the list of "Game Objects" from your documents. Otherwise select a random game object. This is your chosen game object for a single round of the game.

# General Game Rules
* 2 players
    - the user: the person playing the game
    - you: the agent playing the game and serving as the game master
* Each player chooses a game object which will be compared and cause them to tie, win or lose.

# Start the game
1. This is the way each new game always starts. You make the first line of your response only the name of your chosen game object. 

2. The remainder of your response should be the "Starting Prompt" text from your documents and generate a list of "Game Objects" for the person playing the game to choose a game object from.  

# End of Game: The game ends in one of the following three outcomes:
1. Invalid Input: If the player responds with an invalid game object choice, respond with variations of the "Invalid Input" text from your documents and then end the game.

2. Tie: The game ends in a tie if the user chooses the same game object as your game object choice.

3. Win or Lose: The game winner is decided based on the "Judgement of Victory" conditions from your documents. Compare the user's game object choice and your game object choice and determine who chose the winning game object.

# Game conclusion
Respond with a declaration of the winner of the game by outputting the corresponding text in the "Judgement of Victory" section of your documents.<p>Para el <strong>Nombre de visualización, </strong>ingresa el texto a continuación:</p>RPS+ Agent<p>Para la <strong>Descripción de la pantalla, </strong>ingresa el texto a continuación:</p>An agent that plays the game RPS+<p>Brinda al agente la herramienta personalizada que creamos previamente al hacer clic en la pestaña <strong>Herramientas</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte5b0fe00abdde07c/6a17062314b2704bc4e3c563/1778f64bc3a1b4004998dc3668ef7f666788e193-1600x1390.png" alt="" /><p>Selecciona solo la herramienta <em>example.get_game_docs</em> que creamos anteriormente.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2210212e07e06104/6a170625a929cf3277ae08d1/7d734cd80161bcc058817482eb330ffcf1cb567b-1600x1363.png" alt="" /><p>Haz clic en <strong>Guardar</strong> para crear el nuevo agente.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt6e3afc1918e26f14/6a170627ab7f084746db9db8/c0014faf605ce50c03679ed0d073bd9f3ae7234d-1600x468.png" alt="" /><p>Probemos nuestro nuevo agente. Hay un enlace útil para iniciar un chat con cualquier agente de la lista de agentes.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blteb4b69dc5971d3a0/6a1706286f7f046840914743/b7d6943ad90a4f68691207caf66b81742e712145-1600x560.png" alt="" /><p>Simplemente ingresa “iniciar juego” y el juego comenzará. ¡Funciona!</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte5b621d602223dff/6a17062ab339d568a1769ef8/984d008e4cc3f08cc1f101720673b0f7347c066c-1600x874.gif" alt="" /><p>Puedes ver que el agente muestra su elección de objeto de juego en la parte superior de su respuesta. Esto es útil porque podemos ver la elección del agente y confirmar que el juego funciona como se espera. Sin embargo, conocer la elección de tu oponente antes de elegir no lo convierte en un juego muy divertido de "Piedra, papel o tijeras". Para pulir y perfeccionar el juego hasta su forma final, podemos usar una plataforma de orquestación de agentes que pueda controlar a los agentes con código.</p><p>El SDK de Strands Agents entra al chat.</p><h2>SDK de agentes de Strands</h2><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt73901ec745a97fbf/6a17062c964cea23c808bab3/c195bba6ff2754f5d8fda174a0c1d247bc283710-456x156.png" alt="" /><p>Si tienes curiosidad por probar nuevos marcos de trabajo de desarrollo de agentes, entonces vale la pena probar el <a href="https://strandsagents.com/latest/">SDK de Strands Agents</a>. El <a href="https://aws.amazon.com/blogs/opensource/introducing-strands-agents-an-open-source-ai-agents-sdk/">SDK de Strands Agents fue lanzado por AWS (mayo de 2025)</a> como una implementación de open source <a href="https://github.com/strands-agents/sdk-python">Python</a>, y ahora también hay una versión en <a href="https://dev.to/aws/strands-agents-now-speaks-typescript-a-side-by-side-guide-12b3">Typescript</a>.</p><h2>Introducción al SDK de Strands Agents en Python</h2><p>Enciende tus motores de programación, ahora vamos a pasar rápidamente por el proceso de clonación y ejecución de una app de ejemplo que usa Strands Agents para controlar el agente de <em>RPS+</em> mediante el protocolo A2A. Vamos a crear una versión ajustada del juego RPS+ para que la elección del agente se revele después de que hagas tu elección, porque, después de todo, es la adivinación y el resultado sorpresa lo que hace que juegos como "Piedra, papel o tijeras" sean divertidos.</p><p>En tu computadora local, abre <a href="https://code.visualstudio.com/download">Visual Studio Code</a> y abre una nueva terminal.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3de752025d62993f/6a17062d0c4857f16501a997/2339cc37c89a3524f2b2a21684bc61dae958e1cf-915x460.jpg" alt="" /><p>En la terminal recién abierta, ejecuta el siguiente comando para clonar el repositorio de Elasticsearch Labs:</p>git clone https://github.com/elastic/elasticsearch-labs<p>Ejecuta el siguiente comando <em>cd </em>para cambiar el directorio al directorio elasticsearch-labs:</p>cd elasticsearch-labs<p>A continuación, ejecuta el siguiente comando para abrir el repositorio en Visual Studio Code:</p>code .<p>En el Explorador de archivos de Visual Studio, expande las carpetas <em>supporting-blog-content</em> y <em>agent-builder-a2a-strands-agents</em> y luego abre el archivo <em>elastic_agent_builder_a2a_rps+.py.</em> Así es como se ve el archivo abierto en Visual Studio Code:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt65ef8036a70bcaf1/6a17062f1949f7af36e7a935/d153b19e0e016c701576edb99ccab5af7c554f34-1484x1530.jpg" alt="" /><p>Aquí tienes el contenido de <em>elastic_agent_builder_a2a_rps+.py </em>que deberías ver en tu editor de texto:</p>import asyncio
from dotenv import load_dotenv
from uuid import uuid4
import httpx
import os
import random
from a2a.client import A2ACardResolver, ClientConfig, ClientFactory
from a2a.types import Message, Part, Role, TextPart

DEFAULT_TIMEOUT = 60  # set request timeout to 1 minute


def create_message(*, role: Role = Role.user, text: str, context_id=None) -&gt; Message:
    return Message(
        kind="message",
        role="user",
        parts=[Part(TextPart(kind="text", text=text))],
        message_id=uuid4().hex,
        context_id=context_id,
    )


async def main():
    load_dotenv()
    a2a_agent_host = os.getenv("ES_AGENT_URL")
    a2a_agent_key = os.getenv("ES_API_KEY")
    custom_headers = {"Authorization": f"ApiKey {a2a_agent_key}"}

    async with httpx.AsyncClient(
        timeout=DEFAULT_TIMEOUT, headers=custom_headers
    ) as httpx_client:
        # Get agent card
        resolver = A2ACardResolver(httpx_client=httpx_client, base_url=a2a_agent_host)
        agent_card = await resolver.get_agent_card(
            relative_card_path="/rps_plus_agent.json"
        )
        # Create client using factory
        config = ClientConfig(
            httpx_client=httpx_client,
            streaming=True,
        )
        factory = ClientFactory(config)
        client = factory.create(agent_card)
        # Use the client to communicate with the agent
        print("\nSending 'start game' message to Elastic A2A agent...")
        random_game_object = random.randint(1, 5)
        msg = create_message(text=f"start with game object {random_game_object}")
        async for event in client.send_message(msg):
            if isinstance(event, Message):
                context_id = event.context_id
                response_complete = event.parts[0].root.text
                # Get agent choice from the first line of the response
                parsed_response = response_complete.split("\n", 1)
                agent_choice = parsed_response[0]
                print(parsed_response[1])
        # User choice sent for game results from the agent
        prompt = input("Your Choice  : ")
        msg = create_message(text=prompt, context_id=context_id)
        async for event in client.send_message(msg):
            if isinstance(event, Message):
                print(f"Agent Choice : {agent_choice}")
                print(event.parts[0].root.text)


if __name__ == "__main__":
    asyncio.run(main())<p>Repasemos qué está pasando en este código. A partir del método <em><code>main()</code></em> , el código comienza accediendo a las variables de entorno para la URL del agente y la clave de API. Luego, usamos esos valores para crear un <em><code>httpx</code></em><code> client</code> que podamos usar para obtener la tarjeta de agente para el agente. El cliente luego usa los detalles de la tarjeta del agente para enviar una solicitud de "iniciar juego" al agente. Un aspecto interesante a tener en cuenta aquí es que incluimos un valor <code>random_game_object</code> como parte de la solicitud <code>"start game"</code>. Este valor es un número aleatorio generado con el módulo <em>aleatorio</em> de la biblioteca estándar de Python. La razón para hacerlo es que resulta que los poderosos LLM (que hacen posibles a los agentes de IA) no son muy buenos en la aleatoriedad. No hay problema, Python viene al rescate.</p><p>Continuando con la programación, una vez que el agente responde a la solicitud de "iniciar juego", el código elimina la selección del objeto de juego del agente y lo guarda en la variable <em>agent_choice</em>. El resto de la respuesta se muestra como texto para el usuario final. Luego, se le solicita al usuario su entrada de elección de objeto de juego, la cual se envía al agente. El código muestra la elección del objeto del juego del agente junto con la determinación final del agente sobre el resultado del juego.</p><h2>Establecer la URL de tu agente y la clave de API como variables de entorno</h2><p>Dado que la app de ejemplo se ejecutará en tu computadora local, para comunicarla con nuestro agente Agent Builder, debemos proporcionar al SDK de Strands Agents una URL A2A y una clave API para el agente. La app de ejemplo emplea un archivo llamado <em>.env</em> para almacenar estos valores.</p><p>Haz una copia del <em>archivo env.example</em> y nombra el nuevo <em>archivo .env</em></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta17961cbcb42985c/6a170631b0367dc5a072bc55/25ead5f15a17dedb777132a082097cffb06cae4d-1600x843.jpg" alt="" /><p>Vuelve a Elastic Agent Builder, donde podrás obtener los dos valores que necesitas.</p><p>Selecciona <strong>Ver todas las herramientas</strong> en el menú de acciones de Agent Builder en la parte superior derecha de la página.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt140885d7ebfcb969/6a1706327d8d67b17670e646/9c4f4e4a3bd76e11e0a182fa007a2f6aec7777b4-1600x880.jpg" alt="" /><p>Haz clic en el menú desplegable <strong>servidor MCP</strong> en la parte superior de la página Herramientas y selecciona <strong>Copiar URL del servidor MCP.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc153c2caa27e949b/6a170634a292997793d00f6d/6cde0de678bb6f81bef8a59deffb110ad6c6ce26-1600x882.jpg" alt="" /><p>Pega la <strong>URL del servidor MCP</strong> en el <em>archivo .env</em> como reemplazo para el valor de marcador de posición <strong>&lt;YOUR-ELASTIC-AGENT-BUILDER-URL&gt; </strong>. Ahora necesitamos hacer una actualización a la URL, es decir, reemplazar el texto final “mcp” con “a2a” porque el <a href="https://a2a-protocol.org/">protocolo A2A</a> es lo que usará el Agent Strands SDK para comunicarse con el agente que se ejecuta en Elastic Agent Builder.</p><p>La URL editada debería verse así:</p>https://rps-game-project-12345a.kb.us-east-1.aws.elastic.cloud/api/agent_builder/a2a<p>El otro valor que necesitamos obtener mientras estamos aquí en Elastic Cloud es una clave API. Haz clic en <strong>Elasticsearch en </strong>el menú de navegación superior.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltada5de819f31d8ff/6a170635b339d55ae9769efc/651676b9be65178cdad50b5d24f26441c0bf3f97-1600x549.jpg" alt="" /><p>Haz clic en el <strong>botón Copiar clave API </strong>para copiar la clave API.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta18f85790df00706/6a170637cf4f257145b2d0bd/17f1e2ed5c7682630c71e75b0b09ffb1d9036210-1600x879.jpg" alt="" /><p>Ahora, de vuelta en Visual Studio Code, pega la clave API en el archivo <em>.env</em> para reemplazar el texto del marcador de posición <strong>&lt;YOUR-ELASTIC-API-KEY&gt; </strong>. Tu archivo <em>.env</em> debería verse algo así:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt92ab4b37cdcca85e/6a1706386f7f0472ed914747/a357947e07f29c8c03382e00c7baedf04a399297-1600x286.jpg" alt="" /><h2>Ejecuta la app de ejemplo</h2><p>Abre una nueva terminal en Visual Studio Code.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8702d826849755d0/6a17063a60084b45ca3c44a2/33e1174c68ea1ed47c7fe62ab6a6da657c606f56-1413x711.jpg" alt="" /><p>Empieza ejecutando el siguiente comando <em>cd</em> en la terminal:</p>cd elasticsearch-labs/supporting-blog-content/agent-builder-a2a-strands-agents<p>Ejecuta el siguiente comando para crear un entorno virtual en Python.</p>python -m venv .venv<p>Dependiendo del sistema operativo de tu computadora local, ejecuta el siguiente comando para activar el entorno virtual.</p><ul><li><p>MacOS/Linux</p></li></ul>source .venv/bin/activate<ul><li><p>Windows</p></li></ul>.venv\Scripts\activate<p>La app de ejemplo utiliza Strands Agents SDK, y ahora nos encontramos en el punto de este tutorial en el que debes instalarlo. Ejecuta el siguiente comando para instalar el SDK de Strands Agents junto con todas tus dependencias requeridas de la biblioteca de Python.</p>pip install -r requirements.txt<p>Es hora de limpiar la plataforma de lanzamiento y comenzar la cuenta regresiva. Estamos listos para lanzar esta app. Retírate. Vamos a ejecutarla usando el siguiente comando:</p>python elastic_agent_builder_a2a_rps+.py<p>Deberías desafiarte con un juego de RPS+. ¡Bien hecho y mucha suerte!</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbb3715672995fcfa/6a17063c6234e07b76db195f/041df81fbf1776f09e1243af0a435c4c0af6aca1-1600x948.gif" alt="" /><h2>Crea tus apps de IA con contexto relevante</h2><p>Crear un agente con IA es ahora una habilidad en tu caja de herramientas. Y has visto lo fácil que es usar agentes de Elastic Agent Builder a través de A2A en marcos de trabajo de agentes como Strands Agents SDK. <a href="https://cloud.elastic.co/registration?utm_source=agentic-ai-category&amp;utm_medium=search-labs&amp;utm_campaign=agent-builder">Prueba Elastic</a> para crear agentes de IA conectados al contexto relevante en tus datos personalizados.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/agent-builder-a2a-strands-agents-guide</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/agent-builder-a2a-strands-agents-guide</guid>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[AI agéntica]]></category>
    <dc:creator><![CDATA[Jonathan Simon]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3472edce39ec0b81/6a17060e66c4f93c17f8bf57/31b6a5c1c30dacbb4d5e58d1c566071e7143a0c8-1600x879.gif" length="0" type="image/gif"/>
    <pubDate>Mon, 15 Dec 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Uso de Azure LLM Functions con Elasticsearch para experiencias de consulta más inteligentes]]></title>
    <description><![CDATA[Explora un ejemplo de aplicación de búsqueda inmobiliaria que emplea Azure Gen AI LLM Functions con Elasticsearch para ofrecer resultados híbridos flexibles. Consulta paso a paso cómo configurar y ejecutar la aplicación de ejemplo en GitHub Codespaces.]]></description>
    <content:encoded><![CDATA[<p>Precisión. Cuando importa, importa mucho. Cuando buscas algo específico, la precisión es muy importante. Sin embargo, a veces una consulta demasiado precisa no devuelve resultados, por lo que es ventajoso tener la flexibilidad de ampliar el ámbito de una consulta para encontrar datos adicionales potencialmente relevantes.</p><p>En esta entrada de blog se explica el uso de Elasticsearch y Azure Open AI para crear una aplicación de ejemplo que demuestre cómo encontrar resultados exactos al buscar propiedades inmobiliarias muy específicas y, al mismo tiempo, proporcionar resultados relevantes cuando una coincidencia específica no está disponible. Te guiaremos por todos los pasos necesarios para crear un índice de Elasticsearch junto con una plantilla de búsqueda. Luego, expondremos todo el proceso de cómo crear una aplicación que use Azure OpenAI para tomar consultas de usuarios y transformarlas en consultas de plantillas de búsqueda de Elasticsearch que pueden producir resultados increíblemente personalizados.</p><p>Aquí hay una lista de todos los recursos que usaremos para crear nuestra aplicación de búsqueda de bienes raíces de ejemplo:</p><ul><li><p>Índice y plantilla de búsqueda de Elasticsearch</p></li><li><p>Azure OpenAI</p></li><li><p>Azure Maps API</p></li><li><p><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb">Codespaces Jupyter Notebook</a></p></li><li><p>Núcleo semántico</p></li><li><p>Aplicación de C# con front-end de Blazor</p></li></ul><h2>Flujo de trabajo de consulta inteligente</h2><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0461b58012efd772/6a17f73fa292997d52d02e19/0c4a7c835e06c514f158c00ab1055a7ba719a35f-1600x765.png" alt="Flujo de trabajo de consulta inteligente" /><p>Este flujo de trabajo combina LLM, herramientas de LLM y búsqueda para transformar las consultas en lenguaje natural en resultados de búsqueda estructurados y relevantes:</p><ul><li><p><strong>LLM (Large Language Model):</strong> interpreta consultas complejas de usuarios y organiza herramientas para extraer la intención de búsqueda y enriquecer el contexto.</p></li><li><p><strong>Herramientas LLM</strong> : cada herramienta LLM es un programa de C # que creamos para esta publicación. Hay tres herramientas:</p><ul><li><p><em>Herramienta de extracción de parámetros</em>: extrae atributos clave como dormitorios, baños, características y precio de la consulta.</p></li><li><p><em>Herramienta GeoCode</em>: convierte los nombres de ubicación en latitud/longitud para el filtrado espacial.</p></li><li><p><em>Herramienta de búsqueda</em>: completa una plantilla de búsqueda de Elasticsearch con parámetros de consulta y ejecuta una búsqueda. <strong>Búsqueda híbrida</strong> : ejecuta la búsqueda híbrida (texto completo + vector denso) con inferencia de ML integrada. Este enfoque por capas garantiza experiencias de consulta más inteligentes y sensibles al contexto para el usuario final.</p></li></ul></li></ul><h2>Arquitectura de la aplicación</h2><p>Este es un diagrama de arquitectura del sistema de la aplicación de ejemplo. Usaremos un bloc de notas de Codespaces Jupyter para interactuar con Elastic Cloud.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7617ae80295a3e2b/6a17f74196142a35deeb1cb0/2880afee184cd9270c0eb4310e51418e2339784d-936x452.png" alt="Diagrama de arquitectura del sistema de una aplicación Azure LLM Functions." /><h2>Prerrequisitos</h2><p>Solo necesitarás tu navegador, ya que usaremos GitHub Codespaces para clonar la aplicación de ejemplo, configurarla y ejecutarla. Para la parte de Elastic de la solución, usaremos Elastic Cloud para crear un proyecto de Elasticsearch Serverless. Usaremos <a href="https://portal.azure.com/">Azure Portal</a> para trabajar con recursos de Azure.</p><h2>Clonación de repositorio de aplicación de ejemplo en Codespaces</h2><p>Comience clonando el código de la aplicación de ejemplo. Puede hacerlo en <a href="https://github.com/codespaces/">GitHub Codespaces</a>, que proporciona una manera de clonar y ejecutar aplicaciones. Haga clic en <strong>Nuevo codespace.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd4ed9c67e2d79c41/6a17f7436df73146a20a10bc/b89cbec491659b6c8a0bb9551ed2629f7a37f9fd-1600x427.png" alt="Clonando un repositorio de aplicación de ejemplo en Codespaces." /><p>A continuación, seleccione el repositorio <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo">jwilliams-elastic/msbuild-intelligent-query-demo</a> en la lista desplegable <strong>Repositorio</strong> y haga clic en <strong>Crear codespace</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltdfcc992a6cb7a7d7/6a17f7450b0bed67c1dd3750/43ea377554527af9578400f16cd2342bf8fff3a2-1600x1049.png" alt="Desplegable del repositorio y clic en Crear espacio de código." /><h2>Crear .env archivo</h2><p>Usaremos un cuaderno de Python Jupyter para acceder e interactuar con Elastic Cloud y lo hace empleando los valores de configuración que se almacenan en un archivo de configuración. El archivo de configuración del Notebook debe tener el nombre de archivo <em><strong>.env</strong></em> y lo crearás ahora.</p><ol><li><p>En GitHub Codespaces, haga clic en el botón <strong>Nuevo archivo </strong>y agregue un archivo denominado <em><strong>.env</strong></em></p></li><li><p>Agregue el siguiente contenido al <em><strong>.env</strong></em> recién creado archivo</p></li></ol>ELASTIC_URL=
ELASTIC_API_KEY=<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1a7dcb2fd2bb24f5/6a17f7462f4a5c21abfa8aa9/84d4f327948858ba61db0001dd8cf780d42fe0a7-1600x875.gif" alt="un Python Jupyter Notebook para acceder e interactuar con Elastic Cloud, y lo hace usando los valores de configuración almacenados en un archivo de configuración. " /><p>Como puede ver, tenemos un par de valores faltantes, <strong>ELASTIC_URL</strong> y <strong>ELASTIC_API_KEY,</strong> que deben agregar al <em>.env</em> archivo. Obtengámoslos ahora creando un proyecto sin servidor de Elasticsearch para que sirva como backend que impulsará la funcionalidad de búsqueda para nuestra aplicación de ejemplo.</p><h2>Crear un proyecto de Elastic Serverless</h2><ol><li><p>Vaya a <a href="http://cloud.elastic.co">cloud.elastic.co</a> y haga clic en <strong>Crear nuevo proyecto sin servidor</strong></p></li><li><p>Haz clic en <strong>Siguiente </strong>para la solución <strong>de Elasticsearch</strong></p></li><li><p>Seleccione <strong>Optimizado para vectores</strong></p></li><li><p>Establezca el <strong>proveedor de nube</strong> para que sea <strong>Azure</strong></p></li><li><p>Haga clic en <strong>Crear proyecto sin servidor</strong></p></li><li><p>Haga clic en <strong>Primeros pasos</strong> en el menú de navegación principal y desplazar hacia abajo para copiar los <strong>detalles de la conexión</strong></p></li><li><p>Haga clic en el botón <strong>Copiar </strong>para copiar el <strong>endpoint de Elasticsearch</strong> desde los detalles de la <strong>conexión</strong></p></li><li><p>Actualizar <em><strong>.env</strong></em> para establecer el <strong>ELASTIC_URL</strong> para que sea el <strong>endpoint de Elasticsearch</strong>copiado</p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt95b7fefa05173822/6a17f748ec0f89f05f5a67c6/77a35e55446d396066b68cfd132d1543a07b81cc-1600x875.gif" alt="Cómo crear un nuevo proyecto Serverless en Elasticsearch." /><h2>Crear una clave de API elástica</h2><ol><li><p>Abra la página <strong>Introducción a</strong> Elasticsearch, haga clic en <strong>Nuevo</strong> en la sección <strong>Agregar una clave de API</strong></p></li><li><p>Ingrese un <strong>nombre</strong>de clave</p></li><li><p>Haga clic en<strong> Crear clave de API</strong></p></li><li><p>Haga clic en el botón Copiar para copiar el valor de la clave de API</p></li><li><p>De vuelta en <strong>Codespaces,</strong> donde tenemos el <em><strong>.env</strong></em>archivo abierto para editar, pegue el valor copiado para establecer el<strong> ELASTIC_API_KEY</strong></p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf6b1c85d267e6ad0/6a17f74a4b055d118143239a/20168cba493d8e2c0d9ae7704eb0ae707df58e4c-1600x875.gif" alt="Cómo crear una clave API elástica." /><h2>Abra el cuaderno de Codespaces e instale las dependencias de la biblioteca</h2><p>En el explorador de archivos, seleccione el archivo <em><strong>VectorDBSetup.ipynb</strong></em> para abrir el cuaderno. Después de que se cargue el Notebook, busque la sección del Notebook <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L40-L52">titulada </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L40-L52"><strong>Instalar bibliotecas</strong></a><strong>. </strong>Haga clic en el botón de reproducción de la sección.</p><p>Si es la primera vez que ejecuta un cuaderno en GitHub Codespaces, se le pedirá que seleccione un kernel de Codespaces y configure el entorno de Python.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt970f4fa30c6c9302/6a17f74c505ac30ee6ad8ceb/2272f70615dfb9dcbeb91f39b6dd5076213e24a5-1600x875.gif" alt="Instalación de dependencias de bibliotecas en el Cuaderno de Codespaces." /><h2>Definición de importaciones y carga de variables de entorno mediante Codespaces Notebook</h2><p>Vaya a la siguiente sección del Notebook <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L58-L104">titulada </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L58-L104"><strong>Definir importaciones y cargar variables de entorno</strong></a>. Haga clic en el botón de reproducción de la sección.</p><p>Este código importa las bibliotecas de Python usadas por el Notebook y carga las variables de entorno del <em>archivo .env </em>que creaste anteriormente.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt6d74b41258420d5a/6a17f74e6317301f2f585c16/aa9f9198ff452ac0c4ce33b00f253731dbee22c5-1600x875.gif" alt="Definiendo importaciones y variables de carga del entorno usando Codespaces Notebook." /><h2>Creación de un punto de enlace de inferencia de Elastic ML mediante Codespaces Notebook</h2><p>Vaya a la siguiente sección del cuaderno <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L112-L157">titulada </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L112-L157"><strong>Crear punto de conexión de inferencia de ML</strong></a>. Haga clic en el botón de reproducción de la sección.</p><p>Esto creará un nuevo punto final de inferencia de ML en el proyecto de Elasticsearch que usaremos para generar incrustaciones de texto a partir de nuestros datos. Las incrustaciones de texto son representaciones vectoriales de texto que se almacenarán en Elasticsearch para potenciar la búsqueda semántica.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt87581300d4d0b66e/6a17f750e9ea875a81a9c795/97c1afab3e64027ee5ae77f377d56ba406ae1765-1600x875.gif" alt="Creando un endpoint de inferencia Elastic ML usando Codespaces Notebook." /><h2>Creación de un índice de Elasticsearch con Codespaces Notebook</h2><p>Ve a la siguiente sección de Notebook <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L165-L224">titulada </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L165-L224"><strong>Crear índice de Elasticsearch</strong></a>. Haga clic en el botón de reproducción de la sección.</p><p>Esto creará el índice de Elasticsearch que almacenará nuestros datos de ejemplo y cualquier dato vectorial asociado generado a través del punto de enlace de inferencia de ML.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta2d2d5a10c84a1b7/6a17f7527f6f15775cc09cd6/23a66283ee41239e24fb8455c3cd95641982ca6b-1600x875.gif" alt="Creando un índice de Elasticsearch usando Codespaces Notebook." /><h2>Crear una plantilla de búsqueda de Elasticsearch con Codespaces Notebook</h2><p>Continúe con la siguiente sección de Notebook <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L232-L384">titulada </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L232-L384"><strong>Plantilla de búsqueda</strong></a>. Haga clic en el botón de reproducción de la sección.</p><p>Esto crea una <a href="https://www.elastic.co/es/docs/solutions/search/search-templates">plantilla de búsqueda</a>, que es lo que nuestra aplicación de ejemplo usará como plantilla rellenada con las palabras analizadas de la consulta de búsqueda de un usuario. Esto nos permite configurar y controlar qué tan específicos somos al consultar datos en el índice de Elasticsearch.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt194d6557d096ac25/6a17f7545772628d901bcda0/4c001a3e4d1cca4cfb5c043fea92c7ccaf9cb64a-1600x875.gif" alt="Creando una plantilla de búsqueda en Elasticsearch usando Codespaces Notebook." /><h2>Ingesta de datos en el índice de Elasticsearch mediante Codespaces Notebook</h2><p>Vaya a la siguiente sección del Notebook <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L392-L450">titulada </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L392-L450"><strong>Ingesta de datos de propiedades</strong></a>. Haga clic en el botón de ejecución de sección.</p><p>Al ejecutar esta sección de código, se cargarán de forma masiva los datos de ejemplo contenidos en el archivo <em>properties.jsonl </em>. Luego de un par de minutos, debería ver una confirmación de que el proceso se completó correctamente. Puedes confirmar que el índice contiene el registro esperado yendo a la sección <strong>Gestión de índices</strong> en Elastic Cloud.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltaf1b5ad59c75716d/6a17f7566864a4528fb6894b/e9698c798541ccfc08143a939846597028e3c566-1600x875.gif" alt="Ingiriendo datos en el índice de Elasticsearch usando Codespaces Notebook." /><h2>Creación de appsetting.json para configurar la aplicación de C#</h2><p>Con nuestro índice de Elasticsearch creado y poblado con datos, ahora estamos listos para configurar la aplicación de ejemplo para que funcione con Elastic y Azure Cloud. La aplicación de ejemplo de C# usa un archivo denominado <em>appsettings.json</em> para almacenar y cargar su información de acceso, como claves API. Creará el archivo <em>appsettings.json</em> ahora usando el editor en Codespaces.</p><p>1. Cree <em>appsettings.json</em> en la carpeta <strong>HomeFinderApp </strong></p><p>2. Pegue el siguiente código en el archivo <em>appsettings.json</em></p>{
 "ElasticSettings": {
   "Url": "",
   "ApiKey": "",
   "IndexName": "properties",
   "TemplateId": "properties-search-template"
 },
 "AzureOpenAISettings": {
   "Endpoint": "",
   "ApiKey": "",
   "DeploymentName": "gpt-4o"
 },
 "AzureMapsSettings": {
   "Url": "https://atlas.microsoft.com/geocode",
   "ApiKey": ""
 },
 "Logging": {
   "LogLevel": {
 	"Default": "Information",
 	"Microsoft.AspNetCore": "Warning"
   }
 },
 "AllowedHosts": "*"
}
<p>3. Busca los valores <strong>de Url</strong> y <strong>ApiKey</strong> en la sección <strong>ElasticSettings </strong>. Establézcalos para que sean los mismos valores que estableció en el <em>archivo .env</em> en un paso anterior.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt28afc316da403ec9/6a17f758faa913584d93ca28/00dad25bacdea2adcbd1e6eca7658867a49b0d8c-1600x875.gif" alt="Creando appsetting.json para configurar la app de C#." /><h2>Creación del servicio Azure OpenAI</h2><p>Nuestra aplicación de ejemplo usará Azure OpenAI para analizar la consulta del usuario de la aplicación y, a continuación, enviará una solicitud a Elasticsearch rellenando la plantilla de búsqueda para intentar comunicar de forma flexible lo que busca el usuario.</p><ol><li><p>Abra una nueva pestaña del navegador y vaya a <a href="https://portal.azure.com/#blade/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/OpenAI">AI Foundry | Azure OpenAI</a> en Azure Portal. Haga clic en +<strong>Crear</strong></p></li><li><p>En el formulario de creación, elija un <strong>grupo de recursos</strong>.</p></li><li><p>Ingrese un <strong>nombre</strong></p></li><li><p>Elija un <strong>plan de tarifa</strong></p></li><li><p>Haga clic en <strong>Siguiente</strong></p></li><li><p>En la pestaña <strong>Red</strong> , haga clic en<strong> Siguiente</strong></p></li><li><p>En la pestaña <strong>Etiquetas</strong> , haga clic en <strong>Siguiente</strong></p></li><li><p>En la pestaña <strong>Revisar y enviar</strong> , haga clic en <strong>Crear</strong></p></li><li><p>Una vez completada la creación, haga clic en <strong>Ir al recurso</strong></p></li><li><p>Seleccione <strong>Claves y punto de conexión</strong> en el menú de navegación izquierdo</p></li><li><p>Copie el <strong>punto de conexión</strong> y péguelo en el archivo <em>appsettings.json</em> que creó en la pestaña del navegador que tiene abierto el editor de Codespaces.</p></li><li><p>A continuación, vuelva a la pestaña del explorador que contiene la clave de Azure OpenAI <strong>y la página del punto de conexión</strong>. Haga clic en el botón de copia de la <strong>clave 1</strong> y pegue el valor copiado en el archivo <em>appsettings.json</em> , de nuevo en la pestaña del navegador que tiene abierto el editor de Codespaces.</p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd01a5e82d9003d02/6a17f75a148009be65b48904/6d49197302d110410dca0a53b6ae90237cf2dfd6-1600x875.gif" alt="Creando un servicio Azure OpenAI." /><h2>Adición de la implementación del modelo gpt-4o al servicio Azure Open AI</h2><p>Genial, ahora tenemos un servicio Azure OpenAI en ejecución, pero aún necesita una implementación de modelo para brindarnos las funcionalidades de LLM que requiere nuestra aplicación de ejemplo. Hay un montón de modelos para elegir. Implementemos <em>gpt-4o</em> ya que ya está especificado en el archivo <em>appsettings.json</em> que creó.</p><p></p><ol><li><p>Vaya a <a href="https://ai.azure.com/resource/playground">Azure AI Foundry</a> y haga clic en <strong>Crear una implementación</strong></p></li><li><p>Busque <em>gpt-4o</em> y selecciónelo de los resultados</p></li><li><p>Haga clic en <strong>Confirmar</strong> para seleccionarlo</p></li><li><p>Haga clic en <strong>Implementar</strong> para implementar el modelo</p></li></ol><p>Una vez que implementó correctamente el modelo <em>gpt-4o, puede</em> <strong>seleccionar Implementaciones</strong> en el menú de navegación izquierdo y confirmar que la implementación <em><strong>de gpt-4o</strong></em> aparece con un <strong>estado</strong> correcto.
</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte82341dd8a4982b0/6a17f75c4b055d9e0943239e/1b817ab67c05634e9c72777593b4d1a2c6c28191-1600x875.gif" alt="Agregando un despliegue de modelo gpt-4o al servicio Azure Open AI." /><h2>Creación de una cuenta de Azure Maps</h2><p>Queremos que los usuarios de nuestra aplicación de ejemplo puedan buscar propiedades inmobiliarias en áreas específicas, pero sin tener que ser demasiado específicos. Si alguien quiere buscar una propiedad cerca del mercado de agricultores local, Azure Maps es un servicio que OpenAI LLM puede usar para obtener coordenadas de latitud y longitud para el mercado. Luego, las coordenadas se pueden incluir en las solicitudes basadas en plantillas de búsqueda enviadas a Elasticsearch para consultas de usuarios que incluyen ubicaciones específicas y consideraciones de distancia geográfica.</p><ol><li><p>Haga clic en <strong>Crear</strong> en <a href="https://portal.azure.com/#browse/Microsoft.Maps%2Faccounts">cuentas de Azure Maps</a></p></li><li><p>Seleccionar un <strong>grupo de recursos</strong></p></li><li><p>Ingrese un <strong>nombre</strong></p></li><li><p>Aceptar la declaración de licencia y privacidad</p></li><li><p>Haz clic en <strong>Revisar y crear</strong></p></li><li><p>Haga clic en <strong>Crear</strong></p></li><li><p>Una vez completada la creación de la cuenta, haga clic en <strong>Ir al recurso</strong></p></li><li><p>Haga clic en <strong>Autenticación</strong> en el menú de navegación izquierdo</p></li><li><p>Copie el valor de la <strong>clave principal</strong> y péguelo para que sea el valor de <strong>ApiKey</strong> en la sección <strong>AzureMapsSettings</strong> del archivo <em>appsettings.json</em> , de nuevo en la pestaña del explorador que contiene el editor de Codespaces</p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt42a4ab4bb7a96d24/6a17f75edbb4ff4f91fb5892/90fadd48e366682e2bad91e32988f93c6354e126-1600x875.gif" alt="Creando una cuenta de Azure Maps." /><h2>Prueba la aplicación de ejemplo</h2><p>Ahora viene la parte divertida. Es hora de ejecutar la aplicación de ejemplo. Tenemos todos los detalles de configuración en su lugar junto con los recursos de Elastic Cloud y Azure Cloud que necesitamos para impulsar la aplicación.</p><p>1. Abra una ventana de Terminal en el editor de Codespaces.</p><p>2. Emplee el siguiente comando para cambiar el directorio activo para que sea la carpeta de la aplicación de ejemplo.
</p>cd HomeFinderApp<p>3. Use el siguiente comando <em>dotnet</em> para ejecutar la aplicación.</p>dotnet run<p>4. Haga clic en el botón <strong>Abrir en el navegador </strong>cuando aparezca.</p><p>5. Pruebe la búsqueda predeterminada y luego pruebe algunas de sus propias búsquedas personalizadas. Si desea ver más detalles sobre lo que se realiza en el backend para generar los resultados de búsqueda, puede hacer clic en el enlace <strong>Mostrar </strong>junto a <strong>Invocaciones de herramientas.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt41adf6631ba91be1/6a17f760505ac30986ad8cf1/821fe7b9446de5ed646d938cc9484a7ddad21030-1600x875.gif" alt="Probando la app de ejemplo." /><p><strong>Sobresueldo: </strong>Si realmente desea probar GPT-4o, intente la siguiente búsqueda: <em>Estoy buscando una propiedad cerca de disney world fl con 30+ habitaciones y 20+ baños y una piscina y garaje y cerca de la playa por menos de 200K. </em>Esta consulta devolverá resultados luego de varias invocaciones de herramientas de búsqueda.</p><h2>Elastic es tu solución para la IA de búsqueda</h2><p>La aplicación en ejecución es un ejemplo de búsqueda guiada de Gen AI LLM empleando Elasticsearch a través de plantillas de búsqueda como fuente de datos de base. Sentir libre de experimentar y personalizar la aplicación de ejemplo para crear una experiencia de búsqueda que sea precisa pero flexible, para ayudar a sus usuarios a encontrar lo que buscan.</p><p>Gracias por leer. Prueba <a href="https://cloud.elastic.co/registration">Elastic Cloud</a> .</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/azure-llm-functions-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/azure-llm-functions-elasticsearch</guid>
    <category><![CDATA[AI]]></category>
    <dc:creator><![CDATA[Jonathan Simon,James Williams]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt93dd59caccfd7fc8/6a17f7614202292a7129f799/1431b90c7e00de06574c1e33c44a2e89296c824e-1200x628.png" length="0" type="image/png"/>
    <pubDate>Fri, 13 Jun 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>