Rumah > Artikel > pembangunan bahagian belakang > Mencipta Ejen Kedai Kopi dengan Amazon Bedrock dan Shopify
Hari ini saya akan menerangkan cara untuk pergi bekerja dengan Bedrock dengan selamat dan boleh dipercayai dan, pada masa yang sama, belajar sedikit tentang kopi.
Anda akan belajar cara menggunakan API Amazon Bedrock bagi model Teks dan Multimodal menggunakan Python untuk menjana nama, logo dan menu untuk kafe anda dan untuk mencipta ejen yang menyambung ke API Shopify untuk menerima pesanan.
Shopify ialah (pada pendapat saya) platform eCommerce terbaik yang wujud.
Dan sama seperti AWS, Shopify mempunyai API untuk segala-galanya dan platform untuk pembangun
Akhirnya anda akan membuat bahagian hadapan menggunakan Streamlit untuk memberikan pengalaman pengguna yang unik dan memberi kehidupan kepada ejen anda.
Saat membuka kafeteria atau mempunyai idea kreatif untuk mana-mana perniagaan adalah peluang terbaik untuk bergantung pada Generative AI (GenAI) dan memanfaatkannya sepenuhnya.
Melalui Amazon Bedrock anda boleh menggunakannya, tetapi... Bagaimanakah perkhidmatan itu digunakan?
Setiap perkhidmatan dalam AWS mempunyai API, dan Amazon Bedrock tidak terkecuali Di bawah saya menerangkan cara menggunakan Amazon Bedrock API melalui contoh untuk menjana nama dan menu untuk Kafeteria semasa dalam perjalanan.
Dan saya juga menunjukkan kepada anda cara menggunakan model multimodal yang mampu menganalisis imej.
Arahan untuk memprogram skrip Python untuk dijalankan secara setempat atau dalam fungsi Lambda untuk menggunakan Amazon Bedrock:
Mula-mula anda mesti mendayakan akses kepada model dalam Arahan Batuan Dasar di sini
Keperluan:
Langkah 1) Cipta persekitaran Python maya Arahan di sini
Dalam folder bedrock_examples repositori ini, anda akan menemui contoh berbeza yang digunakan di bawah untuk menggunakan model asas.
Dalam folder gesaan anda akan menemui gesaan contoh, yang boleh anda gunakan untuk menjana nama, Menu dan gesaan untuk dihantar kepada model penjanaan imej yang boleh anda gunakan di taman permainan Amazon Bedrock dan melalui menggunakan API daripada Python.
Langkah 2) Pasang keperluan
pip install -r requirements.txt
Langkah 3) Konfigurasikan Boto3 Maklumat lanjut tentang boto3
Di sini saya mengkonfigurasi klien AWS memberitahunya untuk menggunakan profil genaiday yang dipasang pada komputer saya dan memanggil klien bedrock-runtime yang akan membolehkan saya menggunakan model asas.
#Cambiar la region y el perfil de AWS aws = boto3.session.Session(profile_name='genaiday', region_name=region) client = aws.client('bedrock-runtime')
Langkah 4) Contoh: Guna model teks
Fungsi ini memanggil kaedah invoke_model dan saya menghantar gesaan yang ditunjukkan oleh pengguna dan mengembalikan respons
Bahagian yang paling penting ialah mesej yang dihantar:
pip install -r requirements.txt
#Cambiar la region y el perfil de AWS aws = boto3.session.Session(profile_name='genaiday', region_name=region) client = aws.client('bedrock-runtime')
Contoh:
{ "role": "user", "content": [{ "type": "text", "text": prompt }] }
Langkah 5) Contoh: Guna model multimodal.
Di sini prosesnya serupa, cuma anda perlu menambah jenis mime fail yang dihantar, untuk ini terdapat fungsi yang mendapatkan mimetype
berdasarkan nama fail
def call_text(prompt,modelId="anthropic.claude-3-haiku-20240307-v1:0"): #esta función es para llamar un modelo de texto config = { "anthropic_version": "bedrock-2023-05-31", "max_tokens": 4096, "messages": [ { "role": "user", "content": [{ "type": "text", "text": prompt }] } ] } body = json.dumps(config) modelId = modelId accept = "application/json" contentType = "application/json" response = client.invoke_model( body=body, modelId=modelId, accept=accept, contentType=contentType) response_body = json.loads(response.get("body").read()) results = response_body.get("content")[0].get("text") return results
Kemudian untuk menggunakan model, mesej mestilah yang berikut:
print("Haiku") print(call_text("Estoy buscando armar un local de café al paso, dame 5 nombres para un local.")
Seruan model kelihatan seperti ini:
def read_mime_type(file_path): # Este hack es para versiones de python anteriores a 3.13 # Esta función lee el mime type de un archivo mimetypes.add_type('image/webp', '.webp') mime_type = mimetypes.guess_type(file_path) return mime_type[0]
Contoh:
"messages": [ { "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": read_mime_type(file), "data": base64.b64encode(open(file, "rb").read()).decode("utf-8") } }, { "type": "text", "text": caption }] } ]
Untuk mencipta ejen Amazon Bedrock:
Pastikan anda mempunyai model Batuan Dasar yang anda mahu gunakan dengan Arahan didayakan akses di sini, dalam kes ini kami akan menggunakan Claude 3 Haiku dan Sonnet
Kemudian buat ejen Bedrock dalam konsol AWS:
1) Pergi ke perkhidmatan Batuan Dasar
2) Ejen
3) Buat ejen
4) Beri nama ejen, dalam kes kami "Jeda-Ejen-Kopi
5) Penerangan adalah pilihan.
6) Salah satu langkah yang paling penting ialah memilih model asas yang akan menjadikan ejen kami berfungsi dengan betul. Jika anda ingin mengetahui cara memilih model terbaik yang sesuai dengan kes penggunaan anda, berikut ialah panduan mengenai perkhidmatan Amazon Bedrock Penilaian .
7) Langkah seterusnya ialah gesaan yang akan membimbing model anda, di sini anda perlu setepat mungkin dan menunjukkan kemahiran anda sebagai jurutera segera, jika anda tidak tahu di mana untuk bermula, saya cadangkan melawati panduan ini di mana anda akan menemui garis panduan terbaik untuk model yang anda gunakan, dan satu lagi sumber yang sangat berguna ialah konsol antropik.
Ini ialah gesaan yang saya gunakan untuk ejen contoh, saya syorkan menulis gesaan dalam bahasa Inggeris memandangkan model tersebut dilatih dalam bahasa Inggeris dan kadangkala menulis dalam bahasa sumber latihan membantu mengelakkan tingkah laku yang salah.
def call_multimodal(file,caption,modelId="anthropic.claude-3-haiku-20240307-v1:0"): #esta funcion es para llamar a un modelo multimodal con una imagen y un texto config = { "anthropic_version": "bedrock-2023-05-31", "max_tokens": 4096, "messages": [ { "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": read_mime_type(file), "data": base64.b64encode(open(file, "rb").read()).decode("utf-8") } }, { "type": "text", "text": caption }] } ] } body = json.dumps(config) modelId = modelId accept = "application/json" contentType = "application/json" response = client.invoke_model( body=body, modelId=modelId, accept=accept, contentType=contentType) response_body = json.loads(response.get("body").read()) results = response_body.get("content")[0].get("text") return results
8) Konfigurasi tambahan, anda mesti membenarkan ejen menangkap input daripada pengguna, memandangkan mereka pasti akan kekurangan maklumat untuk memproses pesanan, contohnya: Mereka perlu meminta produk yang pelanggan inginkan, nama , antara lain.
9) Kumpulan Tindakan: Kumpulan tindakan mentakrifkan tindakan di mana ejen boleh membantu pengguna. Sebagai contoh, anda boleh menentukan kumpulan tindakan yang menyatakan TakeOrder yang boleh mempunyai tindakan berikut
Untuk membuat kumpulan tindakan yang anda perlukan untuk setiap tindakan:
Kumpulan tindakan untuk dijalankan biasanya menggunakan fungsi Lambda, daripada Bedrock anda boleh:
Jika anda memilih untuk mencipta fungsi lambda daripada konsol Bedrock, fungsi akan dibuat dalam python dengan kod sumber asas yang kemudiannya anda perlu ubah suai, dalam repo ini dalam file agents/action_group/lambda.py anda mempunyai kod contoh yang diubah suai untuk menjadikannya berfungsi dengan ejen.
Ini adalah pembolehubah yang akan memberi anda maklumat yang diperlukan:
Dalam contoh berikut, anda boleh melihat bahawa terdapat dua tindakan:
Parametro | Descripcion | Tipo | Obligatorio |
---|---|---|---|
customerEmail | Email of the customer | string | False |
customerName | Name of the customer | string | True |
products | SKUs and quantities to add to the cart in the format [{ variantId: variantId, quantity: QUANTITY }] | array | True |
Jadi sebagai contoh apabila anda memanggil fungsi get_products dalam fungsi lambda ia dikendalikan seperti ini:
Terdapat fungsi get_products yang ditakrifkan yang akan bertanggungjawab untuk menanyakan Shopify API (Untuk tujuan pendidikan kami memulangkan semua produk)
Jika anda mahu ini berfungsi dalam Shopify, anda mesti menggantikan pembolehubah berikut dengan pembolehubah kedai anda:
pip install -r requirements.txt
#Cambiar la region y el perfil de AWS aws = boto3.session.Session(profile_name='genaiday', region_name=region) client = aws.client('bedrock-runtime')
Kemudian dalam pengendali fungsi lambda, nama fungsi yang dipanggil disahkan dan respons dikembalikan dalam format yang diperlukan oleh kumpulan_tindakan:
{ "role": "user", "content": [{ "type": "text", "text": prompt }] }
Coretan kod di atas adalah sebahagian daripada fungsi lambda yang terdapat di sini
10) Tekan Simpan dan Keluar, dan itu sahaja ejen sedia untuk diuji.
Perkara seterusnya adalah untuk menguji ejen dan mengesahkan bahawa ia berfungsi, dari Bedrock anda boleh menguji ejen, dan jika semasa perbualan anda mengklik "Lihat jejak atau Tunjukkan Jejak", ia akan menunjukkan kepada anda proses penaakulan, di sinilah anda harus Beri perhatian khusus dan buat pelarasan yang anda fikir perlu dalam gesaan atau cari model lain jika anda melihat model yang anda pilih tidak berfungsi seperti yang anda jangkakan.
Setelah anda berpuas hati dengan ejen tersebut, anda boleh mencipta Alias, alias ialah ID yang melaluinya anda akan dapat memanggil ejen daripada Amazon Bedrock API, apabila anda mencipta alias, ia akan mencipta versi ejen secara automatik, atau anda boleh menunjuk ke versi yang sedia ada, mempunyai alias berbeza dan versi berbeza akan membantu anda mengawal proses penggunaan ejen, contohnya:
Kemudian yang tinggal hanyalah menulis alias pengeluaran yang sepadan dengan versi yang anda mahu siaran langsung.
Cara untuk memanggil ejen
Untuk ini, dalam folder ejen/depan saya telah meninggalkan fail bernama agent.py.
Pembangunan ini menggunakan Streamlit, rangka kerja yang berkuasa untuk membuat contoh aplikasi pembelajaran mesin
Bahagian kod yang memanggil ejen ialah yang berikut:
def call_text(prompt,modelId="anthropic.claude-3-haiku-20240307-v1:0"): #esta función es para llamar un modelo de texto config = { "anthropic_version": "bedrock-2023-05-31", "max_tokens": 4096, "messages": [ { "role": "user", "content": [{ "type": "text", "text": prompt }] } ] } body = json.dumps(config) modelId = modelId accept = "application/json" contentType = "application/json" response = client.invoke_model( body=body, modelId=modelId, accept=accept, contentType=contentType) response_body = json.loads(response.get("body").read()) results = response_body.get("content")[0].get("text") return results
Kami menggunakan boto3 untuk menggunakan API AWS, kami memanggil pelanggan jangka masa ejen batuan asas untuk dapat memanggil ejen.
Parameter yang perlu kami berikan kepadanya ialah:
Dalam contoh ini, saya mentakrifkan pembolehubah di sini:
print("Haiku") print(call_text("Estoy buscando armar un local de café al paso, dame 5 nombres para un local.")
Mula-mula anda mesti mendayakan akses kepada model dalam Arahan Batuan Dasar di sini
Keperluan:
Saya syorkan mencipta Arahan persekitaran Python maya di sini
pip install -r requirements.txt
#Cambiar la region y el perfil de AWS aws = boto3.session.Session(profile_name='genaiday', region_name=region) client = aws.client('bedrock-runtime')
Ini akan mula menjalankan streamlit pada port 8501 dan anda boleh melawati URL berikut: http://localhost:8501/ untuk melihat bahagian hadapan yang akan memanggil ejen
Jika anda telah mengikuti semua langkah yang anda ada:
Beberapa pautan untuk anda mengikuti laluan anda dalam GenerativeAI
AI generatif AWS Bengkel
Pangkalan Pengetahuan Batuan Dasar
Anthropic Console (Untuk nyahpepijat gesaan kami)
Community.aws (lebih banyak artikel yang dihasilkan oleh dan untuk komuniti)
Atas ialah kandungan terperinci Mencipta Ejen Kedai Kopi dengan Amazon Bedrock dan Shopify. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!