跳到主要内容

追踪 Semantic Kernel

Semantic Kernel Tracing via autolog

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

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

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

  • 提示和完成响应
  • 聊天历史和消息
  • 延迟
  • 模型名称和提供商
  • Kernel 函数和插件
  • 模板变量和参数
  • 令牌使用情况信息
  • 如果引发任何异常

目前不支持流式传输追踪。如果您需要此功能,请提交一个 功能请求

开始使用

要开始,让我们安装所需的库。请注意,我们将使用 OpenAI 作为演示目的,但本教程适用于 Semantic Kernel 支持的所有提供商。

bash
pip install 'mlflow[genai]>=3.2.0' semantic_kernel openai

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

重要

您必须在运行 Semantic Kernel 代码之前运行 mlflow.semantic_kernel.autolog()。如果未执行此操作,追踪信息可能无法正确记录。

python
import mlflow

mlflow.semantic_kernel.autolog()

最后,对于设置,让我们建立我们的 OpenAI 令牌

python
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 笔记本中运行它们,代码将按原样工作。对于脚本,您需要适当地包装异步调用(例如,使用 asyncio.run())。

展示追踪集成的最简单示例是仪器化一个 ChatCompletion Kernel

python
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)

令牌使用跟踪

MLflow >= 3.2.0 支持 Semantic Kernel 的令牌使用情况跟踪。内核调用期间每次 LLM 调用的令牌使用情况将记录在 mlflow.chat.tokenUsage span 属性中,整个追踪的总使用情况将记录在 mlflow.trace.tokenUsage 元数据字段中。

python
# 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']}")
text
== Total token usage: ==
Input tokens: 14
Output tokens: 113
Total tokens: 127

禁用自动追踪

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