Puoi utilizzare un template di prompt salvato per richiedere i modelli di base in IBM watsonx.ai in modo programmatico.
Un modello di prompt è un asset che è possibile creare per acquisire una combinazione di testo statico di prompt, parametri del modello e variabili di prompt che generano i risultati desiderati da uno specifico modello in modo da poterlo riutilizzare.
Per ulteriori informazioni sulle variabili di prompt, consultare Creazione di prompt riutilizzabili.
È possibile utilizzare un modello di prompt nei seguenti modi:
- Inferenza di un foundation model utilizzando un modello di prompt distribuito.
- Distribuire un modello di prompt, quindi utilizzare il modello distribuito in una richiesta di inferenza.
- Aggiungere del testo a un prompt basato su un modello di prompt e quindi dedurre un foundation model (senza distribuire il modello di prompt).
Utilizza le funzioni disponibili nella libreria Python di watsonx.ai dai notebook in watsonx.ai per inoltrare i prompt con un template di prompt.
Notebook di esempio
Per ulteriori informazioni sui passaggi da seguire, vedere Taccuino di esempio: Utilizzare watsonx per gestire le risorse dei modelli di prompt e creare una distribuzione.
Inferenza di un foundation model con un modello di prompt distribuito
L'invio di una richiesta di inferenza a un foundation model distribuito comporta i seguenti passaggi:
Configurare l'APIClient. Quando si deduce un template di prompt distribuito, è necessario specificare lo spazio di distribuzione per la distribuzione in cui è ospitato il template di prompt.
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)
Inoltrare una richiesta di inferenza al modello distribuito.
In questo esempio viene utilizzato un metodo
generate_text
e viene specificato il valore della variabile di promptquestion
.generated_response = client.deployments.generate_text( deployment_id={deployment-id}, params={ GenTextParamsMetaNames.PROMPT_VARIABLES: { "question": "What plans do you offer?" } } )
Distribuzione e deduzione di un modello di prompt
Si può usare la libreria Python per distribuire un modello di prompt e poi fare l'inferenza di un foundation model usando il modello di prompt distribuito. Sono coinvolti i seguenti passi di alto livello. Per i passi completi e per ulteriori opzioni, consultare il blocco note di esempio.
Importare e istanziare l'oggetto PromptTemplateManager.
prompt_mgr = PromptTemplateManager( credentials=Credentials( api_key=<API-KEY>, url=<URL> ), space_id=<SPACE_ID> )
Definire il modello di richiesta.
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."] ] )
Memorizzare il modello di prompt nel progetto per generare un ID del modello di prompt.
stored_prompt_template = prompt_mgr.store_prompt(prompt_template=prompt_template) print(f"Asset id: {stored_prompt_template.prompt_id}")
Caricare il testo nel modello di prompt.
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)
Creare una distribuzione modello di prompt e generare un ID distribuzione.
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 )
Importare e istanziare l'oggetto ModelInference da usare per l'inferenza del foundation model, usando il modello di prompt distribuito.
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 )
Inferenza del foundation model. Assicurarsi di specificare i valori per tutte le variabili di prompt definite nel modello di prompt.
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 } )
Utilizzare un modello di prompt per bozzare il testo di prompt per una richiesta di inferenza
L'inferenza di un foundation model utilizzando un modello di prompt non distribuito comporta i seguenti passaggi. Per i passi completi e per ulteriori opzioni, consultare il blocco note di esempio.
Elencare tutti i template di prompt disponibili.
Per ulteriori informazioni, vedere Elenco di tutti i modelli di prompt.
Caricare il modello di prompt che si desidera utilizzare. Non è necessario distribuire il modello di prompt. Convertire il template in testo di richiesta.
Per ulteriori informazioni, vedere Richiesta di caricamento.
prompt_text = prompt_mgr.load_prompt(prompt_id=stored_prompt_template.prompt_id, astype=PromptTemplateFormats.STRING) print(prompt_text)
Sostituire le variabili di prompt con i valori che si desidera utilizzare.
filled_prompt_text = prompt_text.format(object='credit card')
Inviare il testo del prompt compilato a un foundation model per l'inferenza.
generated_response = model.generate_text(prompt=filled_prompt_input, ...)
Argomento principale: Python Python