了解语言模型用法

概览
目标: 使用 OpenTelemetry 监视 LLM 使用情况
时间: 20 分钟
Plugins:OpenAITelemetryPlugin
先决条件:设置开发代理、Docker

使用语言模型会产生成本。 若要了解应用程序如何使用大型语言模型,请使用开发代理截获与 OpenAI 兼容的请求和响应。 开发代理分析请求和响应以及记录遥测数据,以帮助了解应用程序如何使用大型语言模型。 此信息允许你优化应用程序并降低成本。

开发代理以 OpenTelemetry 格式记录语言模型使用情况数据。 可以使用任何与 OpenTelemetry 兼容的仪表板来可视化数据。 例如,可以使用 Aspire 仪表板 或 OpenLIT。 遥测数据包括请求和响应中使用的令牌数、使用的令牌的成本,以及会话过程中所有请求的总成本。

使用开发代理截获与 OpenAI 兼容的请求和响应

若要截获与 OpenAI 兼容的请求和响应,请使用 OpenAITelemetryPlugin。 此插件会截获与 OpenAI 兼容的请求和响应中的遥测数据,并发出 OpenTelemetry 数据。

创建开发代理配置文件

  1. 使用 devproxy config new 命令或使用 Dev Proxy Toolkit 扩展创建新的开发代理配置文件。

  2. 将 OpenAITelemetryPlugin 添加到配置文件中。

    文件: devproxyrc.json

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
      "plugins": [
        {
          "name": "OpenAITelemetryPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
        }
      ],
      "urlsToWatch": [
      ],
      "logLevel": "information",
      "newVersionNotification": "stable",
      "showSkipMessages": true
    }
    
  3. 配置属性 urlsToWatch 以包含要截获的 OpenAI 兼容请求的 URL。 以下示例截获对 Azure OpenAI 聊天完成请求的请求。

    文件: devproxyrc.json(使用 Azure OpenAI URL)

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/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. 保存更改。

启动 OpenTelemetry 收集器和开发代理

重要

Aspire 和 OpenLIT 都需要 Docker 才能运行。 如果没有安装 Docker,请按照 Docker 文档中 的说明安装 Docker。

  1. 启动 Docker。

  2. 启动 OpenTelemetry 收集器。

    1. 运行以下命令以启动 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
      

      注释

      使用完 Aspire 仪表板后,在启动仪表板的终端中按 Ctrl + C 停止仪表板。 Docker 会在停止容器时自动删除该容器。

    2. 在你的浏览器中打开 http://localhost:18888/login?t=<code> Aspire 仪表板。

  3. 若要启动开发代理,请将工作目录更改为创建开发代理配置文件的文件夹,并运行以下命令:

    devproxy
    

使用语言模型并检查遥测数据

  1. 向配置为截获的开发代理的 OpenAI 兼容终结点发出请求。

  2. 验证开发代理是否截获了请求和响应。 在运行开发代理的控制台中,应会看到类似的信息:

     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. 在 Web 浏览器中,导航到 OpenTelemetry 仪表板。

    1. 在侧菜单中,选择跟踪记录。

    2. 选择一个名为DevProxy.OpenAI的轨迹。

    3. 选择请求范围。

    4. 在侧面板中,浏览语言模型使用情况数据。

      Aspire 仪表板的屏幕截图,其中显示了跨度的 OpenAI 遥测数据。

    5. 在侧面板中,切换到 “指标”。

    6. 在 “资源 ”下拉列表中,选择 “DevProxy.OpenAI”。

    7. 从指标列表中,选择 gen_ai.client.token.usage 以查看显示应用程序使用的令牌数的图表。

      Aspire 仪表板的屏幕截图,其中显示了令牌使用情况图表。

  4. 在正在运行的终端中按 Ctrl + C 停止开发代理。

了解语言模型成本

开发代理支持估算使用语言模型的成本。 若要允许开发代理估算成本,需要提供有关所用模型价格的信息。

创建价格文件

  1. 在创建开发代理配置文件的同一文件夹中,创建一个名为 prices.json的新文件。

  2. 将以下内容添加到文件:

    文件: prices.json

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

    重要

    密钥是语言模型的名称。 input 和 output 属性分别是输入和输出令牌每百万个令牌的价格。 如果使用没有价格信息的模型,则开发代理不会记录成本指标。

  3. 保存更改。

  4. 在代码编辑器中,打开开发代理配置文件。

  5. 使用配置部分扩展 OpenAITelemetryPlugin 引用。

    文件: devproxyrc.json(向插件添加 configSection)

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/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. 将 openAITelemetryPlugin 节添加到配置文件:

    文件: devproxyrc.json(包含成本跟踪)

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/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/v3.3.1/openaitelemetryplugin.schema.json",
        "includeCosts": true,
        "pricesFile": "prices.json"
      },
      "logLevel": "information",
      "newVersionNotification": "stable",
      "showSkipMessages": true
    }
    

    请注意,includeCosts 属性设置为 true,以及 pricesFile 属性设置为包含价格信息的文件名。

  7. 保存更改。

查看估计成本

  1. 启动开发代理。

  2. 向配置为截获的开发代理的 OpenAI 兼容终结点发出请求。

  3. 在 Web 浏览器中,导航到 OpenTelemetry 仪表板。

    1. 在侧面板中,选择 “指标”。

    2. 在 “资源 ”下拉列表中,选择 “DevProxy.OpenAI”。

    3. 从指标列表中,选择 gen_ai.client.total_cost 以查看显示应用程序使用语言模型产生的估计总成本的图表。

      Aspire 仪表板的屏幕截图,其中显示了估计令牌成本的图表。

  4. 在正在运行的终端中按 Ctrl + C 停止开发代理。

  5. 停止 OpenTelemetry 收集器。

    在运行 Aspire 仪表板的终端中,按 Ctrl + C 停止仪表板。 Docker 会在停止容器时自动删除该容器。

后续步骤

详细了解 OpenAITelemetryPlugin。