Aller au contenu principal

Traçage DeepSeek

Traçage Deepseek utilisant l'autolog

MLflow Tracing offre une capacité de traçage automatique pour les modèles Deepseek grâce à l'intégration du SDK OpenAI. Étant donné que DeepSeek utilise un format d'API compatible OpenAI, vous pouvez utiliser mlflow.openai.autolog() pour suivre les interactions avec les modèles DeepSeek.

Python
import mlflow

mlflow.openai.autolog()

Le traçage MLflow capture automatiquement les informations suivantes relatives aux appels DeepSeek :

  • Prompts et réponses de complétion
  • Latences
  • Nom du modèle
  • Métadonnées supplémentaires telles que temperature, max_tokens, si spécifié.
  • Appel de fonction si renvoyé dans la réponse
  • Toute exception si levée
remarque

Sur les clusters de compute serverless, l'autologging n'est pas activé automatiquement. Vous devez appeler explicitement mlflow.openai.autolog() pour activer le traçage automatique de cette intégration.

Prérequis

Pour utiliser MLflow Tracing avec DeepSeek (en utilisant son API compatible OpenAI), vous devez installer MLflow et le SDK OpenAI.

Pour les environnements de développement, installez le package MLflow complet avec les extras Databricks et openai:

Bash
pip install --upgrade "mlflow[databricks]>=3.1" openai

Le package mlflow[databricks] complet inclut toutes les fonctionnalités pour le développement local et l’expérimentation sur Databricks.

remarque

MLflow 3 est fortement recommandé pour la meilleure expérience de traçage.

Avant d'exécuter les exemples, vous devrez configurer votre environnement :

Pour les utilisateurs en dehors des notebooks Databricks : Définissez vos variables d'environnement Databricks :

Bash
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-personal-access-token"

Pour les utilisateurs au sein des Notebooks Databricks : ces identifiants sont automatiquement configurés pour vous.

Clés API : Assurez-vous que votre clé API DeepSeek est configurée. Pour une utilisation en production, utilisez AI Gateway ou les secrets Databricks au lieu de valeurs codées en dur :

Bash
export DEEPSEEK_API_KEY="your-deepseek-api-key"

APIs prises en charge

MLflow prend en charge le traçage automatique pour les APIs DeepSeek suivantes via l'intégration OpenAI :

Achèvement du chat

Appel de fonction

Streaming

Asynchrone

✅ (*1)

✅ (*2)

Achèvement du chat

Appel de fonction

Streaming

Asynchrone

✅ (*1)

✅ (*2)

(*1) La prise en charge du streaming nécessite MLflow 2,15,0 ou version ultérieure. (*2) La prise en charge asynchrone nécessite MLflow 2,21,0 ou version ultérieure.

Pour demander la prise en charge d'APIs supplémentaires, veuillez ouvrir une demande de fonctionnalité sur GitHub.

Exemple de base

Python
import openai
import mlflow
import os

# Ensure your DEEPSEEK_API_KEY is set in your environment
# os.environ["DEEPSEEK_API_KEY"] = "your-deepseek-api-key" # Uncomment and set if not globally configured

# Enable auto-tracing for OpenAI (works with DeepSeek)
mlflow.openai.autolog()

# Set up MLflow tracking to Databricks
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/Shared/deepseek-demo")

# Initialize the OpenAI client with DeepSeek API endpoint and your key
client = openai.OpenAI(
base_url="https://api.deepseek.com",
api_key=os.environ.get("DEEPSEEK_API_KEY") # Or directly pass your key string
)

messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the capital of France?"},
]

response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
temperature=0.1,
max_tokens=100,
)

L’exemple ci-dessus devrait générer une trace dans l'Experimentation dans l’interface utilisateur MLflow :

Deepseek Traçage

attention

Pour les environnements de production, utilisez AI Gateway ou les secrets Databricks au lieu de valeurs codées en dur pour la gestion sécurisée des clés API.

Prise en charge du streaming et de l'asynchrone

MLflow prend en charge le suivi pour le streaming et les API DeepSeek asynchrones. Visitez la documentation de traçage OpenAI pour des extraits de code d'exemple permettant de tracer les appels de streaming et asynchrones via le SDK OpenAI.

Exemple avancé : agent d'appel de fonction

MLflow Tracing capture automatiquement les réponses d'appel de fonction des modèles DeepSeek par l'intermédiaire du SDK OpenAI. L’instruction de fonction dans la réponse sera mise en surbrillance dans l’interface utilisateur de la trace. De plus, vous pouvez annoter la fonction d’outil avec le décorateur @mlflow.trace pour créer un intervalle pour l’exécution de l’outil.

L'exemple suivant implémente un agent d'appel de fonction simple utilisant DeepSeek Function Calling et MLflow Tracing.

Python
import json
from openai import OpenAI
import mlflow
from mlflow.entities import SpanType
import os

# Ensure your DEEPSEEK_API_KEY is set in your environment
# os.environ["DEEPSEEK_API_KEY"] = "your-deepseek-api-key" # Uncomment and set if not globally configured

# Initialize the OpenAI client with DeepSeek API endpoint and your key
client = OpenAI(
base_url="https://api.deepseek.com",
api_key=os.environ.get("DEEPSEEK_API_KEY") # Or directly pass your key string
)

# Set up MLflow tracking to Databricks if not already configured
# mlflow.set_tracking_uri("databricks")
# mlflow.set_experiment("/Shared/deepseek-agent-demo")

# Assuming autolog is enabled globally or called earlier
# mlflow.openai.autolog()

# Define the tool function. Decorate it with `@mlflow.trace` to create a span for its execution.
@mlflow.trace(span_type=SpanType.TOOL)
def get_weather(city: str) -> str:
if city == "Tokyo":
return "sunny"
elif city == "Paris":
return "rainy"
return "unknown"


tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
},
},
}
]

_tool_functions = {"get_weather": get_weather}


# Define a simple tool calling agent
@mlflow.trace(span_type=SpanType.AGENT)
def run_tool_agent(question: str):
messages = [{"role": "user", "content": question}]

# Invoke the model with the given question and available tools
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
tools=tools,
)

ai_msg = response.choices[0].message
messages.append(ai_msg)

# If the model request tool call(s), invoke the function with the specified arguments
if tool_calls := ai_msg.tool_calls:
for tool_call in tool_calls:
function_name = tool_call.function.name
if tool_func := _tool_functions.get(function_name):
args = json.loads(tool_call.function.arguments)
tool_result = tool_func(**args)
else:
raise RuntimeError("An invalid tool is returned from the assistant!")

messages.append(
{
"role": "tool",
"tool_call_id": tool_call.id,
"content": tool_result,
}
)

# Sent the tool results to the model and get a new response
response = client.chat.completions.create(
model="deepseek-chat", messages=messages
)

return response.choices[0].message.content


# Run the tool calling agent
question = "What's the weather like in Paris today?"
answer = run_tool_agent(question)

Désactiver le suivi automatique

Le traçage automatique pour DeepSeek (via l'SDK OpenAI) peut être désactivé globalement en appelant mlflow.openai.autolog(disable=True) ou mlflow.autolog(disable=True).