Questo documento descrive come richiamare i modelli Anthropic Claude per generare risposte per input di testo e multimodali, utilizzando l'SDK Vertex AI per ABAP. I modelli Claude possono accettare più modalità di input, tra cui testo, immagini e documenti. Puoi utilizzare i modelli Claude per casi d'uso come i seguenti:
- Riassumere un testo in formato libero
- Descrivere o interpretare gli asset multimediali
- Traduzione tra lingue
L'utilizzo di modelli generativi per creare funzionalità incentrate sull'AI non richiede alcuna competenza in machine learning (ML). Non devi raccogliere un set di dati di grandi dimensioni o addestrare un modello. Per iniziare il tuo primo programma, ti basta descrivere in poche frasi cosa vuoi che faccia il modello. L'SDK Vertex AI per ABAP fornisce classi e metodi ABAP per accedere ai modelli Claude dal tuo ambiente SAP.
Prima di iniziare
Prima di utilizzare l'SDK Vertex AI per ABAP con i modelli Claude, assicurati che tu o i tuoi amministratori abbiate completato i seguenti prerequisiti:
- Abilitato l'API Vertex AI nel tuo progetto Google Cloud .
- Hai abilitato un modello Claude supportato da Model Garden nel tuo progetto Google Cloud .
- Installato l'SDK Vertex AI per ABAP nel tuo ambiente SAP.
- Configura l'autenticazione per accedere all'API Vertex AI.
- Configurato i parametri di generazione del modello.
Inviare una richiesta a Claude
Questa sezione spiega come inviare richieste ai modelli Claude tramite l'API Vertex AI utilizzando l'SDK Vertex AI per ABAP.
Istanzia la classe di invoker multimodale Claude
Per richiamare i modelli di testo e multimodali Claude utilizzando prompt di testo o multimodali, puoi utilizzare la classe /GOOG/CL_MODEL_CLAUDE
.
Istanzia la classe
passando la chiave del modello configurata nei parametri di generazione del modello:
DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).
Sostituisci MODEL_KEY
con il nome della chiave del modello, configurato
nei parametri di generazione del modello.
Generare contenuti con un prompt
Per generare contenuti fornendo
un prompt di testo al modello, puoi utilizzare il metodo GENERATE_CONTENT
:
lo_model->generate_content( 'PROMPT' ).
Sostituisci PROMPT
con il tuo prompt di testo.
Fornire istruzioni di sistema al modello
Per trasmettere al modello istruzioni di sistema basate su testo,
puoi utilizzare il metodo SET_SYSTEM_INSTRUCTIONS
:
lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).
Sostituisci SYSTEM_INSTRUCTIONS
con le istruzioni di sistema per il modello.
Imposta la configurazione di generazione per il modello
Mantieni la configurazione della generazione per i modelli nella
tabella /GOOG/AI_CONFIG
.
Per ignorare la configurazione di generazione per una chiamata specifica, puoi utilizzare
il metodo SET_GENERATION_CONFIG
.
Se il parametro di importazione per una proprietà generata è impostato, viene preso in considerazione il valore parametro passato.
lo_model->set_generation_config(
iv_temperature = 'TEMPERATURE'
iv_top_p = 'TOP_P'
iv_top_k = 'TOP_K'
iv_max_output_tokens = 'MAX_OUTPUT_TOKENS' ).
Sostituisci quanto segue:
TEMPERATURE
: Temperatura di casualità.TOP_P
: campionamento Top-P.TOP_K
: campionamento top-K.MAX_OUTPUT_TOKENS
: Numero massimo di token di output per messaggio
Per saperne di più su questi parametri, consulta Configurare i parametri di generazione del modello.
Passare l'input multimodale al modello
Puoi richiamare i modelli Gemini utilizzando input multimodali, che possono essere testo, immagini o documenti. Puoi passare l'input per immagini e PDF come dati non elaborati. Per i PDF, puoi anche fornire un URI se il PDF è accessibile pubblicamente.
La tabella seguente elenca i tipi MIME supportati:
Tipo di media | Tipi MIME supportati |
---|---|
Immagini |
|
Documenti |
|
Imposta dati non elaborati
Per fornire i dati non elaborati di un file come input al modello,
insieme al relativo tipo MIME, puoi utilizzare il metodo SET_INLINE_DATA
:
lo_model->set_inline_data( iv_mime_type = 'MIME_TYPE'
iv_data = 'RAW_DATA'
iv_type = 'base64' ).
Sostituisci quanto segue:
MIME_TYPE
: il tipo MIME standard IANA dei dati non elaborati. Per impostazione predefinita, il tipo MIME è impostato suimage/jpeg
.RAW_DATA
: dati non elaborati con codifica Base64 dell'immagine o del PDF da includere inline nel prompt.
Per cancellare i dati non elaborati dei file dall'input del modello con la stessa istanza della classe /GOOG/CL_MODEL_CLAUDE
, puoi utilizzare il metodo CLEAR_INLINE_DATA
:
lo_model->clear_inline_data( ).
Contare il numero di token in un prompt di testo
Per contare il numero di token in un prompt di testo prima di richiamare il
modello con il prompt, puoi utilizzare il metodo COUNT_TOKENS
:
DATA(lv_total_tokens) = lo_model->count_tokens( iv_prompt_text = 'PROMPT'
iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
)->get_total_tokens( ).
Sostituisci quanto segue:
PROMPT
: il tuo prompt di testo.SYSTEM_INSTRUCTIONS
: le istruzioni di sistema per il modello.
Aggiungere sequenze di interruzioni
Un stop_sequence
è un insieme di stringhe che indica a Claude di interrompere la generazione
quando incontra una di queste stringhe nella sua risposta. In sostanza, è un comando che dice a Claude: "Se generi questa sequenza, interrompi immediatamente la generazione!"
Il seguente esempio di codice non include un stop_sequence
:
lv_prompt = 'Generate a JSON object representing a person with a name, email, and phone number'.
lv_response = lo_model->generate_content( lv_prompt )->get_text( ).
Questo esempio di codice restituisce la seguente risposta:
{
"name": "Dana A",
"email": "dana@example.com",
"phoneNumber": "800-555-0199"
}
Il seguente esempio di codice include un stop_sequence
:
DATA: lt_stop_sequences TYPE TABLE OF STRING.
lv_prompt = 'Generate a JSON object representing a person with a name, email, and phone number'.
APPEND '}' to lt_stop_sequences.
lv_response = lo_model->set_stop_sequence( lt_stop_sequences
)->generate_content( lv_prompt
)->get_text( ).
Questo esempio di codice restituisce la seguente risposta:
Ecco un oggetto JSON che rappresenta una persona con nome, email e numero di telefono:
{
"name": "Dana A",
"email": "dana@example.com",
"phoneNumber": "800-555-0199"
Nota che l'output non include la sequenza di interruzione }
. Per analizzare questo valore come JSON,
devi aggiungere la chiusura }
.
Quando un modello Claude fornisce una risposta, la proprietà stop_reason
indica
perché il modello ha interrotto la generazione di testo.
Per ottenere il motivo dell'interruzione, puoi utilizzare il seguente esempio di codice:
lv_stop_reason = lo_model->set_stop_sequence( lt_stop_sequences
)->generate_content( lv_prompt
)->get_stop_reason( ).
Aggiungi esempi
Il prompt few-shot è una strategia efficace in cui fornisci a un modello un piccolo insieme di esempi per guidarne l'output. Puoi farlo utilizzando la cronologia delle conversazioni per fornire a Claude questi esempi.
Ad esempio, per analizzare il sentiment dei tweet utilizzando Claude, potresti iniziare chiedendo: "Analizza il sentiment di questo tweet: " e poi osservare l'output risultante.
lv_prompt = 'The Burger was delicious and my taste buds were on fire, too yummy!'
lv_system_instruction = 'Please do the sentiment analysis of the review'.
lv_response = lo_model->set_system_instructions( lv_system_instructions
)->generate_text( lv_prompt
)->get_text( ).
Output:
# Sentiment Analysis
This tweet expresses a strongly positive sentiment:
- Words like "delicious" and "yummy" directly convey enjoyment
- The phrase "taste buds were on fire" is used positively to indicate intense flavor enjoyment
- The exclamation mark adds enthusiasm
- "too yummy" emphasizes the exceptional quality
Overall, this is a very positive tweet expressing high satisfaction with the burger.
Sebbene una risposta completa sia preziosa, per l'analisi automatica del sentiment di numerosi tweet è preferibile un output più conciso da Claude. Puoi standardizzare le risposte di Claude in una sola parola come POSITIVO, NEUTRO, NEGATIVO o in un valore numerico come 1, 0, -1.
lv_prompt = 'The Burger was delicious and my taste buds were on fire, too yummy!'.
lv_response = lo_model->add_examples( iv_input = |Unpopular opinion: Pickles are disgusting. Don't hate me|
iv_output = |NEGATIVE|
)->add_examples( iv_input = |I think my love for burgers might be getting out of hand. I just bought a burger sticker for my crocs|
iv_output = |POSITIVE|
)->add_examples( iv_input = |Seriously why would anyone ever eat a brugers? Those things are unhealthy!|
iv_output = |NEGATIVE|
)->generate_content( lv_prompt
)->get_text( ).
Output:
POSITIVE
Impostare il testo dell'assistente
Un'altra strategia comune per ottenere risultati molto specifici è quella di
"mettere le parole in bocca a Claude". Invece di fornire a Claude solo messaggi user
, puoi anche fornire un messaggio assistant
che Claude utilizza quando genera l'output.
Se fornisci un messaggio assistant
, Claude continua la conversazione dall'ultimo token assistant
. Ricorda solo che devi iniziare con un messaggio di user
.
lv_prompt = 'The fourth nearest planet to sun is: A) Mercury B) Venus C) Mars D ) Andromeda'.
lv_assistant_text = 'The answer is:'.
lv_response = lo_model->set_assistant_text( lv_instruction
)->generate_content( lv_prompt
)->get_text( ).
Questo snippet di codice mostra il seguente output: C) Mars
.
Imposta versione Anthropic
Puoi impostare il parametro anthropic_version
.
Per impostazione predefinita, vertex-2023-10-16
è il valore impostato per questo parametro. Devi
modificare il valore solo se vuoi accedere a un'altra versione di Anthropic
supportata.
Se devi modificare la versione di Anthropic, puoi utilizzare il metodo SET_ANTHROPIC_VERSION
:
lo_model->set_anthropic_version( 'ANTHROPIC_VERSION' ).
Sostituisci ANTHROPIC_VERSION
con la versione di Anthropic da utilizzare.
Per saperne di più, consulta la documentazione di Anthropic.
Ricevere una risposta da Claude
Per ricevere risposte elaborate dal modello e presentarle in modo significativo per gli sviluppatori ABAP, l'SDK fornisce la classe /GOOG/CL_RESPONSE_CLAUDE
.
La risposta acquisita dalla classe /GOOG/CL_RESPONSE_CLAUDE
è concatenata alle
richieste effettuate tramite i metodi della classe /GOOG/CL_MODEL_CLAUDE
, in modo che
tu possa accedere direttamente alla risposta in un'unica istruzione senza richiedere
variabili per archiviare i risultati intermedi.
Ricevere una risposta di testo
Per ricevere una risposta di testo dal modello, puoi utilizzare il metodo GET_TEXT
:
DATA(lv_response_text) = lo_model->generate_content( 'PROMPT'
)->get_text( ).
Sostituisci PROMPT
con il tuo prompt di testo.
Ottieni il numero di token nel prompt della richiesta
Per ricevere il numero di token nel prompt di input del modello,
puoi utilizzare il metodo GET_PROMPT_TOKEN_COUNT
:
DATA(lv_prompt_token_count) = lo_model->generate_content( 'PROMPT'
)->get_prompt_token_count( ).
Sostituisci PROMPT
con il tuo prompt di testo.
Ottieni il numero di token nella risposta del modello
Per ricevere il numero di token nella risposta del modello,
puoi utilizzare il metodo GET_CANDIDATES_TOKEN_COUNT
:
DATA(lv_candidates_token_count) = lo_model->generate_content( 'PROMPT'
)->get_candidates_token_count( ).
Sostituisci PROMPT
con il tuo prompt di testo.
Ottenere il conteggio totale dei token (richiesta e risposta)
Per determinare il conteggio totale dei token, che comprende sia la richiesta che la risposta,
puoi utilizzare il metodo GET_TOTAL_TOKEN_COUNT
:
DATA(lv_stop_reason) = lo_model->generate_content( 'PROMPT'
)->get_total_token_count( ).
Sostituisci PROMPT
con il tuo prompt di testo.
Ottieni motivo interruzione
Per ricevere il motivo per cui il modello ha bloccato la generazione della risposta, puoi
utilizzare il metodo GET_STOP_REASON
:
DATA(lv_stop_reason) = lo_model->generate_content( 'PROMPT'
)->get_stop_reason( ).
Replace PROMPT with your text prompt.
Sostituisci PROMPT
con il tuo prompt di testo.
Esempi di codice
I seguenti esempi di codice mostrano come richiamare i modelli Claude per generare risposte per vari tipi di input.
Generazione basata su testo
Il seguente esempio di codice mostra come generare una risposta da un prompt di testo insieme a un'istruzione di sistema. L'istruzione di sistema è facoltativa e può essere trasmessa insieme al prompt per indicare al modello di comportarsi in un modo specifico.
Esempio di codice
DATA:
lv_instruction TYPE string,
lv_prompt TYPE string.
lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt = 'PROMPT'.
TRY.
DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).
DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
)->generate_content( lv_prompt
)->get_text( ).
IF lv_response IS NOT INITIAL.
cl_demo_output=>display( lv_response ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
Sostituisci quanto segue:
MODEL_KEY
: il nome della chiave del modello, configurato nei parametri di generazione del modello.PROMPT
: il tuo prompt di testo.SYSTEM_INSTRUCTIONS
: le istruzioni di sistema per il modello.
Generazione multimodale
Il seguente esempio di codice mostra come generare una risposta da un input multimodale, come testo e un'immagine. Fornisci l'input come stringa con codifica base64. L'istruzione di sistema è facoltativa e può essere trasmessa insieme al prompt per indicare al modello di comportarsi in un modo specifico.
Esempio di codice
DATA:
lv_instruction TYPE string,
lv_prompt TYPE string.
lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt = 'PROMPT'.
TRY.
DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).
DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
)->set_inline_data( iv_mime_type = 'MIME_TYPE'
iv_data = 'INLINE_DATA'
)->generate_content( lv_prompt
)->get_text( ).
IF lv_response IS NOT INITIAL.
cl_demo_output=>display( lv_response ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
Sostituisci quanto segue:
MODEL_KEY
: il nome della chiave del modello, configurato nei parametri di generazione del modello.PROMPT
: il tuo prompt di testo.SYSTEM_INSTRUCTIONS
: le istruzioni di sistema per il modello.MIME_TYPE
: il tipo MIME standard IANA dei dati del file. Per impostazione predefinita, il tipo MIME è impostato suapplication/pdf
.INLINE_DATA
: dati non elaborati con codifica Base64 dell'immagine o del PDF da includere inline nel prompt.
Trovare il numero di token e caratteri fatturabili in un prompt
Prima di richiamare il modello con un prompt, ti consigliamo di controllare il numero di token nel prompt.
In questo modo, puoi prendere decisioni consapevoli sui prompt e sull'utilizzo. L'endpoint count-tokens non prevede costi. Il seguente esempio di codice mostra come trovare questi numeri prima di richiamare l'API:
Esempio di codice
DATA:
lv_prompt TYPE string.
lv_prompt = 'PROMPT'.
TRY.
DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).
DATA(lv_total_tokens) = lo_model->count_tokens( lv_prompt
)->get_total_tokens( ).
IF lv_total_tokens IS NOT INITIAL.
cl_demo_output=>display( 'Total Tokens -' && lv_total_tokens ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
Sostituisci quanto segue:
PROMPT
: il tuo prompt di testo.MODEL_KEY
: il nome della chiave del modello, configurato nei parametri di generazione del modello.
Passaggi successivi
- Scopri di più sullo sviluppo di applicazioni con la versione on-premise o cloud di ABAP SDK for Google Cloud.
- Poni le tue domande e discuti dell'SDK Vertex AI per ABAP con la community sui forum di Cloud.