Migrer un agent de Model Serving vers Databricks Apps
Migrez un agent IA existant d’un Endpoint de Model Serving vers Databricks Apps.
Databricks recommande la création d'agents sur Databricks Apps, car elle offre les avantages suivants par rapport à Model Serving :
- Itération rapide : Itérez sur le code d'agent et la configuration de déploiement en quelques secondes, avec debugging local et transparence totale des Logs et du comportement de l'agent.
- **Gestion de versions basée sur Git et CI/CD** : Packagez et versionnez le code d'agent Python modulaire avec Git, et déployez-le avec des Bundles d'automatisation déclaratifs.
- **Prise en charge des assistants 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 concurrence 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 LLM et aux outils.
- 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 des agents.
- Interface utilisateur de chat intégré : les Template d'agents conversationnels incluent une interface de chat prête à l'emploi avec le streaming, l'authentification et un historique persistant.
Exigences
- Un agent existant déployé sur un endpoint de Model Serving.
- La CLI Databricks installée et authentifiée. Consultez Installer ou mettre à jour la CLI Databricks.
- Python 3,11 ou version ultérieure.
- Le gestionnaire de packages
uv. Voir l'installation uv. - Databricks Apps activées dans votre Workspace. Consultez Configurez votre Workspace Databricks Apps et votre environnement de développement.
Clonez le Template de migration
Le template de migration fournit l'ossature pour le développement et le déploiement d'un agent sur Databricks Apps, ainsi que les fichiers de compétences d'agent qui enseignent aux assistants de codage d'IA comment effectuer chaque étape de migration.
Cloner 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.md: instructions pour les assistants de codage IA décrivant le workflow de migration.skills/: Fichiers de compétences pour chaque étape de migration, exécutés séquentiellement par l'assistantagent_server/: L'échafaudage de l'agent Databricks Apps cible avec du code d'espace réservé 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ée)
La migration assistée par 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 du code et de la configuration.
- Ouvrez le dossier de template dans un assistant de code 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 l'utilisation d'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 offrent un aperçu général et ne couvrent pas tous les scénarios de migration, tels que les agents avec état, les compromis entre asynchrone et synchrone, l'accès aux artefacts Unity Catalog ou les configurations de ressources complexes.
Utilisez un assistant de codage IA pour faciliter la migration ou consultez la migrate-from-model-serving compétence dans le Template pour plus d'informations détaillées.
Étape 1. Download les artefacts d'agent
- Obtenez le nom et la version du modèle 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 download contient :
MLmodel— déclarations de ressources pour l'agent d'originecode/— les fichiers source Python de l'agentartifacts/– fichiers et invites de configuration facultatifsinput_example.json— une demande d'échantillon pour les tests
Étape 2. Migrer le code d'agent
Copier tous les fichiers Python de code/ vers agent_server/ et tous les artefacts 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 illustré à l'étape 3.
Étape 3. Transformer le code d'agent
Sur Model Serving, les agents utilisent une ResponsesAgent basée sur une classe avec les méthodes predict() et predict_stream(). Sur Databricks Apps, le AgentServer MLflow sert les fonctions de niveau module décorées avec @invoke() et @stream().
Lorsque vous migrez, choisissez l'un des modèles suivants :
- Asynchrone (recommandé) : utilise Python
async defetawaitpour gérer plusieurs requêtes simultanément. Pendant qu’une requête attend une réponse de l’LLM, le serveur traite d’autres requêtes. - **Synchronisation** : Maintient les modèles Python synchrones à partir 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 d'agent principale se trouve dans streaming(). La fonction non_streaming() recueille 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
Extraire les méthodes de classe dans des fonctions de niveau module décorées avec des modifications structurelles minimales.
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. Configurer 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'expérimentation MLflow et générer le fichier
.env:Bashuv run quickstart
Commit the fichier uv.lock généré afin que Databricks Apps installe les mêmes dépendencies pinned lorsque vous déployez.
Étape 5. Tester localement
start the app server et vérifiez que l'agent répond correctement avant de déployer.
Testez avec votre input_example.json d'origine en utilisant curl, puis déployez après que l'agent réponde comme prévu.
Étape 6. Configurer 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 en utilisant des Declarative Automation Bundles.
Consultez Authentification pour les agents IA.
Mappez vos déclarations de ressources au format Declarative Automation Bundles équivalent :
Type de ressource MLmodel |
| Autorisation |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Étape 7. Déployer l'agent à l'aide de Declarative Automation Bundles
Déployez votre agent vers Databricks Apps à l'aide des Declarative Automation Bundles.
Avant le déploiement, vérifiez que la structure de vos dossiers est la suivante :
<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. Quand 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 a toujours la priorité et Databricks Apps utilise pip à la place. Veuillez consulter Bonnes pratiques pour 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 avoir migré votre agent, voir :