Memanggil model Claude dari Anthropic

Dokumen ini menjelaskan cara memanggil model Claude Anthropic untuk membuat respons bagi input teks dan multimodal, dengan menggunakan Vertex AI SDK untuk ABAP. Model Claude dapat menerima beberapa mode input, termasuk teks, gambar, dan dokumen. Anda dapat menggunakan model Claude untuk kasus penggunaan seperti berikut:

  • Meringkas teks bentuk bebas
  • Mendeskripsikan atau menafsirkan aset media
  • Menerjemahkan antarbahasa

Penggunaan model generatif untuk membangun fitur yang berfokus pada AI tidak memerlukan keahlian machine learning (ML). Anda tidak perlu mengumpulkan set data besar atau melatih model. Untuk memulai program pertama Anda, cukup deskripsikan apa yang Anda inginkan dari model dalam beberapa kalimat. Vertex AI SDK untuk ABAP menyediakan class dan metode ABAP untuk mengakses model Claude dari lingkungan SAP Anda.

Sebelum memulai

Sebelum menggunakan Vertex AI SDK for ABAP dengan model Claude, pastikan Anda atau administrator Anda telah menyelesaikan prasyarat berikut:

Mengirim permintaan ke Claude

Bagian ini menjelaskan cara mengirim permintaan ke model Claude melalui Vertex AI API menggunakan Vertex AI SDK untuk ABAP.

Buat instance class pemanggil multimodal Claude

Untuk memanggil model multimodal dan teks Claude menggunakan perintah multimodal atau teks, Anda dapat menggunakan class /GOOG/CL_MODEL_CLAUDE. Anda membuat instance class dengan meneruskan kunci model yang dikonfigurasi dalam parameter pembuatan model:

DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).

Ganti MODEL_KEY dengan nama kunci model, yang dikonfigurasi dalam parameter pembuatan model.

Membuat konten dengan perintah

Untuk membuat konten dengan memberikan perintah teks ke model, Anda dapat menggunakan metode GENERATE_CONTENT:

lo_model->generate_content( 'PROMPT' ).

Ganti PROMPT dengan perintah teks Anda.

Memberikan petunjuk sistem kepada model

Untuk meneruskan petunjuk sistem berbasis teks ke model, Anda dapat menggunakan metode SET_SYSTEM_INSTRUCTIONS:

lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).

Ganti SYSTEM_INSTRUCTIONS dengan petunjuk sistem Anda ke model.

Menetapkan konfigurasi pembuatan untuk model

Anda mengelola konfigurasi pembuatan untuk model di tabel /GOOG/AI_CONFIG. Untuk mengganti konfigurasi pembuatan untuk panggilan tertentu, Anda dapat menggunakan metode SET_GENERATION_CONFIG. Jika parameter impor untuk properti pembuatan ditetapkan, nilai parameter yang diteruskan akan diterapkan.

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' ).

Ganti kode berikut:

  • TEMPERATURE: Suhu keacakan.
  • TOP_P: Sampling Top-P.
  • TOP_K: Sampling Top-K.
  • MAX_OUTPUT_TOKENS: Jumlah maksimum token output per pesan

Untuk mengetahui informasi selengkapnya tentang parameter ini, lihat Mengonfigurasi parameter pembuatan model.

Meneruskan input multimodal ke model

Anda dapat memanggil model Gemini menggunakan input multimodal, yang dapat berupa teks, gambar, atau dokumen. Anda dapat meneruskan input untuk gambar dan PDF sebagai data mentah. Untuk PDF, Anda juga dapat memberikan URI jika PDF dapat diakses secara publik.

Tabel berikut mencantumkan jenis MIME yang didukung:

Jenis media Jenis MIME yang didukung
Gambar
  • image/jpeg
  • image/png
  • image/gif
  • image/webp
Dokumen
  • application/pdf

Menetapkan data mentah

Untuk memberikan data mentah file sebagai input ke model, bersama dengan jenis MIME-nya, Anda dapat menggunakan metode SET_INLINE_DATA:

lo_model->set_inline_data( iv_mime_type = 'MIME_TYPE'
                          iv_data      = 'RAW_DATA'
                          iv_type      = 'base64' ).

