Migrer un agent de Model Serving vers Databricks Apps
Migrez un agent IA existant d'un endpoint Model Serving vers Databricks Apps.
Databricks recommande de créer des agents sur Databricks Apps car cela offre les avantages suivants par rapport à Model Serving :
- Itération rapide : itérez sur le code de l'agent et la configuration du déploiement en quelques secondes, avec le debugging local et une transparence totale sur les logs et le comportement de l'agent.
- Gestion de version basée sur Git et CI/CD : Packagez et versionnez le code d'agent Python modulaire avec Git, et déployez-le avec des Declarative Automation Bundles.
- **Prise en charge de l'assistant de codage IA** : utilisez les assistants de codage IA pour développer et migrer votre agent localement.
- Agents asynchrones évolutifs : Créez des agents asynchrones avec des modèles asynchrones Python natifs pour une high concurrency plus élevée.
- Personnalisation flexible du serveur : Utilisez n’importe quel framework ou pile, ajoutez des routes et des middlewares personnalisés, et configurez l’authentification des utilisateurs et des agents aux Endpoint et outils LLM.
- Traçage MLflow : utilisez les modèles journalisés basés sur Git de MLflow et le traçage en temps réel pour surveiller le comportement de l'agent.
- Interface utilisateur de chat intégrée : Les templates d'agent conversationnel incluent une interface de chat prête à l'emploi avec streaming, authentification et historique persistant.
Exigences
- Un agent existant déployé sur un endpoint de Model Serving.
- La CLI Databricks est installée et authentifiée. Consultez Installer ou mettre à jour la Databricks CLI.
- Python 3.11 ou version ultérieure.
- Le gestionnaire de packages
uv. Consultez l'installation uv. - Databricks Apps activées dans votre Workspace. Consultez Configurez votre Workspace Databricks Apps et votre environnement de développement.
Cloner le Template de migration
Le template de migration fournit la base pour développer et déployer un agent sur Databricks Apps, ainsi que les fichiers de compétences d'agent qui enseignent aux assistants de code IA comment effectuer chaque étape de migration.
Clonez le Template et accédez au dossier :
git clone https://github.com/databricks/app-templates.git
cd app-templates/agent-migration-from-model-serving
Le dossier Template contient :
AGENTS.mdInstructions pour les assistants de codage IA décrivant le workflow de migrationskills/: fichiers de compétences pour chaque étape de migration, exécutés séquentiellement par l'assistantagent_server/: La structure de l'agent Databricks Apps cible avec du code de remplacement pour les gestionnaires@invoke()et@stream()databricks.yml: Un template de configuration Declarative Automation Bundles avec des déclarations de ressources d'espace réservé
Migration assistée par l'IA (recommandé)
La migration assistée par l'IA est la méthode recommandée pour utiliser ce Template. Un assistant de codage IA lit AGENTS.md et les fichiers de compétences et gère automatiquement les modifications de code et de configuration.
- Ouvrez le dossier Template dans un assistant de codage IA tel que Cursor, GitHub Copilot ou Claude.
- Demandez à l’assistant d’effectuer la migration en fournissant le nom de votre Endpoint :
"Migrate my Model Serving endpoint `my-agent-endpoint` to a Databricks App"
- L'assistant génère un plan de migration et exécute chaque étape :

