Inférer à l'aide d'un programme un modèle de base à l'aide d'un modèle d'invite

Vous pouvez utiliser un modèle d'invite sauvegardé pour inviter des modèles de base dans IBM watsonx.ai à l'aide d'un programme.

À partir de la version 2.3.1, l'API de génération de texte est obsolète et sera supprimée à l'avenir.

Un modèle d'invite est un actif que vous pouvez créer pour capturer une combinaison de texte statique d'invite, de paramètres de modèle et de variables d'invite qui génèrent les résultats souhaités à partir d'un modèle spécifique afin de pouvoir le réutiliser.

Pour plus d'informations sur les variables d'invite, voir Génération d'invites réutilisables.

Vous pouvez utiliser un modèle d'invite de l'une des manières suivantes:

  • Inférence d'un modèle de base à l'aide d'un modèle d'invite déployé.
  • Déployez un modèle d'invite, puis utilisez le modèle déployé dans une demande d'inférence.
  • Ajoutez du texte à une invite en fonction d'un modèle d'invite, puis inférez un modèle de base (sans déployer le modèle d'invite).

Utilisez les fonctions disponibles dans la bibliothèque watsonx.ai Python à partir de blocs-notes dans watsonx.ai pour soumettre des invites avec un modèle d'invite.

Exemple de notebook

Pour plus d'informations sur la marche à suivre, consultez le guide pratique : Utilisation d' watsonx pour gérer les ressources des modèles d'invite et créer un déploiement.

Inférence d'un modèle de base avec un modèle d'invite déployé

L'envoi d'une demande d'inférence à un modèle de fondation déployé comporte les étapes suivantes :

  1. Configurez l'APIClient. Lorsque vous inférez un modèle d'invite déployé, vous devez spécifier l'espace de déploiement pour le déploiement dans lequel le modèle d'invite est hébergé.

    from ibm_watsonx_ai import APIClient, Credentials
    from ibm_watsonx_ai.metanames import GenTextParamsMetaNames
    
    credentials=Credentials(
      url=<URL>,
      api_key=<API-KEY>,
    )
    
    client = APIClient(credentials)
    client.set.default_space(space_id)
    
  2. Soumettez une demande d'inférence au modèle déployé.

    Dans cet exemple, la méthode generate_text est utilisée et la valeur de la variable d'invite question est spécifiée.

    
    generated_response = client.deployments.generate_text(
      deployment_id={deployment-id},
      params={
         GenTextParamsMetaNames.PROMPT_VARIABLES: {
             "question": "What plans do you offer?"
         }
      }
      )
    

Déploiement et inférence d'un modèle d'invite

Vous pouvez utiliser la bibliothèque Python pour déployer un modèle d'invite, puis inférence un modèle de base à l'aide du modèle d'invite déployé. Les étapes de haut niveau suivantes sont impliquées. Pour obtenir les étapes complètes et d'autres options, voir l' exemple de bloc-notes.

  1. Importez et instanciez l'objet ` PromptTemplateManager `.

    prompt_mgr = PromptTemplateManager(
      credentials=Credentials(
        api_key=<API-KEY>,
        url=<URL>
      ),
      space_id=<SPACE_ID>
    )
    
  2. Définir le modèle d'invite.

    from ibm_watsonx_ai import APIClient
    from ibm_watsonx_ai.foundation_models.prompts import PromptTemplate
    from ibm_watsonx_ai.foundation_models.utils.enums import DecodingMethods
    from ibm_watsonx_ai.metanames import GenTextParamsMetaNames as GenParams
    
    my_credentials = {
      "url": "{cluster_url}",
      "apikey": {api_key},
    }
    
    client = APIClient(my_credentials)
    
    prompt_template = PromptTemplate(
      name="New prompt",
      model_id=client.foundation_models.TextModels.FLAN_T5_XXL,
      model_params = {GenParams.DECODING_METHOD: DecodingMethods.SAMPLE},
      description="My example",
      task_ids=["generation"],
      input_variables=["object"],
      instruction="Answer the following question",
      input_prefix="Human",
      output_prefix="Assistant",
      input_text="What is {object} and how does it work?",
      examples=[
        ["What is a loan and how does it work?",
        "A loan is a debt that is repaid with interest over time."]
      ]
    )
    
  3. Enregistrez le modèle d'invite dans votre projet pour générer un identifiant de modèle d'invite.

    stored_prompt_template = prompt_mgr.store_prompt(prompt_template=prompt_template)
    print(f"Asset id: {stored_prompt_template.prompt_id}")
    
  4. Chargez le texte dans le modèle d'invite.

    from ibm_watsonx_ai.foundation_models.utils.enums import PromptTemplateFormats
    
    prompt_input_text = prompt_mgr.load_prompt(
      prompt_id=stored_prompt_template.prompt_id,
      astype=PromptTemplateFormats.STRING)
    print(prompt_input_text)
    
  5. Créez un déploiement de modèle d'invite et générez un ID de déploiement.

    meta_props = {
      client.deployments.ConfigurationMetaNames.NAME: "SAMPLE DEPLOYMENT PROMPT TEMPLATE",
      client.deployments.ConfigurationMetaNames.ONLINE: {},
      client.deployments.ConfigurationMetaNames.BASE_MODEL_ID: "ibm/granite-13b-chat-v2"
    }
    
    deployment_details = client.deployments.create(
      artifact_id=stored_prompt_template.prompt_id,
      meta_props=meta_props
    )
    
  6. Importez et instanciez l'objet ` ModelInference ` qui servira à l'inférence du modèle de base à l'aide du modèle de prompt déployé.

    from ibm_watsonx_ai.foundation_models import ModelInference
    
    deployment_id = deployment_details.get("metadata", {}).get("id")
    
    model_inference = ModelInference(
      deployment_id=deployment_id,
      api_client=client
    )
    
  7. Inférence du modèle de base. Veillez à spécifier des valeurs pour toutes les variables d'invite définies dans le modèle d'invite.

    from ibm_watsonx_ai.foundation_models.utils.enums import DecodingMethods
    
    model_inference.generate_text(
      params={
        "prompt_variables": {"object": "a mortgage"},
        GenParams.DECODING_METHOD: DecodingMethods.GREEDY,
        GenParams.STOP_SEQUENCES: ['\n\n'],
        GenParams.MAX_NEW_TOKENS: 50
      }
    )
    

 

Utiliser un modèle d'invite pour brouillon du texte d'invite pour une demande d'inférence

L'inférence d'un modèle de base à l'aide d'un modèle d'invite qui n'est pas déployé implique les étapes suivantes. Pour obtenir les étapes complètes et d'autres options, voir l' exemple de bloc-notes.

  1. Répertoriez tous les modèles d'invite disponibles.

    Pour plus d'informations, consultez la section « Répertorier tous les modèles d'invite ».

  2. Chargez le modèle d'invite que vous souhaitez utiliser. Le modèle d'invite n'a pas besoin d'être déployé. Convertissez le modèle en texte d'invite.

    Pour plus d'informations, consultez l'invite de chargement.

    prompt_text = prompt_mgr.load_prompt(prompt_id=stored_prompt_template.prompt_id, astype=PromptTemplateFormats.STRING)
    print(prompt_text)
    
  3. Remplacez les variables d'invite par les valeurs que vous souhaitez utiliser.

    filled_prompt_text = prompt_text.format(object='credit card')
    
  4. Envoyez le texte d'invite rempli à un modèle de base pour l'inférence.

    generated_response = model.generate_text(prompt=filled_prompt_input, ...)