跳到主要内容

追踪 Semantic Kernel

Semantic Kernel Tracing via autolog

Semantic Kernel 是一个轻量级的开源 SDK,用作 AI 中间件,使您能够通过统一的 API 层将 AI 模型集成到您的 C#、Python 或 Java 代码库中。通过抽象模型交互,它允许您在不重写应用程序逻辑的情况下更换新模型。

MLflow 追踪为 Semantic Kernel 提供了自动追踪功能。通过 mlflow.semantic_kernel.autolog() 函数为 Semantic Kernel 启用自动追踪后,MLflow 将捕获 LLM 调用的追踪信息,并将其记录到活动的 MLflow 实验中。

MLflow 追踪会自动捕获有关 Semantic Kernel 调用的以下信息

  • 提示和完成响应
  • 聊天历史和消息
  • 延迟
  • 模型名称和提供商
  • 内核函数和插件
  • 模板变量和参数
  • Token 使用信息
  • 任何抛出的异常

目前,不支持对流式处理进行追踪。如果您需要此功能,请提交一个功能请求

开始使用

首先,让我们安装所需的库。请注意,我们将使用 OpenAI 进行演示,但本教程适用于 Semantic Kernel 支持的所有提供商。

pip install 'mlflow>=3.2.0' semantic_kernel openai

然后,在您的 Python 代码中启用自动日志记录

重要

您必须在运行 Semantic Kernel 代码之前运行 mlflow.semantic_kernel.autolog()。否则,追踪信息可能无法正确记录。

import mlflow

mlflow.semantic_kernel.autolog()

最后,为了完成设置,让我们建立 OpenAI 令牌

import os
from getpass import getpass

# Set the OpenAI API key as an environment variable
os.environ["OPENAI_API_KEY"] = getpass("openai_api_key: ")

示例用法

注意

Semantic Kernel 主要使用异步编程模式。下面的示例使用 async/await 语法。如果您在 Jupyter Notebook 中运行这些代码,它们将按原样工作。对于脚本,您需要适当地包装异步调用(例如,使用 asyncio.run())。

展示追踪集成最简单的例子是为一个聊天补全内核(ChatCompletion Kernel)添加追踪功能。

import openai
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
from semantic_kernel.functions.function_result import FunctionResult

# Create a basic OpenAI client
openai_client = openai.AsyncOpenAI()

# Create a Semantic Kernel instance and register the OpenAI chat completion service
kernel = Kernel()
kernel.add_service(
OpenAIChatCompletion(
service_id="chat-gpt",
ai_model_id="gpt-4o-mini",
async_client=openai_client,
)
)

answer = await kernel.invoke_prompt("Is sushi the best food ever?")
print("AI says:", answer)

Token 使用情况追踪

MLflow >= 3.2.0 支持对 Semantic Kernel 的 Token 使用情况进行追踪。在内核调用期间,每次 LLM 调用的 Token 使用情况将被记录在 mlflow.chat.tokenUsage span 属性中,而整个追踪过程中的总使用量将被记录在 mlflow.trace.tokenUsage 元数据字段中。

# Generate a trace using the above example
# ...


# Get the trace object just created
last_trace_id = mlflow.get_last_active_trace_id()
trace = mlflow.get_trace(trace_id=last_trace_id)

# Print the token usage
total_usage = trace.info.token_usage
print("== Total token usage: ==")
print(f" Input tokens: {total_usage['input_tokens']}")
print(f" Output tokens: {total_usage['output_tokens']}")
print(f" Total tokens: {total_usage['total_tokens']}")
== Total token usage: ==
Input tokens: 14
Output tokens: 113
Total tokens: 127

禁用自动追踪

可以通过调用 mlflow.semantic_kernel.autolog(disable=True)mlflow.autolog(disable=True) 来全局禁用对 Semantic Kernel 的自动追踪。