Migration manuelle
Databricks recommande d'utiliser des assistants de codage IA pour effectuer la migration. Si vous préférez migrer sans assistant de codage IA, les étapes générales suivantes décrivent le processus.
Ces étapes sont un aperçu général et ne couvrent pas tous les scénarios de migration, tels que les agents à états, les compromis asynchrones/synchrones, l'accès aux artefacts Unity Catalog ou les configurations de ressources complexes.
Utilisez un assistant de codage IA pour aider à la migration ou consultez la compétencemigrate-from-model-serving dans le template pour plus d'informations détaillées.
Étape 1. Download les artefacts de l'agent
- Obtenez le nom et la version du modèle à partir de votre endpoint :
databricks serving-endpoints get <endpoint-name> --output json
- Trouvez
served_entities[0].entity_name(nom du modèle) etentity_versiondans la réponse, puis download les artefacts :
DATABRICKS_CONFIG_PROFILE=<profile> uv run --no-project \
--with "mlflow[databricks]>=2.15.0" \
python3 << 'EOF'
import mlflow
mlflow.set_tracking_uri("databricks")
mlflow.artifacts.download_artifacts(
artifact_uri="models:/<model-name>/<version>",
dst_path="./original_mlflow_model"
)
EOF
Le dossier téléchargé contient :
MLmodel— déclarations de ressources pour l'agent d'originecode/— les fichiers sources Python de l’agentartifacts/— fichiers de configuration et invites optionnelsinput_example.json— une requête d'échantillon pour les tests
Étape 2. Migrer le code de l'agent
Copiez tous les fichiers Python de code/ vers agent_server/ et tous les artéfacts de artifacts/ vers agent_server/artifacts/.
Après avoir déplacé les fichiers, mettez à jour toutes les importations relatives et les chemins de fichiers codés en dur pour refléter la nouvelle structure de dossiers. Ensuite, réécrivez agent_server/agent.py pour utiliser le modèle présenté à l'étape 3.
Étape 3. Transformer le code de l'agent
Sur Model Serving, les agents utilisent un ResponsesAgent basé sur une classe avec des méthodes predict() et predict_stream(). Sur Databricks Apps, le MLflow AgentServer dessert les fonctions de niveau module décorées avec @invoke() et @stream().
Lorsque vous migrez, choisissez l'un des modèles suivants :
- Async (recommandé) : utilise Python
async defetawaitpour traiter plusieurs requêtes simultanément. Pendant qu'une requête attend une réponse du LLM, le serveur traite d'autres requêtes. - Sync : Conserve les modèles Python synchrones de votre agent Model Serving. Choisissez cette option pour une migration minimale ou si votre code repose sur des bibliothèques uniquement synchrones.
- Model Serving (before)
- Apps — async (recommended)
- Apps — sync
La structure d'agent d'origine basée sur les classes.
from mlflow.pyfunc import ResponsesAgent, ResponsesAgentRequest, ResponsesAgentResponse
class MyAgent(ResponsesAgent):
def predict(self, request: ResponsesAgentRequest, params=None) -> ResponsesAgentResponse:
# Synchronous implementation
...
return ResponsesAgentResponse(output=outputs)
def predict_stream(self, request: ResponsesAgentRequest, params=None):
# Synchronous generator
for chunk in ...:
yield ResponsesAgentStreamEvent(...)
La logique de l'agent principal se trouve dans streaming(). La fonction non_streaming() collecte sa sortie et la renvoie sous forme de réponse unique.
from mlflow.genai.agent_server import invoke, stream
from mlflow.types.responses import (
ResponsesAgentRequest,
ResponsesAgentResponse,
ResponsesAgentStreamEvent,
)
@invoke()
async def non_streaming(request: ResponsesAgentRequest) -> ResponsesAgentResponse:
# Async implementation - typically calls streaming() and collects results
outputs = [
event.item
async for event in streaming(request)
if event.type == "response.output_item.done"
]
return ResponsesAgentResponse(output=outputs)
@stream()
async def streaming(request: ResponsesAgentRequest) -> AsyncGenerator[ResponsesAgentStreamEvent, None]:
# Async generator
async for event in ...:
yield event
Extrayez les méthodes de classe dans des fonctions de niveau module décorées avec des changements structurels minimaux.
from mlflow.genai.agent_server import invoke, stream
from mlflow.types.responses import (
ResponsesAgentRequest,
ResponsesAgentResponse,
ResponsesAgentStreamEvent,
)
@invoke()
def non_streaming(request: ResponsesAgentRequest) -> ResponsesAgentResponse:
# Same sync logic from original predict(), extracted from the class
...
return ResponsesAgentResponse(output=outputs)
@stream()
def streaming(request: ResponsesAgentRequest):
# Same sync generator from original predict_stream(), extracted from the class
for chunk in ...:
yield ResponsesAgentStreamEvent(...)
Étape 4. Configurez l'application.
-
Installer les dépendances. Ceci résout les dépendances dans
pyproject.tomlet crée le fichieruv.lockqui les pin pour des installations reproductibles :Bashuv sync -
Exécutez le script de démarrage rapide pour configurer l'authentification, créer l'Experimentation MLflow et générer le fichier
.env:Bashuv run quickstart
Commit le fichier uv.lock généré afin que Databricks Apps installe les mêmes dépendances pinned lorsque vous déployez.
Étape 5. Tester localement
start the serveur d'applications et vérifiez que l'agent répond correctement avant le déploiement.
Testez avec votre input_example.json original à l'aide de curl, puis déployez une fois que l'agent répond comme prévu.
Étape 6. Configurez les ressources
Les agents Model Serving déclarent les ressources dans un fichier MLmodel. Les agents Databricks Apps déclarent les ressources dans le fichier de configuration databricks.yml à l'aide des Declarative Automation Bundles.
Consultez Authentification pour les agents IA.
Mappez vos déclarations de ressources au format équivalent de Declarative Automation Bundles :
Type de ressource MLmodel |
| Autorisation |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Étape 7. Déployez l'agent à l'aide des Declarative Automation Bundles
Déployez votre agent sur Databricks Apps à l'aide des Declarative Automation Bundles.
Avant le déploiement, vérifiez que votre structure de dossiers ressemble à ceci :
<working-directory>/
├── original_mlflow_model/ # Downloaded artifacts from Model Serving
│ ├── MLmodel
│ ├── code/
│ │ └── agent.py
│ ├── input_example.json
│ └── requirements.txt
│
└── <app-name>/ # New Databricks App (ready to deploy)
├── agent_server/
│ ├── agent.py # Migrated agent code
│ └── ...
├── app.yaml
├── databricks.yml # Bundle config with resources
├── pyproject.toml # Python dependencies (uv)
├── uv.lock # Pinned dependencies for reproducible installs
└── ...
Databricks recommande uv (pyproject.toml + uv.lock) pour la gestion des dépendances Python, ce qui permet des installations plus rapides et des builds reproductibles. Lorsque votre application inclut un pyproject.toml et un uv.lock et aucun requirements.txt, Databricks Apps utilise uv pour installer les dépendances. requirements.txt reste pris en charge : si l'un est présent, il prévaut toujours et Databricks Apps utilise pip à la place. Consultez Meilleures pratiques pour les Databricks Apps et Définir les dépendances Python avec uv.
-
Validez la configuration du bundle :
Bashdatabricks bundle validate -
Déployez le bundle sur votre Workspace (
bundle deployupload les fichiers, mais ne start pas l'application) :Bashdatabricks bundle deploy -
start l’application :
Bashdatabricks bundle run <app-resource-name>
Ressources supplémentaires
Après la migration de votre agent, consultez :