In diesem Dokument wird beschrieben, wie Sie die Anthropic Claude-Modelle aufrufen, um mit dem Vertex AI SDK for ABAP eine Antwort auf Text- und multimodale Eingaben zu generieren. Claude-Modelle akzeptieren mehrere Eingabemodi, darunter Text, Bild und Dokumente. Sie können die Claude-Modelle für Anwendungsfälle wie die folgenden verwenden:
- Text in freiem Format zusammenfassen
- Media-Assets beschreiben oder interpretieren
- Zwischen Sprachen übersetzen
Die Verwendung generativer Modelle zum Erstellen von KI-zentrierten Features erfordert keine Kenntnisse im Bereich maschinelles Lernen (ML). Sie müssen keinen großen Datensatz erfassen oder ein Modell trainieren. Zum Starten Ihres ersten Programms müssen Sie lediglich in einigen Sätzen beschreiben, was das Modell tun soll. Das Vertex AI SDK für ABAP bietet ABAP-Klassen und -Methoden für den Zugriff auf die Claude-Modelle aus Ihrer SAP-Umgebung.
Hinweise
Bevor Sie das Vertex AI SDK für ABAP mit den Claude-Modellen verwenden, müssen Sie oder Ihre Administratoren die folgenden Voraussetzungen erfüllen:
- Sie haben die Vertex AI API in Ihrem Google Cloud -Projekt aktiviert.
- Sie haben ein unterstütztes Claude-Modell aus Model Garden in Ihrem Google Cloud -Projekt aktiviert.
- Sie haben das Vertex AI SDK für ABAP in Ihrer SAP-Umgebung installiert.
- Sie haben die Authentifizierung eingerichtet, um auf die Vertex AI API zuzugreifen.
- Konfigurierte Parameter zur Modellgenerierung
Anfrage an Claude senden
In diesem Abschnitt wird beschrieben, wie Sie mithilfe des Vertex AI SDK for ABAP Anfragen über die Vertex AI API an Claude-Modelle senden.
Multimodale Aufrufer-Klasse von Claude instanziieren
Zum Aufrufen des Textes und multimodaler Modelle von Claude mithilfe von Text- oder multimodalen Prompts können Sie die Klasse /GOOG/CL_MODEL_CLAUDE
verwenden.
Sie instanziieren die Klasse, indem Sie den in den Parametern für die Modellgenerierung konfigurierten Modellschlüssel übergeben:
DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).
Ersetzen Sie MODEL_KEY
durch den Namen des Modellschlüssels, der in den Parametern für die Modellgenerierung konfiguriert ist.
Inhalte mit einem Prompt erstellen
Wenn Sie Inhalte generieren möchten, indem Sie dem Modell einen Text-Prompt zur Verfügung stellen, können Sie die Methode GENERATE_CONTENT
verwenden:
lo_model->generate_content( 'PROMPT' ).
Ersetzen Sie PROMPT
durch Ihren Text-Prompt.
Systemanweisungen für das Modell bereitstellen
Zum Übergeben von textbasierten Systemanweisungen an das Modell können Sie die Methode SET_SYSTEM_INSTRUCTIONS
verwenden:
lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).
Ersetzen Sie SYSTEM_INSTRUCTIONS
durch Ihre Systemanleitung für das Modell.
Generierungskonfiguration für das Modell festlegen
Sie verwalten die Generierungskonfiguration für die Modelle in der Tabelle /GOOG/AI_CONFIG
.
Mit der Methode SET_GENERATION_CONFIG
können Sie die Generierungskonfiguration für einen bestimmten Aufruf überschreiben.
Wenn der Importparameter für ein generiertes Attribut festgelegt ist, wird der übergebene Parameterwert berücksichtigt.
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' ).
Ersetzen Sie Folgendes:
TEMPERATURE
: Zufallstemperatur.TOP_P
: Top-P-Stichprobenerhebung.TOP_K
: Top-K-Stichprobenerhebung.MAX_OUTPUT_TOKENS
: Maximale Anzahl an Ausgabetokens pro Nachricht
Weitere Informationen zu diesen Parametern finden Sie unter Parameter für die Modellgenerierung konfigurieren.
Multimodale Eingabe an das Modell übergeben
Sie können die Gemini-Modelle mit multimodaler Eingabe aufrufen. Diese kann entweder aus Text, Bildern oder Dokumenten bestehen. Sie können Eingaben für Bilder und PDFs als Rohdaten übergeben. Bei PDFs können Sie auch einen URI angeben, wenn das PDF öffentlich zugänglich ist.
In der folgenden Tabelle sind die unterstützten MIME-Typen aufgeführt:
Medientyp | Unterstützte MIME-Typen |
---|---|
Bilder |
|
Dokumente |
|
Rohdaten festlegen
Wenn Sie die Rohdaten einer Datei zusammen mit dem MIME-Typ als Eingabe für das Modell bereitstellen möchten, können Sie die Methode SET_INLINE_DATA
verwenden:
lo_model->set_inline_data( iv_mime_type = 'MIME_TYPE'
iv_data = 'RAW_DATA'
iv_type = 'base64' ).
Ersetzen Sie Folgendes:
MIME_TYPE
: Der IANA-Standard-MIME-Typ der Rohdaten. Standardmäßig ist der MIME-Typ aufimage/jpeg
festgelegt.RAW_DATA
: Base64-codierte Rohdaten des Bildes oder PDFs, die inline in den Prompt aufgenommen werden sollen.
Wenn Sie die Rohdaten von Dateien mit derselben Instanz der Klasse /GOOG/CL_MODEL_CLAUDE
aus der Eingabe des Modells entfernen möchten, können Sie die Methode CLEAR_INLINE_DATA
verwenden:
lo_model->clear_inline_data( ).
Anzahl der Tokens in einem Text-Prompt zählen
Wenn Sie die Anzahl der Tokens in einem Text-Prompt zählen möchten, bevor Sie das Modell mit dem Prompt aufrufen, können Sie die Methode COUNT_TOKENS
verwenden:
DATA(lv_total_tokens) = lo_model->count_tokens( iv_prompt_text = 'PROMPT'
iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
)->get_total_tokens( ).
Ersetzen Sie Folgendes:
PROMPT
: Ihr Text-Prompt.SYSTEM_INSTRUCTIONS
: Ihre Systemanweisungen für das Modell.
Stoppsequenzen hinzufügen
Eine stop_sequence
ist eine Reihe von Strings, die Claude anweisen, die Generierung zu stoppen, wenn einer dieser Strings in der Antwort gefunden wird. Im Grunde ist es ein Befehl, der Claude anweist: „Wenn du diese Sequenz generierst, stoppe die Generierung sofort!“
Das folgende Codebeispiel enthält keine 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( ).
Dieses Codebeispiel gibt die folgende Antwort zurück:
{
"name": "Dana A",
"email": "dana@example.com",
"phoneNumber": "800-555-0199"
}
Das folgende Codebeispiel enthält eine 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( ).
Dieses Codebeispiel gibt die folgende Antwort zurück:
Hier ist ein JSON-Objekt, das eine Person mit Namen, E‑Mail-Adresse und Telefonnummer darstellt:
{
"name": "Dana A",
"email": "dana@example.com",
"phoneNumber": "800-555-0199"
Beachten Sie, dass die Ausgabe die Stoppfolge }
nicht enthält. Damit dies als JSON geparst werden kann, müssen Sie das schließende }
hinzufügen.
Wenn ein Claude-Modell eine Antwort liefert, gibt das Attribut stop_reason
an, warum das Modell die Textgenerierung beendet hat.
Mit dem folgenden Codebeispiel können Sie den Grund für das Beenden abrufen:
lv_stop_reason = lo_model->set_stop_sequence( lt_stop_sequences
)->generate_content( lv_prompt
)->get_stop_reason( ).
Beispiele hinzufügen
Few-Shot-Prompts sind eine effektive Strategie, bei der Sie einem Modell eine kleine Anzahl von Beispielen zur Verfügung stellen, um die Ausgabe zu steuern. Dazu können Sie den Unterhaltungsverlauf verwenden, um Claude diese Beispiele zur Verfügung zu stellen.
Wenn Sie beispielsweise die Stimmung in einem Tweet mit Claude analysieren möchten, können Sie mit der Frage „Analysiere die Stimmung in diesem Tweet:“ beginnen und sich dann die resultierende Ausgabe ansehen.
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( ).
Ausgabe:
# 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.
Eine umfassende Antwort ist zwar wertvoll, für die automatisierte Sentimentanalyse zahlreicher Tweets ist jedoch eine prägnantere Ausgabe von Claude vorzuziehen. Sie können die Antworten von Claude auf ein einzelnes Wort wie POSITIVE, NEUTRAL, NEGATIVE oder einen numerischen Wert wie 1, 0, -1 standardisieren.
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( ).
Ausgabe:
POSITIVE
Assistant-Text festlegen
Eine weitere gängige Strategie, um sehr spezifische Ausgaben zu erhalten, besteht darin, Claude „Worte in den Mund zu legen“. Anstatt Claude nur user
-Nachrichten zur Verfügung zu stellen, können Sie auch eine assistant
-Nachricht angeben, die Claude beim Generieren der Ausgabe verwendet.
Wenn Sie eine assistant
-Nachricht angeben, setzt Claude die Unterhaltung ab dem letzten assistant
-Token fort. Denken Sie daran, dass Sie mit einer user
-Nachricht beginnen müssen.
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( ).
Dieses Code-Snippet gibt Folgendes aus: C) Mars
.
Anthropic-Version festlegen
Sie können den Parameter anthropic_version
festlegen.
Standardmäßig ist vertex-2023-10-16
der festgelegte Wert für diesen Parameter. Sie müssen den Wert nur ändern, wenn Sie auf eine andere unterstützte Anthropic-Version zugreifen möchten.
Wenn Sie die Anthropic-Version ändern müssen, können Sie die SET_ANTHROPIC_VERSION
-Methode verwenden:
lo_model->set_anthropic_version( 'ANTHROPIC_VERSION' ).
Ersetzen Sie ANTHROPIC_VERSION
durch die zu verwendende Anthropic-Version.
Weitere Informationen finden Sie in der Anthropic-Dokumentation.
Antwort von Claude erhalten
Das SDK bietet die Klasse /GOOG/CL_RESPONSE_CLAUDE
, um verarbeitete Antworten vom Modell zu erhalten und für ABAP-Entwickler auf sinnvolle Weise zu präsentieren.
Die von der Klasse /GOOG/CL_RESPONSE_CLAUDE
erfasste Antwort wird mit den Anfragen verkettet, die über die Methoden der Klasse /GOOG/CL_MODEL_CLAUDE
gestellt werden. Sie können also ohne direkte Anweisung auf die Antwort in einer einzigen Anweisung zugreifen. Variablen zum Speichern der Zwischenergebnisse.
Textantwort abrufen
Wenn Sie eine Textantwort vom Modell erhalten möchten, können Sie die Methode GET_TEXT
verwenden:
DATA(lv_response_text) = lo_model->generate_content( 'PROMPT'
)->get_text( ).
Ersetzen Sie PROMPT
durch Ihren Text-Prompt.
Anzahl der Tokens im Anfrage-Prompt abrufen
Mit der Methode GET_PROMPT_TOKEN_COUNT
können Sie die Anzahl der Tokens in der Eingabeaufforderung an das Modell abrufen:
DATA(lv_prompt_token_count) = lo_model->generate_content( 'PROMPT'
)->get_prompt_token_count( ).
Ersetzen Sie PROMPT
durch Ihren Text-Prompt.
Anzahl der Tokens in der Antwort des Modells abrufen
Mit der Methode GET_CANDIDATES_TOKEN_COUNT
können Sie die Anzahl der Tokens in der Antwort vom Modell erhalten:
DATA(lv_candidates_token_count) = lo_model->generate_content( 'PROMPT'
)->get_candidates_token_count( ).
Ersetzen Sie PROMPT
durch Ihren Text-Prompt.
Gesamtzahl der Tokens abrufen (Anfrage und Antwort)
Mit der Methode GET_TOTAL_TOKEN_COUNT
können Sie die Gesamtzahl der Tokens für Anfrage und Antwort ermitteln:
DATA(lv_stop_reason) = lo_model->generate_content( 'PROMPT'
)->get_total_token_count( ).
Ersetzen Sie PROMPT
durch Ihren Text-Prompt.
Grund für das Beenden abrufen
Mit der Methode GET_STOP_REASON
können Sie den Grund erhalten, für den das Modell die Antwortgenerierung blockiert hat:
DATA(lv_stop_reason) = lo_model->generate_content( 'PROMPT'
)->get_stop_reason( ).
Replace PROMPT with your text prompt.
Ersetzen Sie PROMPT
durch Ihren Text-Prompt.
Codebeispiele
Die folgenden Codebeispiele zeigen, wie die Claude-Modelle aufgerufen werden, um Antworten für verschiedene Arten von Eingaben zu generieren.
Textbasierte Generierung
Das folgende Codebeispiel zeigt, wie Sie eine Antwort von einem Text-Prompt zusammen mit einer Systemanweisung generieren. Die Systemanweisung ist optional und kann zusammen mit der Eingabeaufforderung übergeben werden, um das Modell anzuweisen, sich auf eine bestimmte Weise zu verhalten.
Codebeispiel
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.
Ersetzen Sie Folgendes:
MODEL_KEY
: Der Name des Modellschlüssels, der in den Modellgenerierungsparametern konfiguriert ist.PROMPT
: Ihr Text-Prompt.SYSTEM_INSTRUCTIONS
: Ihre Systemanweisungen für das Modell.
Multimodale Generierung
Das folgende Codebeispiel zeigt, wie eine Antwort aus einer multimodalen Eingabe wie Text und einem Bild generiert wird. Sie stellen die Eingabe als base64-codierten String bereit. Die Systemanweisung ist optional und kann zusammen mit der Eingabeaufforderung übergeben werden, um das Modell anzuweisen, sich auf eine bestimmte Weise zu verhalten.
Codebeispiel
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.
Ersetzen Sie Folgendes:
MODEL_KEY
: Der Name des Modellschlüssels, der in den Modellgenerierungsparametern konfiguriert ist.PROMPT
: Ihr Text-Prompt.SYSTEM_INSTRUCTIONS
: Ihre Systemanweisungen für das Modell.MIME_TYPE
: Der IANA-Standard-MIME-Typ der Dateidaten. Standardmäßig ist der MIME-Typ aufapplication/pdf
festgelegt.INLINE_DATA
: Base64-codierte Rohdaten des Bildes oder PDFs, die inline in den Prompt aufgenommen werden sollen.
Anzahl der Tokens und abrechenbaren Zeichen in einem Prompt ermitteln
Bevor Sie das Modell mit einem Prompt aufrufen, sollten Sie die Anzahl der Tokens in Ihrem Prompt prüfen.
So können Sie fundierte Entscheidungen zu Ihren Prompts und Ihrer Nutzung treffen. Für den Endpunkt „count-tokens“ fallen keine Kosten an. Das folgende Codebeispiel zeigt, wie Sie diese Nummern ermitteln, bevor Sie die API aufrufen:
Codebeispiel
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.
Ersetzen Sie Folgendes:
PROMPT
: Ihr Text-Prompt.MODEL_KEY
: Der Name des Modellschlüssels, der in den Parametern für die Modellgenerierung konfiguriert ist.
Nächste Schritte
- Weitere Informationen zur Anwendungsentwicklung mit der lokalen oder einer beliebigen Cloud-Version des ABAP SDK for Google Cloud
- In den Cloud-Foren können Sie Ihre Fragen stellen und mit der Community über das Vertex AI SDK sprechen.