Ganti kode berikut:

  • MIME_TYPE: Jenis MIME standar IANA dari data mentah. Secara default, jenis MIME disetel ke image/jpeg.
  • RAW_DATA: Data mentah berenkode base64 dari gambar atau PDF untuk disertakan secara inline dalam perintah.

Untuk menghapus data mentah file dari input model dengan instance class /GOOG/CL_MODEL_CLAUDE yang sama, Anda dapat menggunakan metode CLEAR_INLINE_DATA:

lo_model->clear_inline_data( ).

Menghitung jumlah token dalam perintah teks

Untuk menghitung jumlah token dalam perintah teks sebelum memanggil model dengan perintah, Anda dapat menggunakan metode COUNT_TOKENS:

DATA(lv_total_tokens) = lo_model->count_tokens( iv_prompt_text         = 'PROMPT'
                                                iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
                              )->get_total_tokens( ).

Ganti kode berikut:

Menambahkan urutan pemberhentian

stop_sequence adalah sekumpulan string yang menginstruksikan Claude untuk menghentikan pembuatan saat menemukan salah satu string ini dalam responsnya. Pada dasarnya, ini adalah perintah yang memberi tahu Claude, "Jika Anda membuat urutan ini, segera hentikan pembuatan!"

Contoh kode berikut tidak menyertakan 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( ).

Contoh kode ini menampilkan respons berikut:

{
  "name": "Dana A",
  "email": "dana@example.com",
  "phoneNumber": "800-555-0199"
}

Contoh kode berikut menyertakan 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( ).

Contoh kode ini menampilkan respons berikut:

Berikut adalah objek JSON yang merepresentasikan seseorang dengan nama, email, dan nomor telepon:

{
  "name": "Dana A",
  "email": "dana@example.com",
  "phoneNumber": "800-555-0199"

Perhatikan bahwa output tidak menyertakan urutan perhentian }. Untuk menguraikannya sebagai JSON, Anda perlu menambahkan } penutup.

Saat model Claude memberikan respons, properti stop_reason-nya menunjukkan alasan model berhenti menghasilkan teks.

Untuk mendapatkan alasan penghentian, Anda dapat menggunakan contoh kode berikut:

lv_stop_reason = lo_model->set_stop_sequence( lt_stop_sequences
                )->generate_content( lv_prompt
                )->get_stop_reason( ).

Menambahkan contoh

Few-shot prompting adalah strategi efektif yang memberikan serangkaian kecil contoh kepada model untuk memandu outputnya. Anda dapat melakukannya dengan menggunakan histori percakapan untuk memberikan contoh ini kepada Claude.

Misalnya, untuk menganalisis sentimen tweet menggunakan Claude, Anda dapat memulai dengan bertanya, "Analisis sentimen dalam tweet ini: ", lalu mengamati output yang dihasilkan.

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.

Meskipun respons yang komprehensif sangat berharga, untuk analisis sentimen otomatis dari banyak tweet, output yang lebih ringkas dari Claude lebih disukai. Anda dapat menstandardisasi respons Claude menjadi satu kata seperti POSITIF, NETRAL, NEGATIF, atau nilai numerik seperti 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

Menyetel teks asisten

Strategi umum lainnya untuk mendapatkan output yang sangat spesifik adalah dengan "menaruh kata-kata di mulut Claude". Selain hanya memberikan pesan user kepada Claude, Anda juga dapat memberikan pesan assistant yang digunakan Claude saat membuat output.

Jika Anda memberikan pesan assistant, Claude akan melanjutkan percakapan dari token assistant terakhir. Ingat saja bahwa Anda harus memulai dengan pesan 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( ).

Cuplikan kode ini menampilkan output berikut: C) Mars.

Menetapkan versi Anthropic

Anda dapat menetapkan parameter anthropic_version. Secara default, vertex-2023-10-16 adalah nilai yang ditetapkan untuk parameter ini. Anda hanya perlu mengubah nilainya jika ingin mengakses versi Anthropic lain yang didukung.

Jika Anda perlu mengubah versi Anthropic, Anda dapat menggunakan metode SET_ANTHROPIC_VERSION:

lo_model->set_anthropic_version( 'ANTHROPIC_VERSION' ).

Ganti ANTHROPIC_VERSION dengan versi Anthropic yang akan digunakan. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Anthropic.

Menerima respons dari Claude

