使用语言模型会产生成本。 若要了解应用程序如何使用大型语言模型,请使用开发代理截获与 OpenAI 兼容的请求和响应。 开发代理分析请求和响应以及记录遥测数据,以帮助了解应用程序如何使用大型语言模型。 此信息允许你优化应用程序并降低成本。
开发代理以 OpenTelemetry 格式记录语言模型使用情况数据。 可以使用任何与 OpenTelemetry 兼容的仪表板来可视化数据。 例如,可以使用 .NET Aspire 仪表板 或 OpenLIT。 遥测数据包括请求和响应中使用的令牌数、使用的令牌的成本,以及会话过程中所有请求的总成本。
使用开发代理截获与 OpenAI 兼容的请求和响应
若要截获与 OpenAI 兼容的请求和响应,请使用 OpenAITelemetryPlugin。 此插件会截获与 OpenAI 兼容的请求和响应中的遥测数据,并发出 OpenTelemetry 数据。
创建开发代理配置文件
使用
devproxy config new
命令或使用 Dev Proxy Toolkit 扩展创建新的开发代理配置文件。将
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 }
配置属性
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 }
保存更改。
启动 OpenTelemetry 收集器和开发代理
重要
.NET Aspire 和 OpenLIT 都需要 Docker 才能运行。 如果没有安装 Docker,请按照 Docker 文档中 的说明安装 Docker。
启动 Docker。
启动 OpenTelemetry 收集器。
运行以下命令以启动 .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 会在停止容器时自动删除该容器。
请在您的浏览器中打开 .NET Aspire 仪表板
http://localhost:18888/login?t=<code>
。
若要启动开发代理,请将工作目录更改为创建开发代理配置文件的文件夹,并运行以下命令:
devproxy
使用语言模型并检查遥测数据
向配置为截获的开发代理的 OpenAI 兼容终结点发出请求。
验证开发代理是否截获了请求和响应。 在运行开发代理的控制台中,应会看到类似的信息:
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
在 Web 浏览器中,导航到 OpenTelemetry 仪表板。
在正在运行的终端中按 Ctrl + C 停止开发代理。
了解语言模型成本
开发代理支持估算使用语言模型的成本。 若要允许开发代理估算成本,需要提供有关所用模型价格的信息。
创建价格文件
在创建开发代理配置文件的同一文件夹中,创建一个名为
prices.json
的新文件。将以下内容添加到文件:
{ "$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 } } }
重要
密钥是语言模型的名称。
input
和output
属性分别是输入和输出令牌每百万个令牌的价格。 如果使用没有价格信息的模型,则开发代理不会记录成本指标。保存更改。
在代码编辑器中,打开开发代理配置文件。
使用配置部分扩展
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 }
将
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
属性设置为包含价格信息的文件名。保存更改。
查看估计成本
启动开发代理。
向你配置开发代理服务器以拦截的 OpenAI 兼容终结点发出请求。
在 Web 浏览器中,导航到 OpenTelemetry 仪表板。
在正在运行的终端中按 Ctrl + C 停止开发代理。
停止 OpenTelemetry 收集器。
在运行 .NET Aspire 仪表板的终端中,按 Ctrl + C 停止仪表板。 Docker 会在停止容器时自动删除该容器。
后续步骤
详细了解 OpenAITelemetryPlugin。