Proyek ini berfungsi sebagai dasar bagi pengembang untuk memperluas kasus penggunaan mereka di berbagai model bahasa besar (LLM) menggunakan agen Amazon Bedrock. Tujuannya adalah untuk menunjukkan potensi memanfaatkan berbagai model di Bedrock untuk menciptakan respons berantai yang beradaptasi dengan beragam skenario. Selain menghasilkan keluaran berbasis teks, aplikasi ini juga mendukung pembuatan dan pemeriksaan gambar menggunakan pembuatan gambar dan model teks-ke-gambar. Fungsionalitas yang diperluas ini meningkatkan keserbagunaan aplikasi, sehingga cocok untuk kasus penggunaan yang lebih kreatif dan visual.
Bagi mereka yang lebih menyukai pendekatan Infrastruktur sebagai Kode (IaC), kami juga menyediakan templat AWS CloudFormation yang menyiapkan komponen inti seperti agen Amazon Bedrock, bucket S3, dan fungsi Lambda. Jika Anda lebih memilih untuk men-deploy proyek ini melalui AWS CloudFormation, silakan merujuk ke panduan lokakarya di sini.
Alternatifnya, README ini akan memandu Anda melalui proses langkah demi langkah untuk menyiapkan dan mengonfigurasi agen Amazon Bedrock secara manual melalui Konsol AWS, memberi Anda fleksibilitas untuk bereksperimen dengan model terbaru dan sepenuhnya membuka potensi agen Bedrock.
Ikhtisar solusi tingkat tinggi adalah sebagai berikut:
Penyiapan Agen dan Lingkungan: Solusi dimulai dengan mengonfigurasi agen Amazon Bedrock, fungsi AWS Lambda, dan bucket Amazon S3. Langkah ini menetapkan landasan untuk interaksi model dan penanganan data, mempersiapkan sistem untuk menerima dan memproses perintah dari aplikasi front-end. Pemrosesan Cepat dan Inferensi Model: Ketika perintah diterima dari aplikasi front-end, agen Bedrock mengevaluasi dan mengirimkan perintah tersebut, bersama dengan ID model yang ditentukan, ke fungsi Lambda menggunakan mekanisme grup tindakan. Langkah ini memanfaatkan skema API grup tindakan untuk penanganan parameter yang tepat, memfasilitasi inferensi model yang efektif berdasarkan perintah masukan. Penanganan Data dan Pembuatan Respons: Untuk tugas yang melibatkan konversi gambar-ke-teks atau teks-ke-gambar, fungsi Lambda berinteraksi dengan bucket S3 untuk melakukan operasi baca atau tulis yang diperlukan pada gambar. Langkah ini memastikan penanganan konten multimedia secara dinamis, yang berpuncak pada pembangkitan respons atau transformasi yang ditentukan oleh perintah awal.
Di bagian berikut, kami akan memandu Anda melalui:
AWS SAM (Model Aplikasi Tanpa Server) adalah kerangka kerja sumber terbuka yang membantu Anda membangun aplikasi tanpa server di AWS. Ini menyederhanakan penerapan, pengelolaan, dan pemantauan sumber daya tanpa server seperti AWS Lambda, Amazon API Gateway, Amazon DynamoDB, dan banyak lagi. Berikut panduan komprehensif tentang cara menyiapkan dan menggunakan AWS SAM.
Framework ini menyederhanakan proses pembuatan, penerapan, dan pengelolaan aplikasi tanpa server dengan menghilangkan kompleksitas infrastruktur cloud. Ini memberikan cara terpadu untuk menentukan dan mengelola sumber daya tanpa server Anda menggunakan file konfigurasi dan serangkaian perintah.
Buat proyek Tanpa Server baru dengan templat Python. Di terminal Anda, jalankan: cd infer-models Kemudian jalankan tanpa server
Ini akan memulai proses pembuatan proyek interaktif Serverless Framework.. Anda akan diminta dengan beberapa opsi: Pilih "Buat aplikasi Tanpa Server baru". Pilih templat "aws-python3" dan berikan "infer-models" sebagai nama proyek Anda.
Ini akan membuat direktori baru bernama infer-models dengan struktur proyek dasar Tanpa Server dan templat Python.
Anda mungkin juga diminta untuk login/mendaftar. pilih opsi "Masuk/Daftar". Ini akan membuka jendela browser tempat Anda dapat membuat akun baru atau masuk jika Anda sudah memilikinya. Setelah masuk atau membuat akun, pilih opsi "Framework Open Source", yang gratis untuk digunakan.
Jika tumpukan Anda gagal diterapkan, harap beri komentar pada baris 2 file serverless.yml
Setelah menjalankan perintah tanpa server dan mengikuti petunjuknya, direktori baru dengan nama proyek (misalnya, infer-models) akan dibuat, berisi struktur boilerplate dan file konfigurasi untuk proyek Tanpa Server.
Sekarang kita akan menginstal Plugin serverless-python-requirements: Plugin serverless-python-requirements membantu mengelola dependensi Python untuk proyek Tanpa Server Anda. Instal dengan menjalankan:
npm instal persyaratan python tanpa server —simpan-dev
3.) npx sls deploy
(SEBELUM MENJALANKAN PERINTAH DI ATAS, MESIN DOCKER PERLU DIINSTAL DAN DIJALANKAN. INFORMASI LEBIH LANJUT DAPAT DITEMUKAN DI SINI )
(Ini akan mengemas dan menerapkan fungsi AWS Lambda)
Periksa penerapan dalam CloudFormation di Konsol AWS
Kita perlu memberikan izin kepada agen batuan dasar untuk menjalankan fungsi lambda. Buka fungsi lambda dan gulir ke bawah untuk memilih tab Konfigurasi . Di sebelah kiri, pilih Izin . Gulir ke bawah ke Pernyataan kebijakan berbasis sumber daya dan pilih Tambahkan izin.
Pilih layanan AWS di tengah untuk pernyataan kebijakan Anda. Pilih Lainnya untuk layanan Anda, dan masukkan agen izin untuk ID Pernyataan. Untuk Kepala Sekolah, masukkan bedrock.amazonaws.com .
Masukkan arn:aws:bedrock:us-west-2:{aws-account-id}:agent/*
. Harap dicatat, AWS merekomendasikan hak istimewa paling rendah sehingga hanya agen yang diizinkan yang dapat menjalankan fungsi Lambda ini. A * di akhir ARN memberikan agen mana pun di akun akses untuk memanggil Lambda ini. Idealnya, kami tidak akan menggunakan ini dalam lingkungan produksi. Terakhir, untuk Action, pilih lambda:InvokeFunction , lalu Save.
Untuk membantu inferensi, kami akan meningkatkan CPU/memori pada fungsi Lambda. Kami juga akan menambah waktu tunggu agar fungsi memiliki cukup waktu untuk menyelesaikan pemanggilan. Pilih Konfigurasi umum di sebelah kiri, lalu Edit di sebelah kanan.
Ubah Memori menjadi 2048 MB dan batas waktu menjadi 1 menit . Gulir ke bawah, lalu pilih Simpan.
Agents
. Berikan nama agen, seperti agen multi-model lalu buat agennya. You are a research agent that interacts with various large language models. You pass the model ID and prompt from requests to large language models to create and store images. Then, the LLM will return a presigned URL to the image similar to the URL example provided. You also call LLMS for text and code generation, summarization, problem solving, text-to-sql, response comparisons and ratings. Remeber. you use other large language models for inference. Do not decide when to provide your own response, unless asked.
Setelah itu, pastikan Anda gulir ke atas dan pilih tombol Simpan sebelum melanjutkan ke langkah berikutnya.
Selanjutnya, kita akan menambahkan grup tindakan. Gulir ke bawah ke Action groups
lalu pilih Tambah . Panggil call-model
grup tindakan.
Untuk Jenis grup tindakan, pilih Tentukan dengan skema API
Bagian selanjutnya, kita akan memilih fungsi Lambda yang ada infer-models-dev-inferModel .
Untuk Skema API, kita akan memilih Define with in-line OpenAPI schema editor
. Salin & tempel skema dari bawah ke dalam editor skema OpenAPI In-line , lalu pilih Tambahkan : (This API schema is needed so that the bedrock agent knows the format structure and parameters required for the action group to interact with the Lambda function.)
{
"openapi": "3.0.0",
"info": {
"title": "Model Inference API",
"description": "API for inferring a model with a prompt, and model ID.",
"version": "1.0.0"
},
"paths": {
"/callModel": {
"post": {
"description": "Call a model with a prompt, model ID, and an optional image",
"parameters": [
{
"name": "modelId",
"in": "query",
"description": "The ID of the model to call",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "prompt",
"in": "query",
"description": "The prompt to provide to the model",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"required": true,
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"modelId": {
"type": "string",
"description": "The ID of the model to call"
},
"prompt": {
"type": "string",
"description": "The prompt to provide to the model"
},
"image": {
"type": "string",
"format": "binary",
"description": "An optional image to provide to the model"
}
},
"required": ["modelId", "prompt"]
}
}
}
},
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"result": {
"type": "string",
"description": "The result of calling the model with the provided prompt and optional image"
}
}
}
}
}
}
}
}
}
}
}
Orchestration
, aktifkan opsi Override orchestration template defaults
. Here is an example of what a url response to access an image should look like:
URL Generated to access the image:
https://bedrock-agent-images.s3.amazonaws.com/generated_pic.png?AWSAccessKeyId=123xyz&Signature=rlF0gN%2BuaTHzuEDfELz8GOwJacA%3D&x-amz-security-token=IQoJb3JpZ2msqKr6cs7sTNRG145hKcxCUngJtRcQ%2FzsvDvt0QUSyl7xgp8yldZJu5Jg%3D%3D&Expires=1712628409
Perintah ini membantu memberikan contoh kepada agen saat memformat respons url yang telah ditentukan sebelumnya setelah gambar dibuat di bucket S3. Selain itu, ada opsi untuk menggunakan fungsi parser Lambda khusus untuk pemformatan yang lebih terperinci.
Gulir ke bawah dan pilih tombol Save and exit
.
Setelah itu, pastikan untuk menekan tombol Save and exit
lagi di bagian atas, lalu tombol Siapkan di bagian atas UI agen penguji di sebelah kanan. Ini akan memungkinkan kami menguji perubahan terbaru.
(Sebelum melanjutkan, pastikan untuk mengaktifkan semua model melalui konsol Amazon Bedrock yang ingin Anda uji.)
Untuk memulai pengujian, persiapkan agen dengan menemukan tombol persiapkan di halaman Pembuat agen
Di sebelah kanan, Anda akan melihat opsi untuk menguji agen dengan kolom input pengguna. Berikut adalah beberapa petunjuk yang dapat Anda uji. Namun, Anda disarankan untuk menjadi kreatif dan menguji variasi petunjuknya.
Satu hal yang perlu diperhatikan sebelum pengujian. Saat Anda melakukan text-to-image atau image-to-text, kode proyek mereferensikan file .png yang sama secara statis. Dalam lingkungan yang ideal, langkah ini dapat dikonfigurasi menjadi lebih dinamis.
Use model amazon.titan-image-generator-v1 and create me an image of a woman in a boat on a river.
Use model anthropic.claude-3-haiku-20240307-v1:0 and describe to me the image that is uploaded. The model function will have the information needed to provide a response. So, dont ask about the image.
Use model stability.stable-diffusion-xl-v1. Create an image of an astronaut riding a horse in the desert.
Use model meta.llama3-70b-instruct-v1:0. You are a gifted copywriter, with special expertise in writing Google ads. You are tasked to write a persuasive and personalized Google ad based on a company name and a short description. You need to write the Headline and the content of the Ad itself. For example: Company: Upwork Description: Freelancer marketplace Headline: Upwork: Hire The Best - Trust Your Job To True Experts Ad: Connect your business to Expert professionals & agencies with specialized talent. Post a job today to access Upwork's talent pool of quality professionals & agencies. Grow your team fast. 90% of customers rehire. Trusted by 5M+ businesses. Secure payments. - Write a persuasive and personalized Google ad for the following company. Company: Click Description: SEO services
(Jika Anda ingin menyiapkan UI dengan proyek ini, lanjutkan ke langkah 6)
Anda harus memiliki agent alias ID
, bersama dengan agent ID
untuk langkah ini. Buka konsol manajemen Batuan Dasar, lalu pilih agen multi-model Anda. Salin Agent ID
dari kanan atas bagian Agent overview
. Lalu, gulir ke bawah ke Alias dan pilih Buat . Beri nama alias a1
, lalu buat agennya. Simpan ID Alias yang dihasilkan, BUKAN nama alias.
sekarang, navigasikan kembali ke IDE yang Anda gunakan untuk membuka proyek.
Arahkan ke Direktori streamlit_app :
Perbarui Konfigurasi :
Buka file invoke_agent.py .
Pada baris 19 & 20, perbarui variabel agentId
dan agentAliasId
dengan nilai yang sesuai, lalu simpan.
Instal Streamlit (jika belum diinstal):
Jalankan perintah berikut untuk menginstal semua dependensi yang diperlukan:
pip install streamlit boto3 pandas
Jalankan Aplikasi Streamlit :
streamlit_app
: streamlit run app.py
Ingatlah bahwa Anda dapat menggunakan model apa pun yang tersedia dari Amazon Bedrock, dan tidak terbatas pada daftar di atas. Jika ID model tidak tercantum, silakan lihat model (ID) terbaru yang tersedia di halaman dokumentasi Amazon Bedrock di sini.
Anda dapat memanfaatkan proyek yang disediakan untuk menyempurnakan dan membandingkan solusi ini dengan kumpulan data dan kasus penggunaan Anda sendiri. Jelajahi berbagai kombinasi model, dorong batasan yang mungkin ada, dan dorong inovasi dalam lanskap AI generatif yang terus berkembang.
Lihat KONTRIBUSI untuk informasi lebih lanjut.
Perpustakaan ini dilisensikan di bawah Lisensi MIT-0. Lihat file LISENSI.