语义内核 是一种轻型开源 SDK,充当 C#、Python 和 Java 的 AI 中间件。 它抽象化模型交互,并跨提供程序编写提示、函数和插件。
MLflow 跟踪 与语义内核集成,可自动检测内核回调并捕获全面的执行跟踪。 无需更改应用逻辑 , 即可启用 mlflow.semantic_kernel.autolog它。
集成提供了完整的视图:
- 提示和完成响应
- 聊天历史记录和消息
- 潜伏期
- 模型名称和提供程序
- 内核函数和插件
- 模板变量和参数
- 令牌使用情况信息
- 引发的任何异常
注释
流式处理当前未跟踪。
先决条件
若要将 MLflow 跟踪与语义内核配合使用,需要安装 MLflow 和相关语义内核包。
开发
对于开发环境,请使用 Databricks Extras 和 Semantic Kernel 安装完整的 MLflow 包:
pip install --upgrade "mlflow[databricks]>=3.1" semantic_kernel openai
完整 mlflow[databricks] 包包括用于 Databricks 的本地开发和试验的所有功能。
生产
对于生产部署,安装和 mlflow-tracing 语义内核:
pip install --upgrade mlflow-tracing semantic_kernel openai
包 mlflow-tracing 已针对生产用途进行优化。
注释
建议使用 MLflow 3 来获得最佳跟踪体验。
在运行示例之前,需要配置环境:
对于不使用 Databricks 笔记本的用户:设置 Databricks 环境变量:
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-personal-access-token"
对于 Databricks 笔记本中的用户:这些凭据会自动为您设置。
API 密钥:确保配置 LLM 提供程序 API 密钥。 对于生产环境,请使用 马赛克 AI 网关或 Databricks 机密,而不要使用硬编码的值,以便更安全地管理 API 密钥。
export OPENAI_API_KEY="your-openai-api-key"
# Add other provider keys as needed
示例用法
语义内核主要使用异步模式。 在笔记本中,可以直接 await ;在脚本中,用 asyncio.run()包装。
import mlflow
mlflow.semantic_kernel.autolog()
import openai
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
openai_client = openai.AsyncOpenAI()
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+ 记录每个 LLM 调用的令牌使用情况,并聚合跟踪信息中的总计。
import mlflow
last_trace_id = mlflow.get_last_active_trace_id()
trace = mlflow.get_trace(trace_id=last_trace_id)
print(trace.info.token_usage)
for span in trace.data.spans:
usage = span.get_attribute("mlflow.chat.tokenUsage")
if usage:
print(span.name, usage)
禁用自动跟踪
禁用语义内核自动跟踪,mlflow.semantic_kernel.autolog(disable=True)或者禁用所有 。mlflow.autolog(disable=True)