Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Inferensi menggunakan Converse API
API Converse hanya tersedia di titik bedrock-runtime akhir.
Anda dapat menggunakan Amazon Bedrock Converse API untuk membuat aplikasi percakapan yang mengirim dan menerima pesan ke dan dari model Amazon Bedrock. Misalnya, Anda dapat membuat bot obrolan yang mempertahankan percakapan selama beberapa putaran dan menggunakan persona atau penyesuaian nada yang unik untuk kebutuhan Anda, seperti asisten dukungan teknis yang membantu.
Untuk menggunakan Converse API, Anda menggunakan operasi Converse atau ConverseStream (untuk respons streaming) untuk mengirim pesan ke model. Dimungkinkan untuk menggunakan operasi inferensi dasar yang ada (InvokeModelatau InvokeModelWithResponseStream) untuk aplikasi percakapan. Namun, Converse API menyediakan API konsisten yang berfungsi dengan semua model Amazon Bedrock yang mendukung pesan. Ini berarti Anda dapat menulis kode sekali dan menggunakannya dengan model yang berbeda. Jika model memiliki parameter inferensi yang unik, Converse API juga memungkinkan Anda untuk meneruskan parameter unik tersebut dalam struktur khusus model.
Anda dapat menggunakan Converse API untuk mengimplementasikan penggunaan alat dan pagar pembatas dalam aplikasi Anda.
-
Dengan Meta model Mistral AI dan, Converse API menyematkan masukan Anda dalam template prompt khusus model yang memungkinkan percakapan.
-
Pembatasan berlaku untuk operasi berikut:InvokeModel,InvokeModelWithResponseStream,Converse, danConverseStream. Lihat batasan API untuk detailnya.
Untuk contoh kode, lihat berikut ini:
Menggunakan Converse API
Untuk menggunakan Converse API, Anda memanggil ConverseStream operasi Converse atau untuk mengirim pesan ke model. Untuk meneleponConverse, Anda memerlukan izin untuk bedrock:InvokeModel operasi. Untuk meneleponConverseStream, Anda memerlukan izin untuk bedrock:InvokeModelWithResponseStream operasi.
Permintaan
Saat membuat permintaan Converse dengan titik akhir runtime Amazon Bedrock, Anda dapat menyertakan bidang berikut:
-
ModelId — Parameter yang diperlukan di header yang memungkinkan Anda menentukan sumber daya yang akan digunakan untuk inferensi.
-
Bidang berikut memungkinkan Anda menyesuaikan prompt:
-
pesan — Digunakan untuk menentukan konten dan peran prompt.
-
sistem — Digunakan untuk menentukan prompt sistem, yang menentukan instruksi atau konteks untuk model.
-
InferenceConfig — Digunakan untuk menentukan parameter inferensi yang umum untuk semua model. Parameter inferensi mempengaruhi generasi respons.
-
tambahan ModelRequestFields — Digunakan untuk menentukan parameter inferensi yang spesifik untuk model yang Anda gunakan untuk menjalankan inferensi.
-
PromptVari ables — (Jika Anda menggunakan prompt dari manajemen Prompt) Gunakan bidang ini untuk menentukan variabel dalam prompt untuk diisi dan nilai-nilai yang akan digunakan untuk mengisinya.
-
Bidang berikut memungkinkan Anda menyesuaikan cara respons dikembalikan:
-
GuardrailConfig — Gunakan bidang ini untuk menyertakan pagar pembatas untuk diterapkan ke seluruh prompt.
-
ToolConfig — Gunakan bidang ini untuk menyertakan alat untuk membantu model menghasilkan respons.
-
tambahan ModelResponseFieldPaths — Gunakan bidang ini untuk menentukan bidang yang akan dikembalikan sebagai objek pointer JSON.
-
ServiceTier — Gunakan bidang ini untuk menentukan tingkat layanan untuk permintaan tertentu
-
requestMetadata — Gunakan bidang ini untuk menyertakan metadata yang dapat difilter saat menggunakan log pemanggilan.
Batasan berikut berlaku saat Anda menggunakan prompt manajemen Prompt dengan Converse atauConverseStream:
-
Anda tidak dapat menyertakan toolConfig bidang additionalModelRequestFieldsinferenceConfig,system,, atau.
-
Jika Anda menyertakan messages bidang, pesan ditambahkan setelah pesan yang ditentukan dalam prompt.
-
Jika Anda menyertakan guardrailConfig bidang, pagar pembatas diterapkan ke seluruh prompt. Jika Anda menyertakan guardContent blok di ContentBlock lapangan, pagar pembatas hanya akan diterapkan ke blok tersebut.
Perluas bagian untuk mempelajari lebih lanjut tentang bidang di Converse badan permintaan:
pesan
messagesBidang adalah array objek Pesan, yang masing-masing mendefinisikan pesan antara pengguna dan model. Ob Message jek berisi bidang berikut:
Anda dapat mempertahankan konteks percakapan dengan menyertakan semua pesan dalam percakapan dalam Converse permintaan berikutnya dan menggunakan role bidang untuk menentukan apakah pesan tersebut berasal dari pengguna atau model.
Bid content ang memetakan ke array ContentBlock objek. Dalam masing-masing ContentBlock, Anda dapat menentukan salah satu bidang berikut (untuk melihat model apa yang mendukung blok apa, lihat model sekilas):
- text
-
Bid text ang dipetakan ke string yang menentukan prompt. Bid text ang ditafsirkan bersama bidang lain yang ditentukan dalam hal yang sama ContentBlock.
Berikut ini menunjukkan objek Pesan dengan content array yang hanya berisi teks ContentBlock:
{
"role": "user",
"content": [
{
"text": "string"
}
]
}
- image
-
imageLapangan dipetakan ke ImageBlock. Lewati byte mentah, dikodekan dalam base64, untuk gambar di bytes lapangan. Jika Anda menggunakan AWS SDK, Anda tidak perlu menyandikan byte di base64.
Jika Anda mengecualikan text bidang, model menjelaskan gambar.
Berikut ini menunjukkan contoh objek Pesan dengan content array yang hanya berisi gambar ContentBlock:
{
"role": "user",
"content": [
{
"image": {
"format": "png",
"source": {
"bytes": "image in bytes"
}
}
}
]
}
Anda juga dapat menentukan URI Amazon S3 alih-alih meneruskan byte langsung di badan permintaan. Berikut ini menunjukkan Message objek sampel dengan array konten yang berisi sumber yang dilewatkan melalui URI Amazon S3.
{
"role": "user",
"content": [
{
"image": {
"format": "png",
"source": {
"s3Location": {
"uri": "s3://amzn-s3-demo-bucket/myImage",
"bucketOwner": "111122223333"
}
}
}
}
]
}
- document
-
documentLapangan dipetakan ke DocumentBlock. Jika Anda menyertakan aDocumentBlock, periksa apakah permintaan Anda sesuai dengan batasan berikut:
-
Di content bidang objek Pesan, Anda juga harus menyertakan text bidang dengan prompt yang terkait dengan dokumen.
-
Lewati byte mentah, dikodekan dalam base64, untuk dokumen di bytes lapangan. Jika Anda menggunakan AWS SDK, Anda tidak perlu menyandikan byte dokumen di base64.
-
Bid name ang hanya dapat berisi karakter berikut:
Bid name ang ini rentan terhadap injeksi yang cepat, karena model mungkin secara tidak sengaja menafsirkannya sebagai instruksi. Oleh karena itu, kami sarankan Anda menentukan nama netral.
Saat menggunakan dokumen, Anda dapat mengaktifkan citations tag, yang akan memberikan kutipan spesifik dokumen dalam respons panggilan API. Lihat DocumentBlock API untuk detail selengkapnya.
Berikut ini menunjukkan contoh objek Pesan dengan content array yang hanya berisi dokumen ContentBlock dan teks yang menyertainya yang diperlukan ContentBlock.
{
"role": "user",
"content": [
{
"text": "string"
},
{
"document": {
"format": "pdf",
"name": "MyDocument",
"source": {
"bytes": "document in bytes"
}
}
}
]
}
Anda juga dapat menentukan URI Amazon S3 alih-alih meneruskan byte langsung di badan permintaan. Berikut ini menunjukkan Message objek sampel dengan array konten yang berisi sumber yang dilewatkan melalui URI Amazon S3.
{
"role": "user",
"content": [
{
"text": "string"
},
{
"document": {
"format": "pdf",
"name": "MyDocument",
"source": {
"s3Location": {
"uri": "s3://amzn-s3-demo-bucket/myDocument",
"bucketOwner": "111122223333"
}
}
}
}
]
}
- video
-
Bid video ang memetakan ke VideoBlock objek. Lewati byte mentah di bytes bidang, dikodekan dalam base64. Jika Anda menggunakan AWS SDK, Anda tidak perlu menyandikan byte di base64.
Jika Anda tidak menyertakan text bidang, model akan menjelaskan video tersebut.
Berikut ini menunjukkan contoh objek Pesan dengan content array yang hanya berisi video ContentBlock.
{
"role": "user",
"content": [
{
"video": {
"format": "mp4",
"source": {
"bytes": "video in bytes"
}
}
}
]
}
Anda juga dapat menentukan URI Amazon S3 alih-alih meneruskan byte langsung di badan permintaan. Berikut ini menunjukkan Message objek sampel dengan array konten yang berisi sumber yang dilewatkan melalui URI Amazon S3.
{
"role": "user",
"content": [
{
"video": {
"format": "mp4",
"source": {
"s3Location": {
"uri": "s3://amzn-s3-demo-bucket/myVideo",
"bucketOwner": "111122223333"
}
}
}
}
]
}
Peran yang diasumsikan harus memiliki s3:GetObject izin ke URI Amazon S3. Bid bucketOwner ang ini opsional tetapi harus ditentukan jika akun yang membuat permintaan tidak memiliki bucket tempat URI Amazon S3 ditemukan. Untuk informasi selengkapnya, lihat Konfigurasikan akses ke bucket Amazon S3.
- cachePoint
-
Anda dapat menambahkan checkpoint cache sebagai blok dalam pesan di samping prompt yang menyertainya dengan menggunakan cachePoint bidang untuk menggunakan cache prompt. Prompt caching adalah fitur yang memungkinkan Anda mulai melakukan cache konteks percakapan untuk mencapai penghematan biaya dan latensi. Untuk informasi selengkapnya, lihat Caching cepat untuk inferensi model yang lebih cepat.
Berikut ini menunjukkan contoh objek Pesan dengan content array yang berisi dokumen ContentBlock dan teks yang menyertainya ContentBlock, serta CachePoint yang menambahkan dokumen dan konten teks ke cache.
{
"role": "user",
"content": [
{
"text": "string"
},
{
"document": {
"format": "pdf",
"name": "string",
"source": {
"bytes": "document in bytes"
}
}
},
{
"cachePoint": {
"type": "default"
}
}
]
}
- guardContent
-
Bid guardContent ang memetakan ke GuardrailConverseContentBlock objek. Anda dapat menggunakan bidang ini untuk menargetkan input yang akan dievaluasi oleh pagar pembatas yang ditentukan di guardrailConfig bidang. Jika Anda tidak menentukan bidang ini, pagar pembatas mengevaluasi semua pesan di badan permintaan. Anda dapat meneruskan jenis konten berikut dalamGuardBlock:
-
teks — Berikut ini menunjukkan contoh objek Pesan dengan content array yang hanya berisi teks GuardrailConverseContentBlock:
{
"role": "user",
"content": [
{
"text": "Tell me what stocks to buy.",
"qualifiers": [
"guard_content"
]
}
]
}
Anda menentukan teks yang akan dievaluasi dan menyertakan kualifikasi apa pun yang akan digunakan untuk landasan kontekstual.
-
gambar - Berikut ini menunjukkan objek Pesan dengan content array yang hanya berisi gambar GuardrailConverseContentBlock:
{
"role": "user",
"content": [
{
"format": "png",
"source": {
"bytes": "image in bytes"
}
}
]
}
Anda menentukan format gambar dan menentukan gambar dalam byte.
Untuk informasi lebih lanjut tentang menggunakan pagar pembatas, lihat. Mendeteksi dan memfilter konten berbahaya dengan menggunakan Amazon Bedrock Guardrails
- reasoningContent
-
reasoningContentLapangan dipetakan ke a ReasoningContentBlock. Blok ini berisi konten mengenai alasan yang dilakukan oleh model untuk menghasilkan respons yang menyertainyaContentBlock.
Berikut ini menunjukkan Message objek dengan content array yang hanya berisi ReasoningContentBlock a dan teks yang menyertainyaContentBlock.
{
"role": "user",
"content": [
{
"text": "string"
},
{
"reasoningContent": {
"reasoningText": {
"text": "string",
"signature": "string"
}
"redactedContent": "base64-encoded binary data object"
}
}
]
}
Ini ReasoningContentBlock berisi alasan yang digunakan untuk menghasilkan konten yang menyertainya di reasoningText lapangan, selain konten apa pun dalam alasan yang dienkripsi oleh penyedia model untuk alasan kepercayaan dan keamanan di redactedContent lapangan.
Di dalam reasoningText bidang, text bidang menggambarkan alasannya. Bid signature ang ini adalah hash dari semua pesan dalam percakapan dan merupakan perlindungan terhadap gangguan penalaran yang digunakan oleh model. Anda harus menyertakan tanda tangan dan semua pesan sebelumnya dalam Converse permintaan berikutnya. Jika salah satu pesan diubah, respons akan menimbulkan kesalahan.
- toolUse
-
Berisi informasi tentang alat untuk model yang akan digunakan. Untuk informasi selengkapnya, lihat Menggunakan alat untuk menyelesaikan respons model Amazon Bedrock.
- toolResult
-
Berisi informasi tentang hasil dari model menggunakan alat. Untuk informasi selengkapnya, lihat Menggunakan alat untuk menyelesaikan respons model Amazon Bedrock.
Dalam messages contoh berikut, pengguna meminta daftar tiga lagu pop, dan model menghasilkan daftar lagu.
[
{
"role": "user",
"content": [
{
"text": "Create a list of 3 pop songs."
}
]
},
{
"role": "assistant",
"content": [
{
"text": "Here is a list of 3 pop songs by artists from the United Kingdom:\n\n1. \"As It Was\" by Harry Styles\n2. \"Easy On Me\" by Adele\n3. \"Unholy\" by Sam Smith and Kim Petras"
}
]
}
]
sistem
Prompt sistem adalah jenis prompt yang memberikan instruksi atau konteks kepada model tentang tugas yang harus dilakukannya, atau persona yang harus diadopsi selama percakapan. Anda dapat menentukan daftar prompt sistem untuk permintaan di bidang system (SystemContentBlock), seperti yang ditunjukkan pada contoh berikut.
[
{
"text": "You are an app that creates play lists for a radio station that plays rock and pop music. Only return song names and the artist. "
}
]
KesimpulanKonfig
ConverseAPI mendukung kumpulan parameter inferensi dasar yang Anda tetapkan di inferenceConfig bidang (InferenceConfiguration). Kumpulan dasar parameter inferensi adalah:
-
maxTokens – Jumlah maksimum token yang diizinkan dalam respons yang dihasilkan.
-
stopSequences – Daftar stop sequence. Stop sequence adalah rangkaian karakter yang menyebabkan model berhenti menghasilkan respons.
-
temperature – Kemungkinan model memilih opsi dengan probabilitas lebih tinggi saat menghasilkan respons.
-
topP – Persentase kandidat yang paling memungkinkan yang dipertimbangkan model untuk token berikutnya.
Untuk informasi selengkapnya, lihat Mempengaruhi generasi respons dengan parameter inferensi.
Contoh berikut JSON menetapkan parameter temperature inferensi.
{"temperature": 0.5}
tambahan ModelRequestFields
Jika model yang Anda gunakan memiliki parameter inferensi tambahan, Anda dapat mengatur parameter tersebut dengan menentukannya sebagai JSON di additionalModelRequestFields lapangan. Contoh JSON berikut menunjukkan cara mengaturtop_k, yang tersedia dalam Anthropic Claude model, tetapi bukan parameter inferensi dasar di API pesan.
{"top_k": 200}
PromptVariables
Jika Anda menentukan prompt dari manajemen Prompt modelId sebagai sumber daya untuk menjalankan inferensi, gunakan bidang ini untuk mengisi variabel prompt dengan nilai aktual. Bid promptVariables ang memetakan ke objek JSON dengan kunci yang sesuai dengan variabel yang ditentukan dalam petunjuk dan nilai untuk mengganti variabel.
Misalnya, katakanlah Anda memiliki prompt yang mengatakanMake me a {{genre}} playlist consisting of the following number of songs: {{number}}.. ID prompt adalah PROMPT12345 dan versinya adalah1. Anda dapat mengirim Converse permintaan berikut untuk mengganti variabel:
POST /model/arn:aws:bedrock:us-east-1:111122223333:prompt/PROMPT12345:1/converse HTTP/1.1
Content-type: application/json
{
"promptVariables": {
"genre": {
"text": "pop"
},
"number": {
"text": "3"
}
}
}
Konfigurasi pagar pembatas
Anda dapat menerapkan pagar pembatas yang Anda buat dengan Amazon Bedrock Guardrails dengan menyertakan bidang ini. Untuk menerapkan pagar pembatas ke pesan tertentu dalam percakapan, sertakan pesan dalam a. GuardrailConverseContentBlock Jika Anda tidak menyertakan GuardrailConverseContentBlock s apa pun di badan permintaan, pagar pembatas diterapkan ke semua pesan di messages bidang. Sebagai contoh, lihat Sertakan pagar pembatas dengan Converse API.
Bidang ini memungkinkan Anda menentukan alat untuk model yang akan digunakan untuk membantu menghasilkan respons. Untuk informasi selengkapnya, lihat Menggunakan alat untuk menyelesaikan respons model Amazon Bedrock.
tambahan ModelResponseFieldPaths
Setiap model yang didukung Amazon Bedrock memiliki bentuk respons asli sendiri dengan bidang khusus penyedia (misalnya, Anthropic Claude mengembalikan bidang; pengem Cohere balian stop_sequenceis_finished; dan seterusnya). Untuk memberi Anda respons yang seragam di seluruh model, ubah dan ConverseStream lepas sebagian besar bidang model-native secara default dan kembalikan amplop yang dinormalisasi denganoutput,,stopReason, usage dan. metrics
Jika aplikasi Anda memerlukan satu atau lebih bidang model-native tersebut, daftarkan jalur Pointer JSON mereka di. additionalModelResponseFieldPaths Konversi kan dan ConverseStream kemudian sertakan bidang- additionalModelResponseFields bidang tersebut di bidang respons.
Contoh berikut meminta Converse untuk juga mengembalikan Anthropic Claude stop_sequence bidang, yang berisi nilai urutan berhenti yang mengakhiri generasi:
[ "/stop_sequence" ]
Setiap jalur adalah Pointer JSON (RFC 6901) ke dalam respons asli model. Pointer kosong dan pointer yang salah format mengembalikan kesalahan. 400 Jika pointer valid tetapi jalur yang diminta tidak ada dalam respons model, itu diabaikan secara diam-diam.
Bid requestMetadata ang dipetakan ke objek JSON dari tag nilai kunci yang direkam dengan permintaan di log pemanggilan model Anda. Anda dapat menggunakan metadata permintaan untuk memfilter dan mengumpulkan log berdasarkan tim, aplikasi, lingkungan, atau dimensi lain yang bervariasi per panggilan.
Kemampuan yang sama tersedia di InvokeModel dan InvokeModelWithResponseStream melalui header X-Amzn-Bedrock-Request-Metadata HTTP. Untuk detail tentang API yang didukung, batasan, dan bagaimana metadata permintaan muncul di log pemanggilan, lihatPer-request penandaan metadata.
PelayanTier
Bidang ini memetakan ke objek JSON. Anda dapat menentukan tingkat layanan untuk permintaan tertentu.
Contoh berikut menunjukkan serviceTier struktur:
"serviceTier": {
"type": "reserved" | "priority" | "default" | "flex"
}
Untuk informasi terperinci tentang tingkatan layanan, termasuk karakteristik harga dan kinerja, lihatTingkat layanan untuk mengoptimalkan kinerja dan biaya.
Anda juga dapat menambahkan checkpoint cache secara opsional ke tools bidang system atau untuk menggunakan cache prompt, tergantung pada model yang Anda gunakan. Untuk informasi selengkapnya, lihat Caching cepat untuk inferensi model yang lebih cepat.
Respons
Respons yang Anda dapatkan dari Converse API tergantung pada operasi yang Anda panggil, Converse atauConverseStream.
Respon Converse
Dalam respons dariConverse, output bidang (ConverseOutput) berisi pesan (Pesan) yang dihasilkan model. Konten pesan ada di bidang content (ContentBlock) dan peran (useratauassistant) yang sesuai dengan pesan ada di role bidang.
Jika Anda menggunakan cache prompt, maka di bidang penggunaan, cacheReadInputTokens dan beri cacheWriteInputTokens tahu Anda berapa banyak token total yang dibaca dari cache dan ditulis ke cache, masing-masing.
Jika Anda menggunakan tingkatan layanan, maka di bidang respons, service tier akan memberi tahu Anda tingkat layanan mana yang digunakan untuk permintaan.
Bid metrics ang (ConverseMetrics) menyertakan metrik untuk panggilan. Untuk menentukan mengapa model berhenti menghasilkan konten, periksa stopReason bidang. Anda bisa mendapatkan informasi tentang token yang diteruskan ke model dalam permintaan, dan token yang dihasilkan dalam respons, dengan memeriksa usage bidang (TokenUsage). Jika Anda menentukan bidang respons tambahan dalam permintaan, API mengembalikannya sebagai JSON di additionalModelResponseFields bidang tersebut.
Contoh berikut menunjukkan respons dari Converse saat Anda melewati prompt yang dibahas diPermintaan.
{
"output": {
"message": {
"role": "assistant",
"content": [
{
"text": "Here is a list of 3 pop songs by artists from the United Kingdom:\n\n1. \"Wannabe\" by Spice Girls\n2. \"Bitter Sweet Symphony\" by The Verve \n3. \"Don't Look Back in Anger\" by Oasis"
}
]
}
},
"stopReason": "end_turn",
"usage": {
"inputTokens": 125,
"outputTokens": 60,
"totalTokens": 185
},
"metrics": {
"latencyMs": 1175
}
}
ConverseStream tanggapan
Jika Anda memang ConverseStream gil untuk mengalirkan respons dari model, aliran dikembalikan di bidang stream respons. Aliran memancarkan peristiwa berikut. Diagram di bawah ini menunjukkan urutan di mana peristiwa diterima; peristiwa blok konten berulang sekali per blok konten, dikelompokkan berdasarkancontentBlockIndex.
messageStart (once per response)
|
v
+-- for each content block (indexed by contentBlockIndex) --+
| |
| contentBlockStart (tool use only) |
| contentBlockDelta (one or more; text / reasoning / |
| tool use partial JSON) |
| contentBlockStop |
| |
+-----------------------------------------------------------+
|
v
messageStop (once per response;
| carries stopReason)
v
metadata (once per response;
usage + metrics)
-
messageStart(MessageStartEvent). Acara awal untuk pesan. Termasuk peran untuk pesan.
-
contentBlockStart(ContentBlockStartEvent). Acara memulai blok konten. Penggunaan alat saja.
-
contentBlockDelta(ContentBlockDeltaEvent). Acara delta blok konten. Termasuk salah satu dari berikut ini:
-
text— Teks paruh yang dihasilkan model.
-
reasoningContent— Penalaran parSIAL yang dilakukan oleh model untuk menghasilkan respons. Anda harus mengirimkan yang dikembalikansignature, selain semua pesan sebelumnya dalam Converse permintaan berikutnya. Jika salah satu pesan diubah, respons akan menimbulkan kesalahan.
-
toolUse— Objek JSON input parSIAL untuk penggunaan alat.
-
contentBlockStop(ContentBlockStopEvent). Acara penghentian blok konten.
-
messageStop(MessageStopEvent). Acara berhenti untuk pesan. Termasuk alasan mengapa model berhenti menghasilkan output.
-
metadata(ConverseStreamMetadataEvent). Metadata untuk permintaan. Metadata mencakup penggunaan token di usage (TokenUsage) dan metrik untuk panggilan di metrics (ConverseStreamMetadataEvent).
ConverseStream streaming blok konten lengkap sebagai ContentBlockStartEvent acara, satu atau lebih ContentBlockDeltaEvent acara, dan ContentBlockStopEvent acara. Gunakan contentBlockIndex bidang sebagai indeks untuk menghubungkan peristiwa yang membentuk blok konten.
Contoh berikut adalah respons parSIAL dariConverseStream.
{'messageStart': {'role': 'assistant'}}
{'contentBlockDelta': {'delta': {'text': ''}, 'contentBlockIndex': 0}}
{'contentBlockDelta': {'delta': {'text': ' Title'}, 'contentBlockIndex': 0}}
{'contentBlockDelta': {'delta': {'text': ':'}, 'contentBlockIndex': 0}}
.
.
.
{'contentBlockDelta': {'delta': {'text': ' The'}, 'contentBlockIndex': 0}}
{'messageStop': {'stopReason': 'max_tokens'}}
{'metadata': {'usage': {'inputTokens': 47, 'outputTokens': 20, 'totalTokens': 67}, 'metrics': {'latencyMs': 100.0}}}
Converse Contoh API
Contoh berikut menunjukkan cara menggunakan ConverseStream operasi Converse dan.
- Text
-
Contoh ini menunjukkan cara memanggil Converse operasi dengan Anthropic Claude 3 Sonnet model. Contoh menunjukkan cara mengirim teks input, parameter inferensi, dan parameter tambahan yang unik untuk model. Kode memulai percakapan dengan meminta model untuk membuat daftar lagu. Kemudian melanjutkan percakapan dengan meminta bahwa lagu-lagu itu oleh artis dari Inggris.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to use the <noloc>Converse</noloc> API with Anthropic Claude 3 Sonnet (on demand).
"""
import logging
import boto3
from botocore.exceptions import ClientError
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def generate_conversation(bedrock_client,
model_id,
system_prompts,
messages):
"""
Sends messages to a model.
Args:
bedrock_client: The Boto3 Bedrock runtime client.
model_id (str): The model ID to use.
system_prompts (JSON) : The system prompts for the model to use.
messages (JSON) : The messages to send to the model.
Returns:
response (JSON): The conversation that the model generated.
"""
logger.info("Generating message with model %s", model_id)
# Inference parameters to use.
temperature = 0.5
top_k = 200
# Base inference parameters to use.
inference_config = {"temperature": temperature}
# Additional inference parameters to use.
additional_model_fields = {"top_k": top_k}
# Send the message.
response = bedrock_client.converse(
modelId=model_id,
messages=messages,
system=system_prompts,
inferenceConfig=inference_config,
additionalModelRequestFields=additional_model_fields
)
# Log token usage.
token_usage = response['usage']
logger.info("Input tokens: %s", token_usage['inputTokens'])
logger.info("Output tokens: %s", token_usage['outputTokens'])
logger.info("Total tokens: %s", token_usage['totalTokens'])
logger.info("Stop reason: %s", response['stopReason'])
return response
def main():
"""
Entrypoint for Anthropic Claude 3 Sonnet example.
"""
logging.basicConfig(level=logging.INFO,
format="%(levelname)s: %(message)s")
model_id = "anthropic.claude-3-sonnet-20240229-v1:0"
# Setup the system prompts and messages to send to the model.
system_prompts = [{"text": "You are an app that creates playlists for a radio station that plays rock and pop music. Only return song names and the artist."}]
message_1 = {
"role": "user",
"content": [{"text": "Create a list of 3 pop songs."}]
}
message_2 = {
"role": "user",
"content": [{"text": "Make sure the songs are by artists from the United Kingdom."}]
}
messages = []
try:
bedrock_client = boto3.client(service_name='bedrock-runtime')
# Start the conversation with the 1st message.
messages.append(message_1)
response = generate_conversation(
bedrock_client, model_id, system_prompts, messages)
# Add the response message to the conversation.
output_message = response['output']['message']
messages.append(output_message)
# Continue the conversation with the 2nd message.
messages.append(message_2)
response = generate_conversation(
bedrock_client, model_id, system_prompts, messages)
output_message = response['output']['message']
messages.append(output_message)
# Show the complete conversation.
for message in messages:
print(f"Role: {message['role']}")
for content in message['content']:
print(f"Text: {content['text']}")
print()
except ClientError as err:
message = err.response['Error']['Message']
logger.error("A client error occurred: %s", message)
print(f"A client error occured: {message}")
else:
print(
f"Finished generating text with model {model_id}.")
if __name__ == "__main__":
main()
- Image
-
Contoh ini menunjukkan cara mengirim gambar sebagai bagian dari pesan dan meminta agar model menggambarkan gambar. Contohnya menggunakan Converse operasi dan Anthropic Claude 3 Sonnet model.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to send an image with the <noloc>Converse</noloc> API with an accompanying text prompt to Anthropic Claude 3 Sonnet (on demand).
"""
import logging
import boto3
from botocore.exceptions import ClientError
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def generate_conversation(bedrock_client,
model_id,
input_text,
input_image):
"""
Sends a message to a model.
Args:
bedrock_client: The Boto3 Bedrock runtime client.
model_id (str): The model ID to use.
input text : The text prompt accompanying the image.
input_image : The path to the input image.
Returns:
response (JSON): The conversation that the model generated.
"""
logger.info("Generating message with model %s", model_id)
# Get image extension and read in image as bytes
image_ext = input_image.split(".")[-1]
with open(input_image, "rb") as f:
image = f.read()
message = {
"role": "user",
"content": [
{
"text": input_text
},
{
"image": {
"format": image_ext,
"source": {
"bytes": image
}
}
}
]
}
messages = [message]
# Send the message.
response = bedrock_client.converse(
modelId=model_id,
messages=messages
)
return response
def main():
"""
Entrypoint for Anthropic Claude 3 Sonnet example.
"""
logging.basicConfig(level=logging.INFO,
format="%(levelname)s: %(message)s")
model_id = "anthropic.claude-3-sonnet-20240229-v1:0"
input_text = "What's in this image?"
input_image = "path/to/image"
try:
bedrock_client = boto3.client(service_name="bedrock-runtime")
response = generate_conversation(
bedrock_client, model_id, input_text, input_image)
output_message = response['output']['message']
print(f"Role: {output_message['role']}")
for content in output_message['content']:
print(f"Text: {content['text']}")
token_usage = response['usage']
print(f"Input tokens: {token_usage['inputTokens']}")
print(f"Output tokens: {token_usage['outputTokens']}")
print(f"Total tokens: {token_usage['totalTokens']}")
print(f"Stop reason: {response['stopReason']}")
except ClientError as err:
message = err.response['Error']['Message']
logger.error("A client error occurred: %s", message)
print(f"A client error occured: {message}")
else:
print(
f"Finished generating text with model {model_id}.")
if __name__ == "__main__":
main()
- Document
-
Contoh ini menunjukkan cara mengirim dokumen sebagai bagian dari pesan dan meminta agar model menjelaskan isi dokumen. Contohnya menggunakan Converse operasi dan Anthropic Claude 3 Sonnet model.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to send an document as part of a message to Anthropic Claude 3 Sonnet (on demand).
"""
import logging
import boto3
from botocore.exceptions import ClientError
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def generate_message(bedrock_client,
model_id,
input_text,
input_document_path):
"""
Sends a message to a model.
Args:
bedrock_client: The Boto3 Bedrock runtime client.
model_id (str): The model ID to use.
input text : The input message.
input_document_path : The path to the input document.
Returns:
response (JSON): The conversation that the model generated.
"""
logger.info("Generating message with model %s", model_id)
# Get format from path and read the path
input_document_format = input_document_path.split(".")[-1]
with open(input_document_path, 'rb') as input_document_file:
input_document = input_document_file.read()
# Message to send.
message = {
"role": "user",
"content": [
{
"text": input_text
},
{
"document": {
"name": "MyDocument",
"format": input_document_format,
"source": {
"bytes": input_document
}
}
}
]
}
messages = [message]
# Send the message.
response = bedrock_client.converse(
modelId=model_id,
messages=messages
)
return response
def main():
"""
Entrypoint for Anthropic Claude 3 Sonnet example.
"""
logging.basicConfig(level=logging.INFO,
format="%(levelname)s: %(message)s")
model_id = "anthropic.claude-3-sonnet-20240229-v1:0"
input_text = "What's in this document?"
input_document_path = "path/to/document"
try:
bedrock_client = boto3.client(service_name="bedrock-runtime")
response = generate_message(
bedrock_client, model_id, input_text, input_document_path)
output_message = response['output']['message']
print(f"Role: {output_message['role']}")
for content in output_message['content']:
print(f"Text: {content['text']}")
token_usage = response['usage']
print(f"Input tokens: {token_usage['inputTokens']}")
print(f"Output tokens: {token_usage['outputTokens']}")
print(f"Total tokens: {token_usage['totalTokens']}")
print(f"Stop reason: {response['stopReason']}")
except ClientError as err:
message = err.response['Error']['Message']
logger.error("A client error occurred: %s", message)
print(f"A client error occured: {message}")
else:
print(
f"Finished generating text with model {model_id}.")
if __name__ == "__main__":
main()
- Streaming
-
Contoh ini menunjukkan cara memanggil ConverseStream operasi dengan Anthropic Claude 3 Sonnet model. Contoh menunjukkan cara mengirim teks input, parameter inferensi, dan parameter tambahan yang unik untuk model.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to use the <noloc>Converse</noloc> API to stream a response from Anthropic Claude 3 Sonnet (on demand).
"""
import logging
import boto3
from botocore.exceptions import ClientError
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def stream_conversation(bedrock_client,
model_id,
messages,
system_prompts,
inference_config,
additional_model_fields):
"""
Sends messages to a model and streams the response.
Args:
bedrock_client: The Boto3 Bedrock runtime client.
model_id (str): The model ID to use.
messages (JSON) : The messages to send.
system_prompts (JSON) : The system prompts to send.
inference_config (JSON) : The inference configuration to use.
additional_model_fields (JSON) : Additional model fields to use.
Returns:
Nothing.
"""
logger.info("Streaming messages with model %s", model_id)
response = bedrock_client.converse_stream(
modelId=model_id,
messages=messages,
system=system_prompts,
inferenceConfig=inference_config,
additionalModelRequestFields=additional_model_fields
)
stream = response.get('stream')
if stream:
for event in stream:
if 'messageStart' in event:
print(f"\nRole: {event['messageStart']['role']}")
if 'contentBlockDelta' in event:
print(event['contentBlockDelta']['delta']['text'], end="")
if 'messageStop' in event:
print(f"\nStop reason: {event['messageStop']['stopReason']}")
if 'metadata' in event:
metadata = event['metadata']
if 'usage' in metadata:
print("\nToken usage")
print(f"Input tokens: {metadata['usage']['inputTokens']}")
print(
f":Output tokens: {metadata['usage']['outputTokens']}")
print(f":Total tokens: {metadata['usage']['totalTokens']}")
if 'metrics' in event['metadata']:
print(
f"Latency: {metadata['metrics']['latencyMs']} milliseconds")
def main():
"""
Entrypoint for streaming message API response example.
"""
logging.basicConfig(level=logging.INFO,
format="%(levelname)s: %(message)s")
model_id = "anthropic.claude-3-sonnet-20240229-v1:0"
system_prompt = """You are an app that creates playlists for a radio station
that plays rock and pop music. Only return song names and the artist."""
# Message to send to the model.
input_text = "Create a list of 3 pop songs."
message = {
"role": "user",
"content": [{"text": input_text}]
}
messages = [message]
# System prompts.
system_prompts = [{"text" : system_prompt}]
# inference parameters to use.
temperature = 0.5
top_k = 200
# Base inference parameters.
inference_config = {
"temperature": temperature
}
# Additional model inference parameters.
additional_model_fields = {"top_k": top_k}
try:
bedrock_client = boto3.client(service_name='bedrock-runtime')
stream_conversation(bedrock_client, model_id, messages,
system_prompts, inference_config, additional_model_fields)
except ClientError as err:
message = err.response['Error']['Message']
logger.error("A client error occurred: %s", message)
print("A client error occured: " +
format(message))
else:
print(
f"Finished streaming messages with model {model_id}.")
if __name__ == "__main__":
main()
- Video
-
Contoh ini menunjukkan cara mengirim video sebagai bagian dari pesan dan meminta agar model menjelaskan video tersebut. Contohnya menggunakan Converse operasi dan Amazon Nova Pro model.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to send a video with the <noloc>Converse</noloc> API to Amazon Nova Pro (on demand).
"""
import logging
import boto3
from botocore.exceptions import ClientError
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def generate_conversation(bedrock_client,
model_id,
input_text,
input_video):
"""
Sends a message to a model.
Args:
bedrock_client: The Boto3 Bedrock runtime client.
model_id (str): The model ID to use.
input text : The input message.
input_video : The input video.
Returns:
response (JSON): The conversation that the model generated.
"""
logger.info("Generating message with model %s", model_id)
# Message to send.
with open(input_video, "rb") as f:
video = f.read()
message = {
"role": "user",
"content": [
{
"text": input_text
},
{
"video": {
"format": 'mp4',
"source": {
"bytes": video
}
}
}
]
}
messages = [message]
# Send the message.
response = bedrock_client.converse(
modelId=model_id,
messages=messages
)
return response
def main():
"""
Entrypoint for Amazon Nova Pro example.
"""
logging.basicConfig(level=logging.INFO,
format="%(levelname)s: %(message)s")
model_id = "amazon.nova-pro-v1:0"
input_text = "What's in this video?"
input_video = "path/to/video"
try:
bedrock_client = boto3.client(service_name="bedrock-runtime")
response = generate_conversation(
bedrock_client, model_id, input_text, input_video)
output_message = response['output']['message']
print(f"Role: {output_message['role']}")
for content in output_message['content']:
print(f"Text: {content['text']}")
token_usage = response['usage']
print(f"Input tokens: {token_usage['inputTokens']}")
print(f"Output tokens: {token_usage['outputTokens']}")
print(f"Total tokens: {token_usage['totalTokens']}")
print(f"Stop reason: {response['stopReason']}")
except ClientError as err:
message = err.response['Error']['Message']
logger.error("A client error occurred: %s", message)
print(f"A client error occured: {message}")
else:
print(
f"Finished generating text with model {model_id}.")
if __name__ == "__main__":
main()