0 / 0
Volver a la versión inglesa de la documentación

Inferencia programática de un foundation model mediante una plantilla de consulta

Última actualización: 28 nov 2024
Inferencia programática de un foundation model mediante una plantilla de consulta

Puede utilizar una plantilla de solicitud guardada para solicitar modelos de base en IBM watsonx.ai mediante programación.

Una plantilla de solicitud es un activo que puede crear para capturar una combinación de texto estático de solicitud, parámetros de modelo y variables de solicitud que generan los resultados que desea de un modelo específico para que pueda reutilizarlos.

Para obtener más información sobre las variables de solicitud, consulte Creación de solicitudes reutilizables.

Puede utilizar una plantilla de solicitud de las siguientes maneras:

  • Inferencia de un foundation model utilizando una plantilla de consulta desplegada.
  • Despliegue una plantilla de solicitud y, a continuación, utilice la plantilla desplegada en una solicitud de inferencia.
  • Añada texto a un aviso basado en una plantilla de aviso y, a continuación, infiera un foundation model (sin desplegar la plantilla de aviso).

Utilice las funciones que están disponibles en la biblioteca watsonx.ai Python de los cuadernos en watsonx.ai para enviar solicitudes con una plantilla de solicitud.

Cuaderno de ejemplo

Para obtener más información sobre los pasos a seguir, consulte Cuaderno de muestra: Utilizar watsonx para gestionar activos de plantillas rápidas y crear una implantación.

Inferencia de un foundation model con una plantilla de solicitud desplegada

El envío de una solicitud de inferencia a un foundation model desplegado implica los siguientes pasos:

  1. Configure el APIClient. Al inferir una plantilla de solicitud desplegada, debe especificar el espacio de despliegue para el despliegue donde se aloja la plantilla de solicitud.

    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. Envíe una solicitud de inferencia a la plantilla desplegada.

    En este ejemplo se utiliza el método generate_text y se especifica el valor de la variable de solicitud question .

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

Desplegar e inferir una plantilla de solicitud

Puede utilizar la biblioteca Python para desplegar una plantilla de consulta y, a continuación, inferir un foundation model utilizando la plantilla de consulta desplegada. Están implicados los siguientes pasos de alto nivel. Para ver los pasos completos y más opciones, consulte el cuaderno de ejemplo.

  1. Importar e instanciar el objeto PromptTemplateManager.

    prompt_mgr = PromptTemplateManager(
      credentials=Credentials(
        api_key=<API-KEY>,
        url=<URL>
      ),
      space_id=<SPACE_ID>
    )
    
  2. Defina la plantilla de avisos.

    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": "https://{region}.ml.cloud.ibm.com",
      "apikey": {my-IBM-Cloud-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. Guarde la plantilla de avisos en su proyecto para generar un ID de plantilla de avisos.

    stored_prompt_template = prompt_mgr.store_prompt(prompt_template=prompt_template)
    print(f"Asset id: {stored_prompt_template.prompt_id}")
    
  4. Cargue el texto en la plantilla de solicitud.

    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. Cree un despliegue de plantilla de solicitud y genere un ID de despliegue.

    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. Importe e instancie el objeto ModelInference que se utilizará para inferir el foundation model utilizando la plantilla de solicitud desplegada.

    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. Inferencia del foundation model. Asegúrese de especificar valores para las variables de solicitud definidas en la plantilla de solicitud.

    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
      }
    )
    

 

Utilizar una plantilla de solicitud para redactar un borrador de texto de solicitud para una solicitud de inferencia

La inferencia de un foundation model mediante un modelo de consulta que no está desplegado implica los siguientes pasos. Para ver los pasos completos y más opciones, consulte el cuaderno de ejemplo.

  1. Listar todas las plantillas de solicitud disponibles.

    Para más información, consulte Listar todas las plantillas de avisos.

  2. Cargue la plantilla de solicitud que desea utilizar. No es necesario desplegar la plantilla de solicitud. Convierta la plantilla en texto de solicitud.

    Para obtener más información, consulte Consulta de carga.

    prompt_text = prompt_mgr.load_prompt(prompt_id=stored_prompt_template.prompt_id, astype=PromptTemplateFormats.STRING)
    print(prompt_text)
    
  3. Sustituya las variables de solicitud por los valores que desee utilizar.

    filled_prompt_text = prompt_text.format(object='credit card')
    
  4. Envíe el texto de consulta rellenado a un foundation model para inferirlo.

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

Tema padre: BibliotecaPython