跟踪 Semantic Kernel

Semantic Kernel 是一个轻量级的开源 SDK,充当 AI 中间件,使您能够通过统一的 API 层将 AI 模型集成到 C#、Python 或 Java 代码库中。通过抽象模型交互,它允许您在不重写应用程序逻辑的情况下更换新模型。
MLflow Tracing 为 Semantic Kernel 提供了自动跟踪功能。通过启用 Semantic Kernel 的自动跟踪,使用 mlflow.semantic_kernel.autolog() 函数,MLflow 将捕获 LLM 调用的跟踪信息并将其记录到活动的 MLflow 实验中。
MLflow 跟踪会自动捕获有关 Semantic Kernel 调用的以下信息
- 提示和完成响应
- 聊天历史记录和消息
- 延迟
- 模型名称和提供商
- Kernel 函数和插件
- 模板变量和参数
- 令牌使用信息
- 任何引发的异常
目前,流式传输不支持跟踪。如果您想要此功能,请提交一个功能请求。
开始使用
开始之前,我们先安装所需的库。请注意,我们将使用 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)
令牌使用跟踪
MLflow >= 3.2.0 支持 Semantic Kernel 的令牌使用跟踪。在 Kernel 调用期间的每次 LLM 调用所使用的令牌将被记录在 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 的自动跟踪。