<?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/pt/search-labs/author/jonathan-simon</link>
    </image>
    <link>https://www.elastic.co/pt/search-labs/author/jonathan-simon</link>
    <atom:link href="https://www.elastic.co/pt/search-labs/rss/author/jonathan-simon.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[pt]]></language>
    <lastBuildDate>Fri, 16 Oct 2026 23:10:09 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Introdução ao Elastic Agent Builder e Strands Agents SDK]]></title>
    <description><![CDATA[Aprenda a criar um agente com o Elastic Agent Builder e explore como usar o agente via protocolo A2A orquestrado com o Strands Agents SDK.]]></description>
    <content:encoded><![CDATA[<p>Você tem uma ideia para um agente de IA? Provavelmente isso envolve fazer algo com os dados, porque se um agente for iniciar uma ação útil, ele precisa tomar uma decisão e precisa dos dados certos para tomar a decisão certa.</p><p>O Elastic Agent Builder facilita a criação de agentes de IA conectados a dados. Mostraremos como fazer isso neste post do blog. Vamos passar por todos os passos necessários para criar um agente com uma ferramenta MCP que acesse os dados armazenados no Elastic. Depois, usaremos o Strands Agents SDK e os recursos Agent2Agent (A2A) para operar o agente. O <a href="https://strandsagents.com/">Strands Agents SDK</a> é uma plataforma de desenvolvimento de IA multiagente que você pode usar para criar apps agentes com código suficiente para garantir o resultado desejado.</p><p>Vamos construir um agente de IA que jogue RPS+, uma versão do clássico jogo Pedra, Papel e Tesoura com um diferencial: oferece aos jogadores algumas opções extras.</p><h2>Pré-requisitos</h2><p>Aqui está o que é necessário para seguir as etapas deste post do blog:</p><ul><li><p>Um editor de texto rodando no seu computador local</p><ul><li><p><a href="https://code.visualstudio.com/download">Visual Studio Code</a> é o que usaremos para as instruções de exemplo neste post do blog</p></li></ul></li><li><p><a href="https://www.python.org/downloads/">Python 3.10 ou superior</a> rodando no seu computador local</p></li></ul><h2>Crie um projeto serverless</h2><p>A primeira coisa de que precisamos é de um projeto Elasticsearch Serverless, que inclua o Elastic Agent Builder.</p><p>Acesse <a href="http://cloud.elastic.co/">cloud.elastic.co</a> e crie um novo projeto Elasticsearch Serverless.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3472edce39ec0b81/6a17060e66c4f93c17f8bf57/31b6a5c1c30dacbb4d5e58d1c566071e7143a0c8-1600x879.gif" alt="" /><h2>Crie um índice e adicione dados</h2><p>Em seguida, adicionaremos alguns dados ao nosso projeto Elasticsearch. Abra as Ferramentas de desenvolvedor, onde podemos executar comandos para criar um novo índice e inserir alguns dados. Selecione Ferramentas de desenvolvedor no menu de navegação de nível superior.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltaedaa94068c07a17/6a17060f961e697558c4ce5f/f97d5af077504463155655a9e27c171a7f974f71-1600x879.jpg" alt="" /><p>Copie e cole o seguinte comando PUT na área de entrada de solicitações do console Ferramentas de desenvolvedor. Essa declaração cria um índice Elasticsearch chamado "game-docs".</p>PUT /game-docs
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "content": { 
        "type": "text"
      },
      "filename": { "type": "keyword" },
      "last_modified": { "type": "date" }
    }
  }
}<p>Clique no botão <strong>Enviar solicitação</strong> que aparece no lado direito da declaração em Ferramentas de desenvolvedor. Você deve ver uma notificação confirmando que o índice <em>game-docs</em> foi criado na área de resposta das Ferramentas de desenvolvedor.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt430c357b479d93af/6a170611a6c2b98191e79624/be0555a1930e4d4f58b7ed8b669c9b702532ed17-1600x880.jpg" alt="" /><p>Um índice chamado <em>game-docs</em> é um ótimo lugar para armazenar os dados do jogo que estamos criando. Vamos colocar um documento chamado <em>rps+-md</em> nesse índice que contém todos os dados que nosso jogo requer. Copie e cole o seguinte comando PUT no console Ferramentas de desenvolvedor.</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>Clique no botão <strong>Enviar solicitação</strong> ao lado da declaração para executá-la e adicionar o documento <em>rps+-md</em> ao índice game-docs.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt64d49e13754d5b25/6a17061214b270524be3c55d/3c01d8a4602de5c33337457591a388a4a4e3fad3-1600x879.jpg" alt="" /><p>Agora devemos ter alguns dados para consultar e, com o Agent Builder, isso está mais simples do que nunca.</p><p>Selecione <strong>Agentes</strong> no menu de navegação principal.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb4d374bf2ba9135c/6a1706147d8d67468570e63e/82dbd2e9a439cabd5a5eea3d0ce005b87df0c3ea-1600x879.jpg" alt="" /><p>Agora, é preciso perguntar ao Elastic AI Agent padrão: "Quais dados eu tenho?"</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc0f879cf28772718/6a1706161949f7f25ee7a92d/f7a2f39c9d1486bdf02d9e88a732b540ac2e2cd1-1600x872.gif" alt="" /><p>O Elastic AI Agent avalia os dados e retorna uma explicação concisa sobre os dados que possuímos.</p><h2>Crie uma ferramenta</h2><p>Ok, agora temos alguns dados no Elastic, vamos utilizá-los. O Agent Builder inclui suporte integrado para criar ferramentas <a href="https://modelcontextprotocol.io/">MCP</a> que ajudam os agentes a acessar os dados necessários para ter o contexto correto para a tarefa. Vamos criar uma ferramenta simples que recupere os dados do nosso jogo.</p><p>Clique no menu de ações do Agent Builder.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7802a6b94e81440c/6a170618ab7f085287db9db4/0e327c202674dda33bcc0e494d2b588fa8b32e4f-1600x879.png" alt="" /><p>Selecione <strong>Ver todas as ferramentas </strong>nas opções do menu.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9f52ffe114fb6ea7/6a17061a4a531b801b36a884/1ebf58650e9fb56750d3f0b1700fab50b44f9bdf-1600x879.png" alt="" /><p>Clique <strong>+ Nova Ferramenta.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8090769f6c4d1899/6a17061c286714294093e219/6c03a7f28b99ac2d805f34f39948979893316a00-1600x879.png" alt="" /><p>No formulário <strong>Criar Ferramenta</strong>, selecione <a href="https://www.elastic.co/docs/explore-analyze/query-filter/languages/esql"><strong>ES|QL.</strong></a>Selecione a ferramenta <strong>Tipo</strong> e insira os valores a seguir.</p><p>Para o <strong>ID da Ferramenta</strong>:</p>example.get_game_docs<p>Para <strong>Descrição</strong>:</p>Get RPS+ doc from Elasticsearch game-docs index.<p>Para <strong>Configuração, </strong>insira a seguinte consulta na área de texto <strong>Mecanismo de consulta ES|QL: </strong></p>FROM game-docs | WHERE filename == "RPS+.md"<p>O formulário <strong>Criar ferramenta</strong> que você preencheu deve ter esta aparência: Clique em <strong>Salvar</strong> para criar a ferramenta.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt77034c305198217a/6a17061e66c4f9e54ef8bf5e/b6c93e344600f319b9d2c3030020cf2d171ac1c4-1600x1312.png" alt="" /><p>Temos uma ferramenta nova no suporte de ferramentas. As ferramentas não devem ficar num suporte; elas devem ser usadas. Vamos criar um agente que possa usar nossa nova ferramenta personalizada.</p><h2>Crie um agente e atribua uma ferramenta a ele.</h2><p>Criar um agente é muito simples com o Agent Builder. Você só precisa digitar as instruções do agente com alguns detalhes. Vamos criar um agente agora.</p><p>Clique no botão <strong>Gerenciar agentes.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltaa8a83fc2f3758a9/6a1706201949f71a10e7a931/53934b93db07187e251d4b321cb9ca647e2fd51b-1600x858.png" alt="" /><p>Clique<strong> + Novo agente.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3778403c5101a000/6a17062160084be12f3c449e/fae3ad8f31e71a6dfd044e1daa025a4e280b4e68-1600x490.png" alt="" /><p>Insira as informações a seguir no formulário <strong>Novo Agente</strong>.</p><p>Para o <strong>ID do Agente, </strong>insira o texto abaixo:</p>rps_plus_agent<p>Na área de texto de <strong>Instruções personalizadas, </strong>insira as seguintes instruções:</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 o <strong>Nome de exibição, </strong>insira o texto abaixo:</p>RPS+ Agent<p>Para a <strong>Descrição de exibição, </strong>insira o texto abaixo:</p>An agent that plays the game RPS+<p>Dê ao agente a ferramenta personalizada que criamos anteriormente, clicando na guia <strong>Ferramentas</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte5b0fe00abdde07c/6a17062314b2704bc4e3c563/1778f64bc3a1b4004998dc3668ef7f666788e193-1600x1390.png" alt="" /><p>Selecione somente a ferramenta <em>example.get_game_docs</em> que criamos anteriormente.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2210212e07e06104/6a170625a929cf3277ae08d1/7d734cd80161bcc058817482eb330ffcf1cb567b-1600x1363.png" alt="" /><p>Clique em <strong>Salvar</strong> para criar o novo agente.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt6e3afc1918e26f14/6a170627ab7f084746db9db8/c0014faf605ce50c03679ed0d073bd9f3ae7234d-1600x468.png" alt="" /><p>Vamos testar nosso novo agente. Há um link prático para iniciar um bate-papo com qualquer agente da lista de agentes.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blteb4b69dc5971d3a0/6a1706286f7f046840914743/b7d6943ad90a4f68691207caf66b81742e712145-1600x560.png" alt="" /><p>Basta digitar “iniciar jogo” e o jogo começará. Funciona!</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte5b621d602223dff/6a17062ab339d568a1769ef8/984d008e4cc3f08cc1f101720673b0f7347c066c-1600x874.gif" alt="" /><p>O agente exibe a escolha de objeto de jogo na parte superior da resposta. Isso é útil porque podemos ver a escolha do agente e confirmar que o jogo está funcionando conforme o esperado. No entanto, saber a escolha do oponente antes de escolher não torna o jogo de Pedra, Papel e Tesoura muito divertido. Para aperfeiçoar e aprimorar o jogo até a forma final, podemos usar uma plataforma de orquestração de agentes que pode controlar agentes com código.</p><p>Agora é a hora do Strands Agents SDK.</p><h2>Strands Agents SDK</h2><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt73901ec745a97fbf/6a17062c964cea23c808bab3/c195bba6ff2754f5d8fda174a0c1d247bc283710-456x156.png" alt="" /><p>Se você tem curiosidade em experimentar novas estruturas de desenvolvimento de agentes, então vale a pena dar uma chance ao <a href="https://strandsagents.com/latest/">Strands Agents SDK</a>. O <a href="https://aws.amazon.com/blogs/opensource/introducing-strands-agents-an-open-source-ai-agents-sdk/">Strands Agents SDK foi lançado pela AWS (maio de 2025)</a> como uma implementação open source <a href="https://github.com/strands-agents/sdk-python">em Python</a>, e agora também existe uma versão <a href="https://dev.to/aws/strands-agents-now-speaks-typescript-a-side-by-side-guide-12b3">em Typescript</a>.</p><h2>Começando com o Strands Agents SDK em Python</h2><p>Preparem seus motores de programação, pois agora vamos percorrer o processo de clonagem e execução de um aplicativo de exemplo que usa Strands Agents para controlar o <em>agente RPS+</em> por meio do protocolo A2A. Vamos criar uma versão aperfeiçoada do jogo RPS+ para que a escolha do agente seja revelada depois que você fizer a sua escolha, pois, afinal, é a adivinhação e o resultado surpreendente que tornam divertidos jogos como o Pedra, Papel e Tesoura.</p><p>No seu computador local, abra o <a href="https://code.visualstudio.com/download">Visual Studio Code</a> e abra um novo terminal.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3de752025d62993f/6a17062d0c4857f16501a997/2339cc37c89a3524f2b2a21684bc61dae958e1cf-915x460.jpg" alt="" /><p>No terminal recém-aberto, execute o seguinte comando para clonar o repositório Elasticsearch Labs:</p>git clone https://github.com/elastic/elasticsearch-labs<p>Execute o seguinte <em>cd </em>comando para alterar o diretório para o diretório elasticsearch-labs:</p>cd elasticsearch-labs<p>Em seguida, execute o seguinte comando para abrir o repositório no Visual Studio Code:</p>code .<p>No Visual Studio File Explorer, expanda as pastas <em>contenting-blog-content</em> e <em>agent-builder-a2a-strands-agents</em> e abra o arquivo <em>elastic_agent_builder_a2a_rps+.py.</em> Veja a aparência do arquivo aberto no Visual Studio Code:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt65ef8036a70bcaf1/6a17062f1949f7af36e7a935/d153b19e0e016c701576edb99ccab5af7c554f34-1484x1530.jpg" alt="" /><p>Aqui está o conteúdo de <em>elastic_agent_builder_a2a_rps+.py </em>que você deve ver no seu 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>Vamos revisar o que está acontecendo nesse código. Começando pelo método <em><code>main()</code></em>, o código começa acessando as variáveis de ambiente para a URL do agente e a Chave da API. Depois, usamos esses valores para criar um <em><code>httpx</code></em><code> client</code> que podemos usar para obter o cartão de agente para o agente. O cliente então usa os detalhes do cartão do agente para enviar uma solicitação "iniciar jogo" ao agente. Uma coisa interessante a notar aqui é que incluímos um valor <code>random_game_object</code> como parte do pedido <code>"start game"</code>. Esse valor é um número aleatório gerado com o módulo <em>aleatório</em> da biblioteca padrão do Python. A razão para fazer isso é que os poderosos LLMs (que possibilitam agentes de IA) não são bons em aleatoriedade. Não tema, Python vem pra salvar.</p><p>Continuando com o código, quando o agente responde à solicitação "iniciar jogo", o código remove a seleção de objeto de jogo do agente e a salva na variável <em>agent_choice</em>. O restante da resposta é exibido como texto para o usuário final. Em seguida, o usuário é solicitado a fornecer a entrada da sua escolha de objeto de jogo, que é enviada ao agente. O código então exibe a escolha do objeto de jogo do agente junto com a determinação final do agente sobre o resultado do jogo.</p><h2>Definindo a URL do seu agente e a chave de API como variáveis de ambiente</h2><p>Como o app de exemplo estará rodando no seu computador local, para nos comunicarmos com nosso agente Agent Builder, precisamos fornecer ao Strands Agents SDK uma URL A2A e uma chave API para o agente. O exemplo de app usa um arquivo chamado <em>.env</em> para armazenar esses valores.</p><p>Faça uma cópia do <em>arquivo env.example</em> e nomeie o novo arquivo como <em>.env</em></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta17961cbcb42985c/6a170631b0367dc5a072bc55/25ead5f15a17dedb777132a082097cffb06cae4d-1600x843.jpg" alt="" /><p>Volte para o Elastic Agent Builder, onde podemos obter os dois valores que precisamos.</p><p>Selecione <strong>Exibir todas as ferramentas</strong> no menu de ação do Agent Builder no canto superior direito da página.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt140885d7ebfcb969/6a1706327d8d67b17670e646/9c4f4e4a3bd76e11e0a182fa007a2f6aec7777b4-1600x880.jpg" alt="" /><p>Clique no menu suspenso <strong>Servidor MCP</strong> na parte superior da página Ferramentas e selecione <strong>Copiar URL do Servidor MCP.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc153c2caa27e949b/6a170634a292997793d00f6d/6cde0de678bb6f81bef8a59deffb110ad6c6ce26-1600x882.jpg" alt="" /><p>Cole o <strong>URL do servidor MCP</strong> no arquivo <em>.env</em> como um substituto para o valor do espaço reservado <strong>&lt;YOUR-ELASTIC-AGENT-BUILDER-URL&gt; </strong>. Agora precisamos fazer uma atualização no URL, ou seja, substituir o texto final “mcp” por “a2a”, pois o <a href="https://a2a-protocol.org/">protocolo A2A</a> é o que o Agent Strands SDK usará para se comunicar com o agente em execução no Elastic Agent Builder.</p><p>A URL editada deve ficar assim:</p>https://rps-game-project-12345a.kb.us-east-1.aws.elastic.cloud/api/agent_builder/a2a<p>Outro valor que precisamos obter enquanto estamos aqui no Elastic Cloud é uma chave API. Clique em <strong>Elasticsearch </strong>na navegação de nível superior.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltada5de819f31d8ff/6a170635b339d55ae9769efc/651676b9be65178cdad50b5d24f26441c0bf3f97-1600x549.jpg" alt="" /><p>Clique no <strong>botão Copiar chave API </strong>para copiar a chave API.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta18f85790df00706/6a170637cf4f257145b2d0bd/17f1e2ed5c7682630c71e75b0b09ffb1d9036210-1600x879.jpg" alt="" /><p>Agora, de volta ao Visual Studio Code, cole a chave API no <em>.env</em> para substituir o texto provisório <strong>&lt;YOUR-ELASTIC-API-KEY&gt; </strong>. Seu arquivo <em>.env</em> deve ficar assim:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt92ab4b37cdcca85e/6a1706386f7f0472ed914747/a357947e07f29c8c03382e00c7baedf04a399297-1600x286.jpg" alt="" /><h2>Execute o app de exemplo</h2><p>Abra um novo terminal no Visual Studio Code.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8702d826849755d0/6a17063a60084b45ca3c44a2/33e1174c68ea1ed47c7fe62ab6a6da657c606f56-1413x711.jpg" alt="" /><p>Comece executando o seguinte comando <em>cd</em> no terminal:</p>cd elasticsearch-labs/supporting-blog-content/agent-builder-a2a-strands-agents<p>Execute o seguinte comando para criar um ambiente virtual Python.</p>python -m venv .venv<p>Dependendo do sistema operacional do seu computador local, execute o seguinte comando para ativar o ambiente 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>O app de exemplo usa o Strands Agents SDK e agora estamos no ponto em que precisamos instalá-lo. Execute o seguinte comando para instalar o Strands Agents SDK junto com todas as dependências necessárias da biblioteca Python.</p>pip install -r requirements.txt<p>Hora de liberar a plataforma de lançamento e começar a contagem regressiva. Estamos prontos para executar este app. Afastem-se. Vamos executá-lo usando o seguinte comando:</p>python elastic_agent_builder_a2a_rps+.py<p>Você deve ser desafiado com uma partida de RPS+. Parabéns e boa sorte!</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbb3715672995fcfa/6a17063c6234e07b76db195f/041df81fbf1776f09e1243af0a435c4c0af6aca1-1600x948.gif" alt="" /><h2>Crie seus aplicativos de IA com contexto relevante</h2><p>Construir um Agente de IA agora é uma habilidade disponível na sua caixa de ferramentas. E você já viu como é fácil usar agentes Elastic Agent Builder via A2A em frameworks de desenvolvimento de agentes como o 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">Experimente a Elastic</a> para criar agentes de IA conectados ao contexto relevante em seus dados 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[IA 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[Usando funções do Azure LLM com o Elasticsearch para experiências de consulta mais inteligentes]]></title>
    <description><![CDATA[Explore um exemplo de aplicativo de busca imobiliária que usa as Funções LLM do Azure Gen AI com o Elasticsearch para fornecer resultados de busca híbridos e flexíveis. Veja passo a passo como configurar e executar o aplicativo de exemplo no GitHub Codespaces.]]></description>
    <content:encoded><![CDATA[<p>Precisão. Quando importa, importa muito. Quando você está procurando por algo específico, a precisão é muito importante. No entanto, às vezes uma consulta muito precisa não retorna resultados, por isso é vantajoso ter a flexibilidade de ampliar o escopo de uma consulta para encontrar dados adicionais potencialmente relevantes.</p><p>Esta postagem do blog aborda o uso do Elasticsearch e do Azure Open AI para criar um aplicativo de exemplo que demonstra como encontrar resultados exatos ao pesquisar por propriedades imobiliárias muito específicas, ao mesmo tempo em que fornece resultados relevantes quando uma correspondência específica não está disponível. Percorreremos todas as etapas necessárias para criar um índice do Elasticsearch junto com um modelo de pesquisa. Em seguida, descreveremos todo o processo de como criar um aplicativo que usa o Azure OpenAI para receber consultas de usuários e transformá-las em consultas de modelo de pesquisa do Elasticsearch que podem produzir resultados incrivelmente personalizados.</p><p>Aqui está uma lista de todos os recursos que usaremos para criar nosso aplicativo de exemplo de busca de imóveis:</p><ul><li><p>Índice e modelo de pesquisa do Elasticsearch</p></li><li><p>Azure OpenAI</p></li><li><p>API do Azure Maps</p></li><li><p><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb">Caderno Jupyter de espaços de código</a></p></li><li><p>Kernel Semântico</p></li><li><p>Aplicativo C# com frontend Blazor</p></li></ul><h2>Fluxo de trabalho de consulta inteligente</h2><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0461b58012efd772/6a17f73fa292997d52d02e19/0c4a7c835e06c514f158c00ab1055a7ba719a35f-1600x765.png" alt="Fluxo de trabalho de consulta inteligente" /><p>Este fluxo de trabalho combina LLM, ferramentas LLM e pesquisa para transformar consultas de linguagem natural em resultados de pesquisa estruturados e relevantes:</p><ul><li><p><strong>LLM (Large Language Model)</strong> - Interpreta consultas complexas do usuário e orquestra ferramentas para extrair intenção de pesquisa e enriquecer o contexto.</p></li><li><p><strong>Ferramentas LLM</strong> - Cada ferramenta LLM é um programa em C# que criamos para este post. Existem três ferramentas:</p><ul><li><p><em>Ferramenta de extração de parâmetros</em>: extrai atributos-chave como quartos, banheiros, recursos e preço da consulta.</p></li><li><p><em>Ferramenta GeoCode</em>: converte nomes de locais em latitude/longitude para filtragem espacial.</p></li><li><p><em>Ferramenta de pesquisa</em>: preenche um modelo de pesquisa do Elasticsearch com parâmetros de consulta e executa uma pesquisa. <strong>Pesquisa híbrida</strong> - Executa pesquisa híbrida (texto completo + vetor denso) com inferência de ML integrada. Essa abordagem em camadas garante experiências de consulta mais inteligentes e sensíveis ao contexto para o usuário final.</p></li></ul></li></ul><h2>Arquitetura de aplicação</h2><p>Aqui está um diagrama de arquitetura do sistema do aplicativo de exemplo. Usaremos um Jupyter Notebook do Codespaces para interagir com o Elastic Cloud.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7617ae80295a3e2b/6a17f74196142a35deeb1cb0/2880afee184cd9270c0eb4310e51418e2339784d-936x452.png" alt="Diagrama da arquitetura do sistema de um aplicativo Azure LLM Functions." /><h2>Pré-requisitos</h2><p>Você só precisará do seu navegador, porque usaremos o GitHub Codespaces para clonar o aplicativo de exemplo, configurá-lo e executá-lo. Para a parte elástica da solução, usaremos o Elastic Cloud para criar um projeto Elasticsearch Serverless. Usaremos <a href="https://portal.azure.com/">o Portal do Azure</a> para trabalhar com recursos do Azure.</p><h2>Clonar repositório de aplicativo de exemplo no Codespaces</h2><p>Comece clonando o código do aplicativo de exemplo. Você pode fazer isso no <a href="https://github.com/codespaces/">GitHub Codespaces</a>, que fornece uma maneira de clonar e executar aplicativos. Clique em <strong>Novo Codespace.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd4ed9c67e2d79c41/6a17f7436df73146a20a10bc/b89cbec491659b6c8a0bb9551ed2629f7a37f9fd-1600x427.png" alt="Clonando um repositório de aplicativo de exemplo no Codespaces." /><p>Em seguida, selecione o repositório <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo">jwilliams-elastic/msbuild-intelligent-query-demo</a> no menu suspenso <strong>Repositório</strong> e clique em <strong>Criar Codespace</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltdfcc992a6cb7a7d7/6a17f7450b0bed67c1dd3750/43ea377554527af9578400f16cd2342bf8fff3a2-1600x1049.png" alt="No menu suspenso do repositório, clique em Criar Codespace." /><h2>Criar .env arquivo</h2><p>Usaremos um Python Jupyter Notebook para acessar e interagir com o Elastic Cloud, e ele faz isso usando os valores de configuração armazenados em um arquivo de configuração. O arquivo de configuração do Notebook deve ter o nome de arquivo <em><strong>.env</strong></em> e você irá criá-lo agora.</p><ol><li><p>No GitHub Codespaces, clique no botão <strong>Novo arquivo </strong>e adicione um arquivo chamado <em><strong>.env</strong></em></p></li><li><p>Adicione o seguinte conteúdo ao <em><strong>.env</strong></em> recém-criado arquivo</p></li></ol>ELASTIC_URL=
ELASTIC_API_KEY=<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1a7dcb2fd2bb24f5/6a17f7462f4a5c21abfa8aa9/84d4f327948858ba61db0001dd8cf780d42fe0a7-1600x875.gif" alt="Um notebook Jupyter em Python permite acessar e interagir com o Elastic Cloud, utilizando os valores de configuração armazenados em um arquivo de configuração. " /><p>Como você pode ver, temos alguns valores ausentes, <strong>ELASTIC_URL</strong> e <strong>ELASTIC_API_KEY,</strong> que precisam ser adicionados ao <em>.env</em> arquivo. Vamos fazer isso agora criando um projeto sem servidor Elasticsearch para servir como backend que alimentará a funcionalidade de pesquisa do nosso aplicativo de exemplo.</p><h2>Criar um projeto Elastic Serverless</h2><ol><li><p>Acesse <a href="http://cloud.elastic.co">cloud.elastic.co</a> e clique em <strong>Criar novo projeto sem servidor</strong></p></li><li><p>Clique em <strong>Avançar </strong>para a solução <strong>Elasticsearch</strong></p></li><li><p>Selecione <strong>Otimizado para Vetores</strong></p></li><li><p>Defina o <strong>Provedor de Nuvem</strong> como <strong>Azure</strong></p></li><li><p>Clique em <strong>Criar projeto sem servidor</strong></p></li><li><p>Clique em <strong>Introdução</strong> no menu de navegação principal e role para baixo para copiar os <strong>Detalhes da Conexão</strong></p></li><li><p>Clique no botão <strong>Copiar </strong>para copiar o <strong>Endpoint do Elasticsearch</strong> dos <strong>Detalhes da Conexão</strong></p></li><li><p>Atualizar <em><strong>.env</strong></em> arquivo para definir o <strong>ELASTIC_URL</strong> como o <strong>Elasticsearch Endpoint</strong>copiado</p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt95b7fefa05173822/6a17f748ec0f89f05f5a67c6/77a35e55446d396066b68cfd132d1543a07b81cc-1600x875.gif" alt="Como criar um novo projeto Serverless no Elasticsearch." /><h2>Criar uma chave de API elástica</h2><ol><li><p>Abra a página <strong>Introdução</strong> ao Elasticsearch, clique em <strong>Novo</strong> na seção <strong>Adicionar uma chave de API</strong></p></li><li><p>Digite um <strong>nome</strong>de chave</p></li><li><p>Clique em<strong> Criar chave de API</strong></p></li><li><p>Clique no botão Copiar para copiar o valor da chave da API</p></li><li><p>De volta ao <strong>Codespaces,</strong> onde temos o <em><strong>.env</strong></em>arquivo aberto para edição, cole o valor copiado para definir a<strong> ELASTIC_API_KEY</strong></p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf6b1c85d267e6ad0/6a17f74a4b055d118143239a/20168cba493d8e2c0d9ae7704eb0ae707df58e4c-1600x875.gif" alt="Como criar uma chave de API do Elasticsearch." /><h2>Abra o Codespaces Notebook e instale as dependências da biblioteca</h2><p>No explorador de arquivos, selecione o arquivo <em><strong>VectorDBSetup.ipynb</strong></em> para abrir o Notebook. Após o carregamento do Notebook, localize a <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L40-L52">seção Notebook intitulada </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>Clique no botão de reprodução da seção.</p><p>Se esta for a primeira vez que você executa um Notebook no GitHub Codespaces, você será solicitado a selecionar um Kernel do Codespaces e configurar o ambiente Python.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt970f4fa30c6c9302/6a17f74c505ac30ee6ad8ceb/2272f70615dfb9dcbeb91f39b6dd5076213e24a5-1600x875.gif" alt="Instalando dependências de biblioteca no Notebook do Codespaces." /><h2>Defina importações e carregue variáveis de ambiente usando o Codespaces Notebook</h2><p>Vá para a próxima seção no Notebook <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L58-L104">intitulada </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L58-L104"><strong>Definir importações e carregar variáveis de ambiente</strong></a>. Clique no botão de reprodução da seção.</p><p>Este código importa as bibliotecas Python usadas pelo Notebook e carrega as variáveis de ambiente do <em>.env </em>que você criou anteriormente.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt6d74b41258420d5a/6a17f74e6317301f2f585c16/aa9f9198ff452ac0c4ce33b00f253731dbee22c5-1600x875.gif" alt="Definindo importações e carregando variáveis de ambiente usando o Codespaces Notebook." /><h2>Crie um ponto de extremidade de inferência do Elastic ML usando o Codespaces Notebook</h2><p>Vá para a próxima <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L112-L157">seção do Notebook intitulada </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L112-L157"><strong>Criar ponto de extremidade de inferência de ML</strong></a>. Clique no botão de reprodução da seção.</p><p>Isso criará um novo ponto de extremidade de inferência de ML no projeto Elasticsearch que usaremos para gerar incorporações de texto a partir dos nossos dados. Incorporações de texto são representações vetoriais de texto que serão armazenadas no Elasticsearch para potencializar a pesquisa semântica.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt87581300d4d0b66e/6a17f750e9ea875a81a9c795/97c1afab3e64027ee5ae77f377d56ba406ae1765-1600x875.gif" alt="Criando um endpoint de inferência do Elastic ML usando o Codespaces Notebook." /><h2>Crie um índice Elasticsearch usando o Codespaces Notebook</h2><p>Vá para a próxima <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L165-L224">seção do Notebook intitulada </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L165-L224"><strong>Criar índice do Elasticsearch</strong></a>. Clique no botão de reprodução da seção.</p><p>Isso criará o índice do Elasticsearch que armazenará nossos dados de exemplo e quaisquer dados vetoriais associados gerados por meio do ponto de extremidade de inferência de ML.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta2d2d5a10c84a1b7/6a17f7527f6f15775cc09cd6/23a66283ee41239e24fb8455c3cd95641982ca6b-1600x875.gif" alt="Criando um índice Elasticsearch usando o Codespaces Notebook." /><h2>Crie um modelo de pesquisa Elasticsearch usando o Codespaces Notebook</h2><p>Continue para a próxima <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L232-L384">seção do Notebook intitulada </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L232-L384"><strong>Modelo de Pesquisa</strong></a>. Clique no botão de reprodução da seção.</p><p>Isso cria um <a href="https://www.elastic.co/pt/docs/solutions/search/search-templates">modelo de pesquisa</a>, que é o que nosso aplicativo de exemplo usará como modelo preenchido com as palavras analisadas da consulta de pesquisa de um usuário. Isso nos permite configurar e controlar o quão específicos somos ao consultar dados no índice do Elasticsearch.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt194d6557d096ac25/6a17f7545772628d901bcda0/4c001a3e4d1cca4cfb5c043fea92c7ccaf9cb64a-1600x875.gif" alt="Criando um modelo de pesquisa Elasticsearch usando o Codespaces Notebook." /><h2>Ingerir dados no índice do Elasticsearch usando o Codespaces Notebook</h2><p>Vá para a próxima seção do Notebook <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L392-L450">intitulada </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L392-L450"><strong>Ingerir dados de propriedade</strong></a>. Clique no botão de execução da seção.</p><p>A execução desta seção de código carregará em massa os dados de exemplo contidos no arquivo <em>properties.jsonl </em> . Após alguns minutos, você verá uma confirmação de que o processo foi concluído com sucesso. Você pode confirmar se o índice contém o registro esperado acessando a seção <strong>Gerenciamento de Índice</strong> no Elastic Cloud.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltaf1b5ad59c75716d/6a17f7566864a4528fb6894b/e9698c798541ccfc08143a939846597028e3c566-1600x875.gif" alt="Ingestão de dados no índice do Elasticsearch usando o Codespaces Notebook." /><h2>Crie appsetting.json para configurar o aplicativo C#</h2><p>Com nosso índice do Elasticsearch criado e preenchido com dados, agora estamos prontos para configurar o aplicativo de exemplo para funcionar com o Elastic e o Azure Cloud. O aplicativo de exemplo C# usa um arquivo chamado <em>appsettings.json</em> para armazenar e carregar suas informações de acesso, como chaves de API. Agora você criará o arquivo <em>appsettings.json</em> usando o editor no Codespaces.</p><p>1. Crie <em>appsettings.json</em> na pasta <strong>HomeFinderApp </strong></p><p>2. Cole o seguinte código no arquivo <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. Encontre os valores <strong>Url</strong> e <strong>ApiKey</strong> na seção <strong>ElasticSettings </strong> . Defina-os para os mesmos valores que você definiu no <em>.env</em> arquivo em uma etapa anterior.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt28afc316da403ec9/6a17f758faa913584d93ca28/00dad25bacdea2adcbd1e6eca7658867a49b0d8c-1600x875.gif" alt="Criando o arquivo appsetting.json para configurar o aplicativo C#." /><h2>Criar serviço Azure OpenAI</h2><p>Nosso aplicativo de exemplo usará o Azure OpenAI para analisar a consulta do usuário do aplicativo e, em seguida, enviar uma solicitação ao Elasticsearch preenchendo o modelo de Pesquisa para tentar comunicar de forma flexível o que o usuário está pesquisando.</p><ol><li><p>Abra uma nova aba do navegador e acesse <a href="https://portal.azure.com/#blade/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/OpenAI">AI Foundry | Azure OpenAI</a> no portal do Azure. Clique +<strong>Criar</strong></p></li><li><p>No formulário de criação, escolha um <strong>Grupo de Recursos</strong>.</p></li><li><p>Digite um <strong>nome</strong></p></li><li><p>Escolha um <strong>nível de preço</strong></p></li><li><p>Clique <strong>em Avançar</strong></p></li><li><p>Na guia <strong>Rede</strong> , clique em<strong> Avançar</strong></p></li><li><p>Na aba <strong>Tags</strong> , clique em <strong>Avançar</strong></p></li><li><p>Na guia <strong>Revisar e enviar</strong> , clique em <strong>Criar</strong></p></li><li><p>Após a conclusão da criação, clique em <strong>Ir para o recurso</strong></p></li><li><p>Selecione <strong>Chaves e Ponto de Extremidade</strong> no menu de navegação à esquerda</p></li><li><p>Copie o <strong>Endpoint</strong> e cole-o no arquivo <em>appsettings.json</em> que você criou na aba do seu navegador que tem o editor Codespaces aberto.</p></li><li><p>Em seguida, volte para a aba do navegador que contém a <strong>chave do Azure OpenAI e a página do ponto de extremidade</strong>. Clique no botão copiar para <strong>Chave 1</strong> e cole o valor copiado no arquivo <em>appsettings.json</em> , de volta na aba do seu navegador que tem o editor Codespaces aberto.</p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd01a5e82d9003d02/6a17f75a148009be65b48904/6d49197302d110410dca0a53b6ae90237cf2dfd6-1600x875.gif" alt="Criando um serviço Azure OpenAI." /><h2>Adicionar implantação do modelo gpt-4o ao serviço Azure Open AI</h2><p>Ótimo, agora temos um serviço Azure OpenAI em execução, mas ele ainda precisa de uma implantação de modelo para nos dar os recursos de LLM que nosso aplicativo de exemplo requer. Há uma infinidade de modelos para você escolher. Vamos implantar <em>o gpt-4o,</em> pois ele já está especificado no arquivo <em>appsettings.json</em> que você criou.</p><p></p><ol><li><p>Acesse o <a href="https://ai.azure.com/resource/playground">Azure AI Foundry</a> e clique em <strong>Criar uma implantação</strong></p></li><li><p>Pesquise por <em>gpt-4o</em> e selecione-o nos resultados</p></li><li><p>Clique em <strong>Confirmar</strong> para selecioná-lo</p></li><li><p>Clique em <strong>Implantar</strong> para implantar o modelo</p></li></ol><p>Depois de implantar com sucesso o modelo <em>gpt-4o</em> , você pode selecionar <strong>Implantações</strong> no menu de navegação à esquerda e confirmar se a implantação <em><strong>do gpt-4o</strong></em> está listada com o <strong>Estado</strong> <strong>Succeeded</strong>.
</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte82341dd8a4982b0/6a17f75c4b055d9e0943239e/1b817ab67c05634e9c72777593b4d1a2c6c28191-1600x875.gif" alt="Adicionando uma implantação de modelo gpt-4o ao serviço Azure Open AI." /><h2>Criar conta do Azure Maps</h2><p>Queremos que os usuários do nosso aplicativo de exemplo possam pesquisar propriedades imobiliárias em áreas específicas, mas sem precisar ser muito específicos. Se alguém quiser procurar uma propriedade perto do mercado local de produtores rurais, o Azure Maps é um serviço que o OpenAI LLM pode usar para obter coordenadas de latitude e longitude do mercado. As coordenadas podem então ser incluídas nas solicitações baseadas em modelo de pesquisa enviadas ao Elasticsearch para consultas de usuários que incluem localizações específicas e considerações de distância geográfica.</p><ol><li><p>Clique em <strong>Criar</strong> nas <a href="https://portal.azure.com/#browse/Microsoft.Maps%2Faccounts">contas do Azure Maps</a></p></li><li><p>Selecione um <strong>grupo de recursos</strong></p></li><li><p>Digite um <strong>nome</strong></p></li><li><p>Concordo com a declaração de licença e privacidade</p></li><li><p>Clique em <strong>Revisar e criar</strong></p></li><li><p>Clique em <strong>Criar</strong></p></li><li><p>Após a criação da conta, clique em <strong>Ir para o recurso</strong></p></li><li><p>Clique em <strong>Autenticação</strong> no menu de navegação à esquerda</p></li><li><p>Copie o valor <strong>da Chave Primária</strong> e cole-o para ser o valor da <strong>ApiKey</strong> na seção <strong>AzureMapsSettings</strong> do arquivo <em>appsettings.json</em> , de volta na guia do navegador que contém o editor Codespaces</p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt42a4ab4bb7a96d24/6a17f75edbb4ff4f91fb5892/90fadd48e366682e2bad91e32988f93c6354e126-1600x875.gif" alt="Criar uma conta do Azure Maps." /><h2>Experimente o aplicativo de exemplo</h2><p>Agora vem a parte divertida. É hora de executar o aplicativo de exemplo. Temos todos os detalhes de configuração prontos, juntamente com os recursos do Elastic Cloud e do Azure Cloud necessários para executar o aplicativo.</p><p>1. Abra uma janela do Terminal no editor Codespaces.</p><p>2. Use o seguinte comando para alterar o diretório ativo para ser a pasta do aplicativo de exemplo.
</p>cd HomeFinderApp<p>3. Use o seguinte comando <em>dotnet</em> para executar o aplicativo.</p>dotnet run<p>4. Clique no botão <strong>Abrir no navegador </strong>quando ele aparecer.</p><p>5. Teste a pesquisa padrão e depois experimente algumas de suas próprias pesquisas personalizadas. Se quiser ver mais detalhes sobre o que é executado no backend para gerar os resultados da pesquisa, clique no link <strong>Mostrar </strong>ao lado de <strong>Invocações de ferramentas.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt41adf6631ba91be1/6a17f760505ac30986ad8cf1/821fe7b9446de5ed646d938cc9484a7ddad21030-1600x875.gif" alt="Testando o aplicativo de exemplo." /><p><strong>Bônus: </strong>Se você realmente quiser testar o GPT-4o, tente a seguinte pesquisa: <em>Estou procurando um imóvel perto da Disney World, Flórida, com mais de 30 quartos, mais de 20 banheiros, piscina, garagem e perto da praia por menos de 200 mil. </em>Esta consulta retornará resultados após várias invocações da ferramenta de pesquisa.</p><h2>Elastic é a sua solução para IA de pesquisa</h2><p>O aplicativo em execução é um exemplo de pesquisa guiada do Gen AI LLM usando o Elasticsearch por meio de modelos de pesquisa como fonte de dados de base. Sinta-se à vontade para experimentar e personalizar o aplicativo de exemplo para criar uma experiência de pesquisa precisa e flexível, para ajudar seus usuários a encontrar o que procuram.</p><p>Obrigado pela leitura. Experimente <a href="https://cloud.elastic.co/registration">o 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>