Compreender a utilização do modelo linguístico

De relance
Objetivo: Monitorizar a utilização de LLMs com OpenTelemetry
Tempo: 20 minutos
Plugins:OpenAITelemetryPlugin
Pré-requisitos:Configurar Dev Proxy, Docker

A utilização de modelos linguísticos implica custos. Para entender como seu aplicativo usa modelos de linguagem grandes, use o Dev Proxy para intercetar solicitações e respostas compatíveis com OpenAI. O Dev Proxy analisa as solicitações e respostas e registra dados de telemetria para ajudá-lo a entender como seu aplicativo usa modelos de linguagem grandes. Esta informação permite-lhe otimizar a sua aplicação e reduzir custos.

O Dev Proxy registra dados de uso do modelo de idioma no formato OpenTelemetria. Você pode usar qualquer painel compatível com OpenTelemetry para visualizar os dados. Por exemplo, pode usar o painel do Aspire ou o OpenLIT. Os dados de telemetria incluem o número de tokens usados na solicitação e resposta, o custo dos tokens usados e o custo total de todas as solicitações ao longo de uma sessão.

Intercete solicitações e respostas compatíveis com OpenAI usando o Dev Proxy

Para intercetar solicitações e respostas compatíveis com OpenAI, use o OpenAITelemetryPlugin. Este plugin regista dados de telemetria das solicitações e respostas que sejam compatíveis com OpenAI que interceta e emite dados OpenTelemetry.

Criar um arquivo de configuração do Dev Proxy

  1. Crie um novo arquivo de configuração do Dev Proxy usando o devproxy config new comando ou a extensão do Dev Proxy Toolkit.

  2. Adicione o OpenAITelemetryPlugin ao arquivo de configuração.

    Ficheiro: devproxyrc.json

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/rc.schema.json",
      "plugins": [
        {
          "name": "OpenAITelemetryPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
        }
      ],
      "urlsToWatch": [
      ],
      "logLevel": "information",
      "newVersionNotification": "stable",
      "showSkipMessages": true
    }
    
  3. Configure a urlsToWatch propriedade para incluir as URLs das solicitações compatíveis com OpenAI que você deseja intercetar. O exemplo a seguir interceta solicitações para concluir o chat do Azure OpenAI.

    Ficheiro: devproxyrc.json (com URLs da Azure OpenAI)

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/rc.schema.json",
      "plugins": [
        {
          "name": "OpenAITelemetryPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
        }
      ],
      "urlsToWatch": [
        "https://*.openai.azure.com/openai/deployments/*/chat/completions*",
        "https://*.cognitiveservices.azure.com/openai/deployments/*/chat/completions*"
      ],
      "logLevel": "information",
      "newVersionNotification": "stable",
      "showSkipMessages": true
    }
    
  4. Salve suas alterações.

Iniciar o coletor OpenTelemetry e o Dev Proxy

Importante

Tanto o Aspire como o OpenLIT requerem Docker para funcionar. Se você não tiver o Docker instalado, siga as instruções na documentação do Docker para instalar o Docker.

  1. Inicie o Docker.

  2. Inicie o coletor OpenTelemetry .

    1. Execute o seguinte comando para iniciar o coletor e dashboard do Aspire OpenTelemetry:

      docker run --rm -it -p 18888:18888 -p 4317:18889 -p 4318:18890 --name aspire-dashboard mcr.microsoft.com/dotnet/aspire-dashboard:latest
      

      Observação

      Quando terminares de usar o dashboard do Aspire, pára o dashboard pressionando Ctrl + C no terminal onde começaste o dashboard. O Docker remove automaticamente o contêiner quando você o para.

    2. Abra o painel do Aspire no seu navegador em http://localhost:18888/login?t=<code>.

  3. Para iniciar o Dev Proxy, altere o diretório de trabalho para a pasta onde você criou o arquivo de configuração do Dev Proxy e execute o seguinte comando:

    devproxy
    

