了解语言模型用法

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

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

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

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

创建开发代理配置文件

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

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

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

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.28.0/rc.schema.json",
      "plugins": [
        {
          "name": "OpenAITelemetryPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/dev-proxy-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 收集器和开发代理

重要

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

  1. 启动 Docker。

  2. 启动 OpenTelemetry 收集器。

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

      注释

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

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

  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. 在侧面板中,浏览语言模型使用情况数据。

      显示 OpenAI 遥测数据跨度的 .NET Aspire 仪表板屏幕截图。

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

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

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

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

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

了解语言模型成本

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

创建价格文件

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

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

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

    重要

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

  3. 保存更改。

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

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

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.28.0/rc.schema.json",
      "plugins": [
        {
          "name": "OpenAITelemetryPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/dev-proxy-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 节添加到配置文件:

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.28.0/rc.schema.json",
      "plugins": [
        {
          "name": "OpenAITelemetryPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/dev-proxy-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/v0.28.0/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 以查看显示应用程序使用语言模型产生的估计总成本的图表。

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

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

  5. 停止 OpenTelemetry 收集器。

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

后续步骤

详细了解 OpenAITelemetryPlugin。