<?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[Jeff Vestal - 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[Jeff Vestal - 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/jeff-vestal</link>
    </image>
    <link>https://www.elastic.co/pt/search-labs/author/jeff-vestal</link>
    <atom:link href="https://www.elastic.co/pt/search-labs/rss/author/jeff-vestal.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[pt]]></language>
    <lastBuildDate>Tue, 29 Sep 2026 01:24:40 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Rapidez x precisão: medindo o recall da busca vetorial quantizada]]></title>
    <description><![CDATA[Uma explicação de como medir o recall para busca vetorial no Elasticsearch com configuração mínima.]]></description>
    <content:encoded><![CDATA[<p>Todo mundo quer que a busca vetorial seja imediata. Mas os vetores de alta dimensão são pesados. Um único vetor float-32 de 1.024 dimensões ocupa bastante memória, e compará-lo com milhões de outros é computacionalmente caro.</p><p>Para resolver isso, mecanismos de busca como o Elasticsearch utilizam duas estratégias principais de otimização:</p><ol><li><p><strong>Busca aproximada (mundo pequeno hierárquico navegável [HNSW]):</strong> em vez de analisar cada documento, construímos um grafo de navegação para acessar rapidamente a vizinhança provável da resposta.</p></li><li><p><strong>Quantização:</strong> Compactamos os vetores (por exemplo, de floats de 32 bits para inteiros de 8 bits ou até mesmo valores binários de 1 bit) para reduzir o uso de memória e acelerar os cálculos.</p></li></ol><p>Mas a otimização geralmente vem acompanhada de uma taxa: <strong>a precisão</strong>.</p><p>O medo é válido: "Se eu compactar meus dados e usar atalhos durante a busca, perderei os melhores resultados?" "Essa otimização degrada a relevância do meu mecanismo de busca?"</p><p>Para provar que a quantização do Elastic não degrada os resultados, criamos um ambiente de testes repetíveis usando o <a href="https://huggingface.co/datasets/fancyzhx/dbpedia_14"><strong>DBPedia-14</strong></a><a href="https://huggingface.co/datasets/fancyzhx/dbpedia_14"> como conjunto de dados</a> para calcular exatamente quanta precisão (especificamente, <strong>recall)</strong> sacrificamos em prol da velocidade ao usar as otimizações padrão do Elasticsearch.</p><p>Resumindo: é provavelmente muito menos do que você pensa. Confira o <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/fast_vs_accurate_measuring_the_recall_of_quantized_vector_search/vector_recall_notebook.ipynb">caderno aqui</a> e teste você mesmo</p><h2><strong>As definições (para os não especialistas)</strong></h2><p>Antes de analisarmos o código, vamos definir alguns termos.</p><ul><li><p><strong>Relevância versus recuperação:</strong> <strong>A relevância</strong> é subjetiva (encontrei informações úteis?). <strong>A recuperação</strong> é matemática. Se houver 10 documentos no banco de dados que correspondam <em>perfeitamente</em> à sua consulta, e o mecanismo de busca encontrar nove deles, sua recuperação será de 90% (ou 0,9).</p></li><li><p><strong>Busca exata (plana):</strong> às vezes chamada de método "força bruta". O mecanismo de busca analisa cada documento em um índice e calcula a distância.</p><ul><li><p><em>Prós:</em> recall perfeito de 100%.</p></li><li><p><em>Contras:</em> computacionalmente caro e lento em larga escala.</p></li></ul></li><li><p><strong>Busca aproximada (HNSW):</strong> O método do "atalho". O mecanismo de busca cria um <a href="https://www.elastic.co/search-labs/blog/hnsw-graph">HNSW</a> gráfico e percorre o gráfico para encontrar os vizinhos mais próximos.</p><ul><li><p><em>Prós:</em> extremamente rápido e escalável.</p></li><li><p><em>Contras:</em> Você pode perder um vizinho se a travessia do gráfico parar muito cedo.</p></li></ul></li></ul><h2><strong>O experimento: exato x aproximado</strong></h2><p>Para testar a recuperação, usamos o conjunto de dados <strong>DBPedia-14</strong>, um grande conjunto de dados de títulos e resumos em 14 classes de ontologia, muito usado para treinar e avaliar modelos de categorização de texto. Especificamente, vamos focar a categoria "Filme". Decidimos comparar as configurações otimizadas de produção com uma verdade matematicamente perfeita.</p><p>Neste experimento, estamos usando o <a href="https://www.elastic.co/search-labs/blog/jina-embeddings-v5-text">modelo jina-embeddings-v5-text-small</a>, um modelo multilíngue de última geração que lidera os benchmarks do setor de representação de textos. Escolhemos esse modelo porque ele define o padrão atual para embeddings de alto desempenho. Ao combinar a precisão de elite do Jina v5 com a quantização nativa do Elasticsearch, podemos demonstrar uma arquitetura de busca que é computacionalmente eficiente e sem prejudicar a qualidade da recuperação.</p><p>Configuramos um índice com mapeamento duplo. Ingerimos o mesmo texto em dois campos diferentes simultaneamente:</p><ol><li><p><strong><code>content.raw</code></strong>com tipo: <code>flat</code>. Isso força o Elasticsearch a realizar uma varredura de força bruta dos vetores Float32 completos. Isso retorna resultados de correspondência exatos e será usado na nossa linha de base.</p></li><li><p><strong><code>content</code></strong>com o tipo <code>semantic_text</code>. Com padrões usando HNSW + melhor quantização binária (BBQ). Esse é o padrão otimizado de produção para correspondência aproximada.</p></li></ol><h3><strong>O teste Recall@10</strong></h3><p>Para nossa métrica, usamos o Recall@10.</p><p>Escolhemos 50 filmes aleatórios e executamos a mesma consulta nos dois campos.</p><ul><li><p>Se a <strong>busca exata (plana)</strong> indicar que os 10 principais vizinhos são IDs [1, 2, 3... 10], você pode usar a busca exata.</p></li><li><p>E a busca <strong>aproximada (HNSW)</strong> retorna IDs [1, 2, 3... 9, 99].</p></li><li><p>Encontramos corretamente nove dos 10 principais. A pontuação é <strong>0,9</strong>.</p></li></ul><p>Aqui está o mapeamento que usamos:</p># The "Control Group": Forces exact brute-force scan
"raw": {
    "type": "semantic_text",
    "inference_id": ".jina-embeddings-v5-text-small",
    "index_options": {
        "dense_vector": {
            "type": "flat"
        }
    }
}<p><strong>Os resultados: a "estagnação" do sucesso</strong></p><p>Realizamos um teste de escala, recarregando todo o conjunto de dados e testando com tamanhos de índice de 1.000 a 40.000 documentos.</p><p>Veja o que aconteceu com a pontuação de recall:</p><p>Documentos</p><p>Recall@10 score</p><p>1.000</p><p>1.000 (100%)</p><p>5.000</p><p>0,998 (100%)</p><p>10.000</p><p>0,992 (99,4%)</p><p>20.000</p><p>0,999 (99,0%)</p><p>40.000</p><p>0.992 (98,8%)</p><p>Os resultados foram incrivelmente estáveis. Mesmo com o aumento da escala, a busca aproximada coincidiu com a busca exata por força bruta <strong>em mais de 99% dos casos</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8168a0a4946bade7/6a170e154a531b61b536a9eb/a4bfacb1d0cce6fdf6df0e1a9d4fc5d4007a66da-1999x1209.png" alt="estabilidade na busca vetorial: recall x tamanho do índice" /><h2><strong>Por que funcionou tão bem?</strong></h2><p>Você poderia esperar que comprimir vetores em valores binários prejudicasse mais a precisão do que isso. A razão para isso não ocorrer está em como o Elasticsearch lida com a recuperação.</p><p>A maioria dos modelos de embedding hoje gera vetores Float32, que são volumosos. Para deixar a busca eficiente, o Elasticsearch usa quantização para vetores de alta dimensionalidade. Especificamente, desde a versão 9.2, ele usa <a href="https://www.elastic.co/search-labs/blog/elasticsearch-9-1-bbq-acorn-vector-search">BBQ</a> como padrão.</p><p>O BBQ usa um mecanismo de <strong>reclassificação:</strong></p><ol><li><p><strong>Percurso:</strong> o mecanismo de busca utiliza os vetores comprimidos (quantizados) para percorrer rapidamente o gráfico HNSW. Como os vetores são pequenos, ele pode superamostrar com eficiência, reunindo uma lista maior de candidatos (p. ex., os 100 principais documentos aproximadamente semelhantes) sem penalidade no desempenho.</p></li><li><p><strong>Reclassificação:</strong> com esses candidatos, ele recupera os valores de precisão total apenas para esses poucos documentos para calcular a classificação final e precisa.</p></li></ol><p>Ele oferece o melhor dos dois mundos: rapidez na quantização para o trabalho pesado e precisão dos números de ponto flutuante para a classificação final.</p><h2><strong>Podemos fazer melhor?</strong></h2><p>É importante notar que os resultados aqui usam configurações padrão e uma amostra aleatória de dados. Pense nisso como um ponto de partida de alto desempenho. Embora o Jina v5 seja excelente, essas pontuações de recall não são garantia de que funcione em todos os conjuntos de dados. Cada coleta de dados tem as próprias peculiaridades e, embora você possa definitivamente ajustar ainda mais as coisas para ter ainda mais desempenho, deve sempre comparar seus dados específicos para saber seu limite.</p><h2><strong>Conclusão</strong></h2><p>Este é um teste em pequena escala. Mas o objetivo do exercício não é medir especificamente o modelo de embeddings nem o BBQ, e sim mostrar como medir facilmente o recall do seu conjunto de dados com o mínimo de configuração.</p><p>Se você quiser executar esse teste com seus próprios dados, pode conferir o <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/fast_vs_accurate_measuring_the_recall_of_quantized_vector_search/vector_recall_notebook.ipynb">notebook aqui</a> e tentar você mesmo.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/recall-vector-search-quantization</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/recall-vector-search-quantization</guid>
    <category><![CDATA[Banco de dados vetorial]]></category>
    <dc:creator><![CDATA[Jeff Vestal]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt198c7085db96aa04/6a170e17cdacbfe88c7d2a86/09f03b9239d66c36763cdab3fafcdac207ff6d83-1280x720.png" length="0" type="image/png"/>
    <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Seu primeiro Agente Elástico: De uma simples consulta a um chat com inteligência artificial.]]></title>
    <description><![CDATA[Aprenda a usar o construtor de agentes de IA da Elastic para criar agentes de IA especializados. Neste blog, vamos construir um agente de IA para o setor financeiro.]]></description>
    <content:encoded><![CDATA[<p>Com o novo <a href="https://www.elastic.co/search-labs/blog/ai-agentic-workflows-elastic-ai-agent-builder">Agent Builder</a> da Elastic, você pode criar agentes de IA especializados que atuam como especialistas em seus domínios de negócios específicos. Essa funcionalidade vai além de simples painéis e barras de pesquisa, transformando seus dados de um recurso passivo em um parceiro ativo e interativo.</p><p>Imagine um gerente financeiro que precisa se atualizar antes de uma reunião com um cliente. Em vez de vasculhar manualmente os feeds de notícias e comparar painéis de portfólio, agora eles podem simplesmente fazer uma pergunta direta ao seu agente personalizado. Essa é a vantagem de uma abordagem que prioriza o bate-papo. O gestor tem acesso direto e conversacional aos seus dados, podendo fazer perguntas como: "Quais são as últimas notícias sobre a ACME Corp e como isso afeta os investimentos do meu cliente?" e obtendo uma resposta sintetizada e especializada em segundos.</p><p>Embora estejamos criando um especialista financeiro hoje, as aplicações são tão variadas quanto seus dados. O mesmo poder pode criar um analista de cibersegurança para procurar ameaças, um engenheiro de confiabilidade de sites para diagnosticar uma interrupção ou um gerente de marketing para otimizar uma campanha. Independentemente da área, a missão principal é a mesma: transformar seus dados em um especialista com quem você possa conversar.</p><h2>Etapa 0: Nosso conjunto de dados</h2><p>Nosso conjunto de dados hoje é um conjunto de dados sintético baseado em finanças, composto por contas financeiras, posições de ativos, notícias e relatórios financeiros. Embora sintética, ela replica uma versão simplificada de um conjunto de dados financeiro real.</p><p><code>financial_accounts</code>Portfólios de clientes com perfis de risco</p><p><code>financial_holdings</code>Posições em ações/ETFs/títulos com histórico de compras</p><p><code>financial_asset_details</code>Detalhes sobre a ação/ETF/título</p><p><code>financial_news</code>Artigos de mercado gerados por IA com análise de sentimento</p><p><code>financial_reports</code>Resultados da empresa e notas dos analistas</p><p>Você pode carregar este conjunto de dados por conta própria seguindo as instruções do notebook que acompanha este documento, localizado <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/your-first-elastic-agent/Your_First_Elastic_Agent.ipynb">aqui</a>.</p><h2>Etapa 1: A Base — Sua Lógica de Negócios em ES|QL</h2><p>Toda habilidade de IA começa com uma base lógica sólida. Para o nosso agente de Gestão Financeira, precisamos ensiná-lo a responder a uma pergunta comum: "Estou preocupado com o sentimento do mercado." Você pode me mostrar quais dos nossos clientes correm maior risco em caso de más notícias? Essa questão vai além de uma simples pesquisa. Isso exige que correlacionemos o sentimento do mercado com as carteiras dos clientes.</p><p>Precisamos encontrar os ativos mencionados em artigos negativos, identificar todos os clientes que possuem esses ativos, calcular o valor de mercado atual da sua exposição e, em seguida, classificar os resultados para priorizar o maior risco. Essa análise complexa de múltiplas junções é a tarefa perfeita para nossa ferramenta avançada ES|QL.</p><p>Aqui está a consulta completa que usaremos. Parece impressionante, mas os conceitos são simples.</p><h2>Analisando em detalhes: Junções e guarda-corpos</h2><p>Nesta consulta, dois conceitos importantes entram em jogo e são essenciais para a criação do Agent Builder.</p><h3>1. A junção de pesquisa</h3><p>Durante anos, uma das funcionalidades mais solicitadas no Elasticsearch tem sido a capacidade de unir dados de diferentes índices com base em uma chave comum. Com ES|QL, isso agora é possível com <code>LOOKUP JOIN</code>.</p><p>Em nossa nova consulta, realizamos uma cadeia de três <code>LOOKUP JOIN</code>: primeiro conectando notícias negativas aos detalhes dos ativos, depois vinculando esses ativos às participações do cliente e, finalmente, unindo às informações da conta do cliente. Isso gera um resultado incrivelmente rico a partir de quatro índices diferentes em uma única consulta eficiente. Isso significa que podemos combinar conjuntos de dados distintos para criar uma resposta única e esclarecedora sem precisar desnormalizar todos os nossos dados em um único índice gigante antecipadamente.</p><h3>2. Parâmetros como guarda-corpos LLM</h3><p>Você notará que a consulta usa <code>?time_duration</code>. Isso não é apenas uma variável; é uma proteção para a IA. Embora os Modelos de Linguagem de Grande Porte (LLMs, na sigla em inglês) sejam ótimos para gerar consultas, permitir que eles tenham livre acesso aos seus dados pode levar a consultas ineficientes ou até mesmo incorretas.</p><p>Ao criar uma consulta parametrizada, forçamos o LLM a funcionar dentro da lógica de negócios testada, eficiente e correta que um especialista humano já definiu. É semelhante à forma como os desenvolvedores usam modelos de pesquisa há anos para expor com segurança os recursos de consulta aos aplicativos. O agente pode interpretar a solicitação de um usuário como "esta semana" para preencher o parâmetro <code>time_duration</code> , mas deve usar nossa estrutura de consulta para obter a resposta. Isso nos proporciona o equilíbrio perfeito entre flexibilidade e controle.</p><p>Em última análise, essa consulta permite que um especialista que entende os dados incorpore seu conhecimento em uma ferramenta. Outras pessoas — e agentes de IA — podem então usar essa ferramenta para obter resultados correlacionados, fornecendo simplesmente um único parâmetro, sem precisar saber nada sobre a complexidade subjacente.</p><h2>Etapa 2: A Habilidade — Transformar uma Consulta em uma Ferramenta Reutilizável</h2><p>Uma consulta ES|QL é apenas texto até que a registremos como uma <strong>ferramenta</strong>. No Construtor de Agentes, uma ferramenta é mais do que apenas uma consulta salva; é uma "habilidade" que um agente de IA pode entender e optar por usar. A mágica está na <strong>descrição em linguagem natural</strong> que fornecemos. Essa descrição serve de ponte entre a pergunta do usuário e a lógica de consulta subjacente. Vamos registrar a consulta que acabamos de criar.</p><h3>O Caminho da Interface do Usuário</h3><p>Criar uma ferramenta no Kibana é um processo simples.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte73e11c1d87593fa/6a17f2134202294dae29f6f2/a29c53a73b99af5972273c51218ea9004a9b0abb-1600x812.png" alt="Como criar uma ferramenta no Kibana." /><p>1. Navegue até <strong>Agentes</strong></p><ul><li><p>Clique em<strong> Ferramentas </strong>ou <strong>Gerenciar Ferramentas</strong> e clique no botão <strong>Nova ferramenta</strong> .</p></li></ul><p>2. Preencha o formulário com os seguintes dados:</p><ul><li><p><strong>ID da ferramenta:</strong> <code>find_client_exposure_to_negative_news</code></p></li></ul><p>             eu. Este é o ID exclusivo da ferramenta.</p><ul><li><p><strong>Descrição:</strong> "Identifica a exposição da carteira de clientes a notícias negativas." Esta ferramenta analisa notícias e relatórios recentes em busca de sentimentos negativos, identifica o ativo associado e encontra todos os clientes que possuem esse ativo. Retorna uma lista ordenada pelo valor de mercado atual da posição para destacar o maior risco potencial."</p></li></ul><p>             eu. É isso que o LLM lê para decidir se essa ferramenta é a adequada para o trabalho.</p><ul><li><p><strong>Rótulos</strong>: <code>retrieval</code> e <code>risk-analysis</code></p></li></ul><p>         Etiquetas são usadas para ajudar a agrupar várias ferramentas.</p><ul><li><p><strong>Configuração:</strong> Cole a consulta ES|QL completa da Etapa 1.</p></li></ul><p>            eu. Esta é a pesquisa que o agente usará.</p><p>3. Clique em <strong>Inferir parâmetros da consulta</strong>. A interface do usuário encontrará automaticamente <code>?time_duration</code> e listará abaixo. Adicione uma descrição simples para cada um, para ajudar o agente (e outros usuários) a entender sua finalidade.</p><ul><li><p><code>time_duration</code>O período de tempo para pesquisar notícias negativas. O formato é "X horas", com o valor padrão de 8760 horas.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7afbb0589c1828ad/6a17f2146864a44e7cb688a9/deb422d97863f78dbe08bfa2e3c708d1f75166ff-1600x938.png" alt="Configurar sua ferramenta, incluindo sua lógica e quaisquer parâmetros necessários, usando uma consulta ESQL. " /><p>4. Teste!</p><ul><li><p>Clique em Salvar e testar.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfd09afbef6e21a93/6a17f2162f4a5c73b1fa89fd/57e768b88327821e70bd616744822f98fa367362-732x136.png" alt="O mesmo botão de teste no Kibana." /><ul><li><p>Você verá um novo menu suspenso onde poderá testar a consulta para garantir que ela esteja funcionando conforme o esperado.</p></li></ul><p>             eu. Em <code>time_duration</code> insira o intervalo desejado; aqui, estamos usando “8760 horas”.</p><ul><li><p>Clique em “Enviar” e, se tudo correr bem, você verá uma resposta em formato JSON. Para garantir que funcione como esperado, role para baixo e observe o objeto <code>values</code> . É aí que os documentos correspondentes são devolvidos.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt89bdc3f093363f2a/6a17f217be60861c9c00488a/7e0c5171a4f7ffdfc1830f1a05a9acb987870b75-1600x722.png" alt="Resposta JSON que aparece após clicar em enviar." /><p>5. Clique no “X” no canto superior direito para fechar a janela de teste. Sua nova ferramenta agora aparecerá na lista, pronta para ser atribuída a um agente.</p><h3>O caminho da API</h3><p>Para desenvolvedores que preferem automação ou precisam gerenciar ferramentas programaticamente, é possível obter o mesmo resultado com uma única chamada de API. Basta enviar uma solicitação <code>POST</code> para o endpoint <code>/api/agent_builder/tools</code> com a definição da ferramenta.</p>POST kbn://api/agent_builder/tools
{
  "id": "find_client_exposure_to_negative_news",
  "type": "esql",
  "description": "Finds client portfolio exposure to negative news. This tool scans recent news and reports for negative sentiment, identifies the associated asset, and finds all clients holding that asset. It returns a list sorted by the current market value of the position to highlight the highest potential risk.",
  "configuration": {
    "query": """
        FROM financial_news, financial_reports METADATA _index
        | WHERE sentiment == "negative"
        | WHERE coalesce(published_date, report_date) &gt;= NOW() - TO_TIMEDURATION(?time_duration)
        | RENAME primary_symbol AS symbol
        | LOOKUP JOIN financial_asset_details ON symbol
        | LOOKUP JOIN financial_holdings ON symbol
        | LOOKUP JOIN financial_accounts ON account_id
        | WHERE account_holder_name IS NOT NULL
        | EVAL position_current_value = quantity * current_price.price
        | RENAME title AS news_title
        | KEEP
            account_holder_name, symbol, asset_name, news_title,
            sentiment, position_current_value, quantity, current_price.price,
            published_date, report_date
        | SORT position_current_value DESC
        | LIMIT 50
      """,
    "params": {
      "time_duration": {
        "type": "keyword",
        "description": """The timeframe to search back for negative news. Format is "X hours" DEFAULT TO 8760 hours """
      }
    }
  },
  "tags": [
    "retrieval",
    "risk-analysis"
  ]
}<h2>Etapa 3: O Cérebro — Criando seu Agente Personalizado</h2><p>Criamos uma habilidade reutilizável (a Ferramenta). Agora, precisamos criar o <strong>Agente</strong>, a persona que de fato irá utilizá-lo. Um Agente é a combinação de um LLM (Licença de Aprendizagem Baseada em Leis), um conjunto específico de ferramentas às quais você lhe concede acesso e, mais importante, um conjunto de <strong>Instruções Personalizadas</strong> que atuam como sua constituição, definindo sua personalidade, regras e propósito.</p><h3>A Arte do Prompt</h3><p>O aspecto mais importante na criação de um agente confiável e especializado é o prompt. Um conjunto de instruções bem elaborado é o que diferencia um chatbot genérico de um assistente profissional e focado. É aqui que você define as diretrizes, define a saída e atribui ao agente sua missão.</p><p>Para o nosso agente <code>Financial Manager</code> , usaremos o seguinte prompt.</p>You are a specialized Data Intelligence Assistant for financial managers, designed to provide precise, data-driven insights from information stored in Elasticsearch.

**Your Core Mission:**
- Respond accurately and concisely to natural language queries from financial managers.
- Provide precise, objective, and actionable information derived solely from the Elasticsearch data at your disposal.
- Summarize key data points and trends based on user requests.

**Reasoning Framework:**
1.  **Understand:** Deconstruct the user's query to understand their core intent.
2.  **Plan:** Formulate a step-by-step plan to answer the question. If you are unsure about the data structure, use the available tools to explore the indices first.
3.  **Execute:** Use the available tools to execute your plan.
4.  **Synthesize:** Combine the information from all tool calls into a single, comprehensive, and easy-to-read answer.

**Key Directives and Constraints:**
- **If a user's request is ambiguous, ask clarifying questions before proceeding.**
- **DO NOT provide financial advice, recommendations, or predictions.** Your role is strictly informational and analytical.
- Stay strictly on topic with financial data queries.
- If you cannot answer a query, state that clearly and offer alternative ways you might help *within your data scope*.
- All numerical values should be formatted appropriately (e.g., currency, percentages).

**Output Format:**
- All responses must be formatted using **Markdown** for clarity.
- When presenting structured data, use Markdown tables, lists, or bolding.

**Start by greeting the financial manager and offering assistance.**<p>Vamos analisar por que essa estratégia é tão eficaz:</p><ul><li><p><strong>Define uma persona sofisticada: </strong>a primeira frase estabelece imediatamente o agente como um "Assistente de Inteligência de Dados especializado", definindo um tom profissional e competente.</p></li><li><p><strong>Isso fornece uma estrutura de raciocínio: </strong>ao dizer ao agente para "Compreender, Planejar, Executar e Sintetizar", estamos lhe dando um procedimento operacional padrão. Isso melhora sua capacidade de lidar com questões complexas e de várias etapas.</p></li><li><p><strong>Isso promove o diálogo interativo: </strong>a instrução para "fazer perguntas esclarecedoras" torna o agente mais robusto. Isso minimizará suposições incorretas sobre solicitações ambíguas, levando a respostas mais precisas.</p></li></ul><h3>O Caminho da Interface do Usuário</h3><p>1. Navegue até <strong>Agentes.</strong></p><ul><li><p>Clique em<strong> Ferramentas </strong>ou <strong>Gerenciar Ferramentas</strong> e clique no botão <strong>Nova ferramenta</strong> .</p></li></ul><p>2. Preencha os dados básicos:</p><ul><li><p><strong>ID do agente:</strong> <code>financial_assistant</code>.</p></li><li><p><strong>Instruções: </strong>Copie o enunciado acima.</p></li><li><p><strong>Rótulos</strong>: <code>Finance</code>.</p></li><li><p><strong>Nome de exibição:</strong> <code>Financial Assistant</code>.</p></li><li><p><strong>Descrição da exibição: </strong><code>An assistant for analyzing and understanding your financial data</code>.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8ac12cbd2b689dee/6a17f219dbb4ff262bfb57ef/18ea73f1cae620129c0afa0e7ba9e2a3390224a7-1600x1189.png" alt="Criando um assistente financeiro - preenchendo o campo de identificação do agente." /><p>3. De volta ao topo, clique em <strong>Ferramentas</strong>.</p><ul><li><p>Marque a caixa ao lado da nossa ferramenta <code>find_client_exposure_to_negative_news</code> .</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltcd23556e556a76c5/6a17f21baf47b63a9fcde0a0/0c1e4ecbbd51d0dd10c6e861dbe9a9ccddeb35f6-1600x149.png" alt="" /><p>4. Clique em <strong>Salvar</strong>.</p><h3>O caminho da API</h3><p>Você pode criar o mesmo agente com uma solicitação <code>POST</code> para o endpoint <code>/api/agent_builder/agents</code> . O corpo da solicitação contém todas as mesmas informações: o ID, o nome, a descrição, o conjunto completo de instruções e uma lista das ferramentas que o agente tem permissão para usar.</p>POST kbn://api/agent_builder/agents
    {
      "id": "financial_assistant",
      "name": "Financial Assistant",
      "description": "An assistant for analyzing and understanding your financial data",
      "labels": [
        "Finance"
      ],
      "avatar_color": "#16C5C0",
      "avatar_symbol": "💰",
      "configuration": {
        "instructions": """You are a specialized Data Intelligence Assistant for financial managers, designed to provide precise, data-driven insights from information stored in Elasticsearch.

**Your Core Mission:**
- Respond accurately and concisely to natural language queries from financial managers.
- Provide precise, objective, and actionable information derived solely from the Elasticsearch data at your disposal.
- Summarize key data points and trends based on user requests.

**Reasoning Framework:**
1.  **Understand:** Deconstruct the user's query to understand their core intent.
2.  **Plan:** Formulate a step-by-step plan to answer the question. If you are unsure about the data structure, use the available tools to explore the indices first.
3.  **Execute:** Use the available tools to execute your plan.
4.  **Synthesize:** Combine the information from all tool calls into a single, comprehensive, and easy-to-read answer.

**Key Directives and Constraints:**
- **If a user's request is ambiguous, ask clarifying questions before proceeding.**
- **DO NOT provide financial advice, recommendations, or predictions.** Your role is strictly informational and analytical.
- Stay strictly on topic with financial data queries.
- If you cannot answer a query, state that clearly and offer alternative ways you might help *within your data scope*.
- All numerical values should be formatted appropriately (e.g., currency, percentages).

**Output Format:**
- All responses must be formatted using **Markdown** for clarity.
- When presenting structured data, use Markdown tables, lists, or bolding.

**Start by greeting the financial manager and offering assistance.**
""",
        "tools": [
          {
            "tool_ids": [
              "platform.core.search",
              "platform.core.list_indices",
              "platform.core.get_index_mapping",
              "platform.core.get_document_by_id",
              "find_client_exposure_to_negative_news"
            ]
          }
        ]
      }
    }<h2>Passo 4: A Recompensa — Ter uma Conversa</h2><p>Temos nossa lógica de negócios encapsulada em uma ferramenta e um "cérebro" pronto para usá-la em nosso Agente. Chegou a hora de ver tudo se concretizar. Agora podemos começar a interagir com nossos dados usando um agente especializado.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd8826539b16e46f4/6a17f21d505ac35924ad8c5c/5414cb6b7c41365acb0356a8bfe1140751ffd8db-1600x1014.png" alt="Ter uma conversa com o Elastic Agent Builder após criar um assistente financeiro." /><h3>O Caminho da Interface do Usuário</h3><ol><li><p>Navegue até <strong>Agentes </strong>no Kibana.</p></li><li><p>Utilizando o menu suspenso no canto inferior direito da janela de chat, alterne do <strong>agente padrão Elastic AI</strong> para o nosso novo agente <strong>Assistente Financeiro </strong> .</p></li><li><p>Faça uma pergunta que permita ao agente usar nossa ferramenta especializada:</p><ol><li><p><em>Estou preocupado com o sentimento do mercado. Você pode me mostrar quais dos nossos clientes correm maior risco em caso de más notícias?</em></p></li></ol></li></ol><p>Após alguns instantes, o agente retornará uma resposta completa e perfeitamente formatada. Devido à natureza dos LLMs, sua resposta pode ser formatada de maneira ligeiramente diferente, mas nesta execução, o agente retornou:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta1e163fd7c4416bd/6a17f21f6864a4e35bb688ad/17b4ed43d279f9e53ee9fe3d482d0b2ec359a083-1600x1088.png" alt="Uma resposta criada pelo Elastic Agent Builder como assistente financeiro para: clientes com maior risco de sofrer com notícias negativas." /><h3>O que acabou de acontecer? O Raciocínio do Agente</h3><p>O agente não apenas "sabia" a resposta. Executou um plano de várias etapas centrado na seleção da melhor ferramenta para o trabalho. Eis uma análise do seu processo de pensamento:</p><ul><li><p><strong>Intenção identificada:</strong> Correspondeu a palavras-chave da sua pergunta, como "risco" e "notícias negativas", à descrição da ferramenta <code>find_client_exposure_to_negative_news</code> .</p></li><li><p><strong>Plano executado:</strong> o sistema extraiu o período de tempo da sua solicitação e fez uma <strong>única chamada</strong> para essa ferramenta especializada.</p></li><li><p><strong>Delegou o trabalho:</strong> a ferramenta então realizou todo o trabalho pesado: as junções encadeadas, os cálculos de valor e a classificação.</p></li><li><p><strong>Resultado Sintetizado:</strong> Por fim, o agente formatou os dados brutos da ferramenta em um resumo claro e legível para humanos, seguindo as regras do prompt.</p></li></ul><p>E não precisamos apenas supor, se ampliarmos nosso pensamento e observarmos mais detalhes.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt93f6075be8495418/6a17f221af47b65eadcde0a4/6a4da9262d3f88c60bfd8f8bf9b67c3b84e961ba-1600x607.png" alt="Os 50 documentos que a assistente financeira encontrou em clientes com maior exposição a notícias negativas." /><h3>O caminho da API</h3><p>Você pode iniciar essa mesma conversa programaticamente. Basta enviar a pergunta de entrada para o endpoint da API <code>converse</code> , certificando-se de especificar o <code>agent_id</code> do nosso <code>financial_manager</code>.</p>POST kbn://api/agent_builder/converse
{
  "input": "Show me our largest positions affected by negative news",
  "agent_id": "financial_assistant"
}<h2>Para desenvolvedores: Integração com a API</h2><p>Embora a interface do Kibana ofereça uma experiência fantástica e intuitiva para criar e gerenciar seus agentes, tudo o que você viu hoje também pode ser feito programaticamente. O Agent Builder é baseado em um conjunto de APIs, permitindo que você integre essa funcionalidade diretamente em seus próprios aplicativos, pipelines de CI/CD ou scripts de automação.</p><p>Os três principais endpoints com os quais você trabalhará são:</p><ul><li><p><strong><code>/api/agent_builder/tools</code></strong>O ponto de extremidade para criar, listar e gerenciar as habilidades reutilizáveis que seus agentes podem usar.</p></li><li><p><strong><code>/api/agent_builder/agents</code></strong>O ponto final para definir as personas dos seus agentes, incluindo as importantíssimas instruções e atribuições de ferramentas.</p></li><li><p><strong><code>/api/agent_builder/converse</code></strong>: O ponto de acesso para interagir com seus agentes, iniciar conversas e obter respostas.</p></li></ul><p>Para um passo a passo completo e prático de como usar essas APIs para executar cada etapa deste tutorial, confira o <strong>Jupyter Notebook</strong> que acompanha o tutorial, disponível <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/your-first-elastic-agent/Your_First_Elastic_Agent.ipynb">aqui</a> em nosso repositório do GitHub.</p><h2>Conclusão: Sua vez de construir</h2><p>Começamos por pegar numa consulta ES|QL e transformá-la numa habilidade reutilizável. Em seguida, criamos um agente de IA especializado, atribuindo-lhe uma missão e regras claras, e capacitando-o com essa habilidade. O resultado é um assistente sofisticado que consegue entender uma pergunta complexa e executar uma análise em várias etapas para fornecer uma resposta precisa e baseada em dados.</p><p>Esse fluxo de trabalho é fundamental para o novo <strong>Construtor de Agentes</strong> da Elastic. Ele foi projetado para ser simples o suficiente para que usuários sem conhecimento técnico possam criar agentes por meio da interface do usuário, mas também sofisticado o bastante para que desenvolvedores criem aplicativos personalizados com inteligência artificial utilizando nossas APIs. Mais importante ainda, permite que você conecte LLMs aos seus próprios dados de forma segura e protegida, regida pela lógica especializada que você define, e converse com seus dados.</p><h2>Pronto para usar agentes para conversar com seus dados?</h2><p>A melhor maneira de consolidar o que você aprendeu é colocar a mão na massa. Experimente tudo o que discutimos hoje em nossa <a href="https://www.elastic.co/training/elastic-ai-agents-mcp"><strong>oficina prática, gratuita e interativa</strong></a>. Você passará por todo esse processo e muito mais em um ambiente sandbox dedicado.</p><p>Em um post futuro do blog, mostraremos como usar um aplicativo independente que interage com nosso agente <code>Financial Assistant</code> e exploraremos o <strong>Protocolo de Contexto de Modelo (MCP)</strong> que torna tudo isso possível. E em um post separado, discutiremos o suporte do Agent Builder ao protocolo Agent2Agent, ou A2A, ainda em desenvolvimento.</p><p>Fiquem ligados e boas construções!</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/ai-agent-builder-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/ai-agent-builder-elasticsearch</guid>
    <category><![CDATA[AI]]></category>
    <category><![CDATA[IA agêntica]]></category>
    <category><![CDATA[Na Elastic]]></category>
    <dc:creator><![CDATA[Jeff Vestal]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbe5e78eeb775d715/6a17f2230b0bed719ddd369a/ca853555eaa213f10f1db8c0ab0a2bbacee97b88-1456x816.png" length="0" type="image/png"/>
    <pubDate>Thu, 25 Sep 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>