Usar modelo de linguagem e inspecionar dados de telemetria

  1. Faça uma solicitação para o endpoint compatível com OpenAI que configurou o Dev Proxy para intercetar.

  2. Verifique se o Dev Proxy intercetou a solicitação e a resposta. No console, onde o Dev Proxy está sendo executado, você verá informações semelhantes:

     info    Dev Proxy API listening on http://127.0.0.1:8897...
     info    Dev Proxy listening on 127.0.0.1:8000...
    
    Hotkeys: issue (w)eb request, (r)ecord, (s)top recording, (c)lear screen
    Press CTRL+C to stop Dev Proxy
    
    
     req   ╭ POST https://some-resource.cognitiveservices.azure.com/openai/deployments/some-deployment/chat/completions?api-version=2025-01-01-preview
     time  │ 19/05/2025 07:53:38 +00:00
     pass  │ Passed through
     proc  ╰ OpenAITelemetryPlugin: OpenTelemetry information emitted
    
  3. No navegador da Web, navegue até o painel OpenTelemetria.

    1. No menu lateral, selecione Rastreamentos.

    2. Selecione um dos traços chamados DevProxy.OpenAI.

    3. Selecione a extensão da solicitação.

    4. No painel lateral, explore os dados de uso do modelo de idioma.

      Captura de ecrã do painel da Aspire a mostrar dados de telemetria da OpenAI num painel.

    5. No painel lateral, selecione Métricas.

    6. Na lista suspensa Recurso, selecione DevProxy.OpenAI.

    7. Na lista de métricas, selecione gen_ai.client.token.usage para ver um gráfico mostrando o número de tokens que seu aplicativo usa.

      Captura de ecrã do painel da Aspire a mostrar um gráfico de utilização de tokens.

  4. Pare o Dev Proxy pressionando Ctrl + C no terminal onde ele está sendo executado.

Compreender os custos do modelo linguístico

O Dev Proxy suporta estimar os custos do uso de modelos de linguagem. Para permitir que o Dev Proxy estime custos, você precisa fornecer informações sobre preços para os modelos que você usa.

Criar um arquivo de preços

  1. Na mesma pasta onde você criou o arquivo de configuração do Dev Proxy, crie um novo arquivo chamado prices.json.

  2. Adicione o seguinte conteúdo ao ficheiro:

    Ficheiro: prices.json

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/openaitelemetryplugin.pricesfile.schema.json",
      "prices": {
        "o4-mini": {
          "input": 0.97,
          "output": 3.87
        }
      }
    }
    

    Importante

    A chave é o nome do modelo de linguagem. As propriedades input e output referem-se aos preços por milhão de tokens para os tokens de entrada e saída. Se você usar um modelo para o qual não há informações de preço, o Dev Proxy não registrará as métricas de custo.

  3. Salve suas alterações.

  4. No editor de códigos, abra o arquivo de configuração do Dev Proxy.

  5. Amplie a referência OpenAITelemetryPlugin com uma seção de configuração:

    Ficheiro: devproxyrc.json (adicionar configSection ao plugin)

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/rc.schema.json",
      "plugins": [
        {
          "name": "OpenAITelemetryPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
          "configSection": "openAITelemetryPlugin"
        }
      ],
      "urlsToWatch": [
        "https://*.openai.azure.com/openai/deployments/*/chat/completions*",
        "https://*.cognitiveservices.azure.com/openai/deployments/*/chat/completions*"
      ],
      "logLevel": "information",
      "newVersionNotification": "stable",
      "showSkipMessages": true
    }
    
  6. Adicione a openAITelemetryPlugin seção ao arquivo de configuração:

    Ficheiro: devproxyrc.json (com acompanhamento de custos)

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/rc.schema.json",
      "plugins": [
        {
          "name": "OpenAITelemetryPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
          "configSection": "openAITelemetryPlugin"
        }
      ],
      "urlsToWatch": [
        "https://*.openai.azure.com/openai/deployments/*/chat/completions*",
        "https://*.cognitiveservices.azure.com/openai/deployments/*/chat/completions*"
      ],
      "openAITelemetryPlugin": {
        "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/openaitelemetryplugin.schema.json",
        "includeCosts": true,
        "pricesFile": "prices.json"
      },
      "logLevel": "information",
      "newVersionNotification": "stable",
      "showSkipMessages": true
    }
    

    Observe a includeCosts propriedade definida como true e a pricesFile propriedade definida como o nome do arquivo com informações de preços.

  7. Salve suas alterações.

Ver custos estimados

  1. Inicie o Dev Proxy.

  2. Faça uma solicitação para o endpoint compatível com OpenAI que configurou o Dev Proxy para intercetar.

  3. No navegador da Web, navegue até o painel OpenTelemetria.

    1. No painel lateral, selecione Métricas.

    2. Na lista suspensa Recurso, selecione DevProxy.OpenAI.

    3. Na lista de métricas, selecione gen_ai.client.total_cost para ver um gráfico mostrando o custo total estimado em que seu aplicativo incorre para usar os modelos de linguagem.

      Captura de ecrã do painel da Aspire a mostrar um gráfico do custo estimado dos tokens.

  4. Pare o Dev Proxy pressionando Ctrl + C no terminal onde ele está sendo executado.

  5. Pare o coletor OpenTelemetry .

    No terminal onde o painel do Aspire está a funcionar, pressione Ctrl + C para parar o tableiro. O Docker remove automaticamente o contêiner quando você o para.

Próximos passos

Saiba mais sobre o OpenAITelemetryPlugin.