Untuk menerima respons yang diproses dari model dan menampilkannya dengan cara yang bermakna bagi developer ABAP, SDK menyediakan class /GOOG/CL_RESPONSE_CLAUDE.

Respons yang diambil oleh class /GOOG/CL_RESPONSE_CLAUDE dirantai ke permintaan yang dibuat melalui metode class /GOOG/CL_MODEL_CLAUDE, sehingga Anda dapat langsung mengakses respons dalam satu pernyataan tanpa memerlukan variabel untuk menyimpan hasil sementara.

Mendapatkan respons teks

Untuk menerima respons teks dari model, Anda dapat menggunakan metode GET_TEXT:

DATA(lv_response_text) = lo_model->generate_content( 'PROMPT'
                                )->get_text( ).

Ganti PROMPT dengan perintah teks Anda.

Mendapatkan jumlah token dalam prompt permintaan

Untuk menerima jumlah token dalam perintah input ke model, Anda dapat menggunakan metode GET_PROMPT_TOKEN_COUNT:

DATA(lv_prompt_token_count) = lo_model->generate_content( 'PROMPT'
                                    )->get_prompt_token_count( ).

Ganti PROMPT dengan perintah teks Anda.

Mendapatkan jumlah token dalam respons model

Untuk menerima jumlah token dalam respons dari model, Anda dapat menggunakan metode GET_CANDIDATES_TOKEN_COUNT:

DATA(lv_candidates_token_count) = lo_model->generate_content( 'PROMPT'
                                        )->get_candidates_token_count( ).

Ganti PROMPT dengan perintah teks Anda.

Mendapatkan jumlah total token (permintaan dan respons)

Untuk memastikan jumlah token gabungan, yang mencakup permintaan dan respons, Anda dapat menggunakan metode GET_TOTAL_TOKEN_COUNT:

DATA(lv_stop_reason) = lo_model->generate_content( 'PROMPT'
                              )->get_total_token_count( ).

Ganti PROMPT dengan perintah teks Anda.

Mendapatkan alasan penghentian

Untuk menerima alasan model memblokir pembuatan respons, Anda dapat menggunakan metode GET_STOP_REASON:

DATA(lv_stop_reason) = lo_model->generate_content( 'PROMPT'
                              )->get_stop_reason( ).
Replace PROMPT with your text prompt.

Ganti PROMPT dengan perintah teks Anda.

Contoh kode

Contoh kode berikut menunjukkan cara memanggil model claude untuk membuat respons untuk berbagai jenis input.

Pembuatan berbasis teks

Contoh kode berikut menunjukkan cara membuat respons dari perintah teks bersama dengan petunjuk sistem. Petunjuk sistem bersifat opsional dan dapat diteruskan bersama dengan perintah untuk menginstruksikan model agar berperilaku dengan cara tertentu.

Contoh kode

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.

Ganti kode berikut:

Pembuatan multimodal

Contoh kode berikut menunjukkan cara membuat respons dari input multimodal, seperti teks dan gambar. Anda memberikan input sebagai string berenkode base64. Petunjuk sistem bersifat opsional dan dapat diteruskan bersama dengan perintah untuk menginstruksikan model agar berperilaku dengan cara tertentu.

Contoh kode

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.

Ganti kode berikut:

  • MODEL_KEY: Nama kunci model, yang dikonfigurasi dalam parameter pembuatan model.
  • PROMPT: Perintah teks Anda.
  • SYSTEM_INSTRUCTIONS: Petunjuk sistem Anda untuk model.
  • MIME_TYPE: Jenis MIME standar IANA dari data file. Secara default, jenis MIME disetel ke application/pdf.
  • INLINE_DATA: Data mentah berenkode base64 dari gambar atau PDF yang akan disertakan secara inline dalam perintah.

Menemukan jumlah token dan karakter yang dapat ditagih dalam perintah

Sebelum memanggil model dengan perintah, sebaiknya periksa jumlah token dalam perintah Anda.

Hal ini membantu Anda membuat keputusan yang tepat terkait perintah dan penggunaan Anda. Tidak ada biaya untuk endpoint count-tokens. Contoh kode berikut menunjukkan cara menemukan angka ini sebelum benar-benar memanggil API:

Contoh kode

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.

Ganti kode berikut:

Langkah berikutnya