Kecerdasan Data Generatif

Bangun solusi AI generatif yang siap digunakan perusahaan dengan model fondasi Cohere di Amazon Bedrock dan database vektor Weaviate di AWS Marketplace | Layanan Web Amazon

Tanggal:

Solusi AI generatif memiliki potensi untuk mentransformasi bisnis dengan meningkatkan produktivitas dan meningkatkan pengalaman pelanggan, dan penggunaan model bahasa besar (LLM) dengan solusi ini menjadi semakin populer. Membangun bukti konsep relatif mudah karena mutakhir model pondasi tersedia dari penyedia khusus melalui panggilan API sederhana. Oleh karena itu, organisasi dengan berbagai ukuran dan industri berbeda mulai menata ulang produk dan proses mereka menggunakan AI generatif.

Terlepas dari kekayaan pengetahuan umum mereka, LLM yang canggih hanya memiliki akses ke informasi yang telah mereka pelajari. Hal ini dapat menyebabkan ketidakakuratan faktual (halusinasi) ketika LLM diminta untuk membuat teks berdasarkan informasi yang tidak mereka lihat selama pelatihan. Oleh karena itu, sangat penting untuk menjembatani kesenjangan antara pengetahuan umum LLM dan data milik Anda untuk membantu model menghasilkan respons yang lebih akurat dan kontekstual sekaligus mengurangi risiko halusinasi. Metode fine-tuning tradisional, meskipun efektif, memerlukan komputasi yang intensif, mahal, dan memerlukan keahlian teknis. Pilihan lain yang perlu dipertimbangkan disebut Pengambilan Augmented Generation (RAG), yang memberi LLM informasi tambahan dari sumber pengetahuan eksternal yang dapat diperbarui dengan mudah.

Selain itu, perusahaan harus memastikan keamanan data saat menangani data kepemilikan dan sensitif, seperti data pribadi atau kekayaan intelektual. Hal ini sangat penting bagi organisasi yang beroperasi di industri yang memiliki regulasi ketat, seperti jasa keuangan, layanan kesehatan, dan ilmu hayati. Oleh karena itu, penting untuk memahami dan mengontrol aliran data Anda melalui aplikasi AI generatif: Di mana lokasi modelnya? Dimana datanya diproses? Siapa yang mempunyai akses terhadap data tersebut? Akankah data tersebut digunakan untuk melatih model, yang pada akhirnya berisiko menyebabkan kebocoran data sensitif ke LLM publik?

Postingan ini membahas bagaimana perusahaan dapat membangun aplikasi AI generatif yang akurat, transparan, dan aman sekaligus menjaga kendali penuh atas data kepemilikan. Solusi yang diusulkan adalah pipeline RAG yang menggunakan tumpukan teknologi asli AI, yang komponennya dirancang dari awal dengan AI sebagai intinya, bukan hanya sekedar menambahkan kemampuan AI sebagai renungan. Kami mendemonstrasikan cara membangun aplikasi RAG end-to-end menggunakan Model bahasa Cohere melalui Batuan Dasar Amazon dan Basis data vektor Weaviate di AWS Marketplace. Kode sumber terlampir tersedia di repositori GitHub terkait diselenggarakan oleh Weaviate. Meskipun AWS tidak bertanggung jawab untuk memelihara atau memperbarui kode di repositori mitra, kami mendorong pelanggan untuk terhubung langsung dengan Weaviate terkait pembaruan apa pun yang diinginkan.

Ikhtisar solusi

Diagram arsitektur tingkat tinggi berikut mengilustrasikan usulan jalur RAG dengan tumpukan teknologi asli AI untuk membangun solusi AI generatif yang akurat, transparan, dan aman.

Gambar 1: Alur kerja RAG menggunakan model bahasa Cohere melalui Amazon Bedrock dan database vektor Weaviate di AWS Marketplace

Sebagai langkah persiapan alur kerja RAG, database vektor, yang berfungsi sebagai sumber pengetahuan eksternal, dimasukkan dengan konteks tambahan dari data kepemilikan. Alur kerja RAG sebenarnya mengikuti empat langkah yang diilustrasikan dalam diagram:

  1. Pengguna memasukkan kueri mereka.
  2. Kueri pengguna digunakan untuk mengambil konteks tambahan yang relevan dari database vektor. Hal ini dilakukan dengan menghasilkan penyematan vektor dari kueri pengguna dengan model penyematan untuk melakukan pencarian vektor guna mengambil konteks paling relevan dari database.
  3. Konteks yang diambil dan kueri pengguna digunakan untuk menambah template prompt. Perintah augmented pengambilan membantu LLM menghasilkan penyelesaian yang lebih relevan dan akurat, meminimalkan halusinasi.
  4. Pengguna menerima respons yang lebih akurat berdasarkan kueri mereka.

Tumpukan teknologi asli AI yang diilustrasikan dalam diagram arsitektur memiliki dua komponen utama: model bahasa Cohere dan database vektor Weaviate.

Model bahasa koheren di Amazon Bedrock

Grafik Platform Kohere menghadirkan model bahasa dengan kinerja tercanggih bagi perusahaan dan pengembang melalui panggilan API sederhana. Ada dua jenis kemampuan pemrosesan bahasa utama yang disediakan oleh Cohere Platformโ€”generatif dan penyematanโ€”dan masing-masing dilayani oleh jenis model yang berbeda:

  • Pembuatan teks dengan perintah โ€“ Pengembang dapat mengakses titik akhir yang mendukung kemampuan AI generatif, memungkinkan aplikasi seperti percakapan, menjawab pertanyaan, copywriting, ringkasan, ekstraksi informasi, dan banyak lagi.
  • Representasi teks dengan Menanamkan โ€“ Pengembang dapat mengakses titik akhir yang menangkap makna semantik teks, mengaktifkan aplikasi seperti mesin pencari vektor, klasifikasi dan pengelompokan teks, dan banyak lagi. Cohere Embed hadir dalam dua bentuk, model bahasa Inggris dan model multibahasa, keduanya sekarang tersedia di Amazon Bedrock.

Platform Cohere memberdayakan perusahaan untuk menyesuaikan solusi AI generatif mereka secara pribadi dan aman melalui penerapan Amazon Bedrock. Amazon Bedrock adalah layanan cloud terkelola sepenuhnya yang memungkinkan tim pengembangan membangun dan menskalakan aplikasi AI generatif dengan cepat sekaligus membantu menjaga data dan aplikasi Anda tetap aman dan pribadi. Data Anda tidak digunakan untuk peningkatan layanan, tidak pernah dibagikan dengan penyedia model pihak ketiga, dan tetap berada di dalam Daerah tempat panggilan API diproses. Data selalu dienkripsi saat transit dan saat disimpan, dan Anda dapat mengenkripsi data menggunakan kunci Anda sendiri. Amazon Bedrock mendukung persyaratan keamanan, termasuk kelayakan Undang-Undang Portabilitas dan Akuntabilitas Asuransi Kesehatan AS (HIPAA) dan kepatuhan Peraturan Perlindungan Data Umum (GDPR). Selain itu, Anda dapat mengintegrasikan dengan aman dan menerapkan aplikasi AI generatif dengan mudah menggunakan alat AWS yang sudah Anda kenal.

Basis data vektor Weaviate di AWS Marketplace

menenun adalah AI-asli basis data vektor yang memudahkan tim pengembangan untuk membangun aplikasi AI generatif yang aman dan transparan. Weaviate digunakan untuk menyimpan dan mencari data vektor dan objek sumber, yang menyederhanakan pengembangan dengan menghilangkan kebutuhan untuk menghosting dan mengintegrasikan database terpisah. Weaviate memberikan kinerja pencarian semantik subdetik dan dapat menskalakan untuk menangani miliaran vektor dan jutaan penyewa. Dengan arsitektur unik yang dapat diperluas, Weaviate berintegrasi secara asli dengan model fondasi Cohere yang diterapkan di Amazon Bedrock untuk memfasilitasi vektorisasi data yang mudah dan menggunakan kemampuan generatifnya dari dalam database.

Basis data vektor asli AI Weaviate memberi pelanggan fleksibilitas untuk menerapkannya sebagai solusi bawa-Anda-sendiri-cloud (BYOC) atau sebagai layanan terkelola. Etalase ini menggunakan Weaviate Klaster Kubernetes di AWS Marketplace, bagian dari penawaran BYOC Weaviate, yang memungkinkan penerapan skalabel berbasis kontainer di dalam penyewa AWS dan VPC Anda hanya dengan beberapa klik menggunakan Formasi AWS Cloud templat. Pendekatan ini memastikan bahwa database vektor Anda diterapkan di Wilayah spesifik Anda dekat dengan model dasar dan data kepemilikan untuk meminimalkan latensi, mendukung lokalitas data, dan melindungi data sensitif sekaligus memenuhi potensi persyaratan peraturan, seperti GDPR.

Gunakan ikhtisar kasus

Pada bagian berikut, kami mendemonstrasikan cara membangun solusi RAG menggunakan tumpukan teknologi asli AI dengan Cohere, AWS, dan Weaviate, seperti yang diilustrasikan dalam ikhtisar solusi.

Contoh kasus penggunaan menghasilkan iklan bertarget untuk daftar penginapan liburan berdasarkan audiens target. Sasarannya adalah menggunakan kueri pengguna untuk audiens target (misalnya, โ€œkeluarga dengan anak kecilโ€) untuk mengambil listingan penginapan liburan yang paling relevan (misalnya, listingan dengan taman bermain di dekatnya) dan kemudian membuat iklan untuk audiens target tersebut. daftar yang diambil disesuaikan dengan target audiens.

Gambar 2: Beberapa baris pertama daftar penginapan liburan yang tersedia dari Inside Airbnb.

Kumpulan data tersedia dari Di dalam Airbnb dan berlisensi di bawah a Lisensi Internasional Creative Commons Attribution 4.0. Anda dapat menemukan kode terlampir di Repositori GitHub.

Prasyarat

Untuk mengikuti dan menggunakan layanan AWS apa pun dalam tutorial berikut, pastikan Anda memiliki Akun AWS.

Aktifkan komponen tumpukan teknologi asli AI

Pertama, Anda perlu mengaktifkan komponen relevan yang dibahas dalam ikhtisar solusi di akun AWS Anda. Selesaikan langkah-langkah berikut:

  1. Di kiri Konsol Amazon Bedrock, pilih Akses model di panel navigasi.
  2. Pilih Kelola akses model di kanan atas.
  3. Pilih model fondasi pilihan Anda dan minta akses.

Gambar 3: Kelola akses model di konsol Amazon Bedrock.

Selanjutnya, Anda menyiapkan cluster Weaviate.

  1. Berlangganan ke Weaviate Klaster Kubernetes di AWS Marketplace.
  2. Luncurkan perangkat lunak menggunakan a Templat CloudFormation sesuai dengan Availability Zone pilihan Anda.

Templat CloudFormation sudah diisi sebelumnya dengan nilai default.

  1. Untuk Nama tumpukan, masukkan nama tumpukan.
  2. Untuk tipe otentikasi helm, disarankan untuk mengaktifkan otentikasi dengan pengaturan helmauthenticationtype untuk apikey dan mendefinisikan a helmauthenticationapikey.
  3. Untuk helmauthenticationapikey, masukkan kunci API Weaviate Anda.
  4. Untuk versi helmchart, masukkan nomor versi Anda. Setidaknya harus v.16.8.0. Mengacu kepada GitHub repo untuk versi terbaru.
  5. Untuk modul helmenabled, yakinkan tex2vec-aws dan generative-aws hadir dalam daftar modul yang diaktifkan dalam Weaviate.

Gambar 4: Templat CloudFormation.

Templat ini membutuhkan waktu sekitar 30 menit untuk diselesaikan.

Hubungkan ke Weaviate

Selesaikan langkah-langkah berikut untuk terhubung ke Weaviate:

  1. Dalam majalah Konsol Amazon SageMaker, navigasi ke Contoh notebook di panel navigasi melalui buku catatan > Contoh notebook di kiri.
  2. Buat contoh buku catatan baru.
  3. Instal paket klien Weaviate dengan dependensi yang diperlukan:
$ pip install weaviate-client

  1. Hubungkan ke instans Weaviate Anda dengan kode berikut:
import weaviate client = weaviate.Client( url = "https://<YOUR-WEAVIATE-URL>", auth_client_secret=weaviate.AuthApiKey(api_key="YOUR-WEAVIATE-API-KEY"), additional_headers={ "X-AWS-Access-Key": "<YOUR-AWS-ACCESS-KEY>", "X-AWS-Secret-Key": "<YOUR-AWS-SECRET-ACCESS-KEY>" }
)

Berikan informasi berikut:

  • URL Weaviate โ€“ Akses Weaviate melalui URL penyeimbang beban. Dalam Cloud komputasi elastis Amazon (Amazon EC2), pilih Muat penyeimbang di panel navigasi dan temukan penyeimbang beban. Cari kolom nama DNS dan tambahkan https:// di depannya.
  • Weaviate kunci API โ€“ Ini adalah kunci yang Anda atur sebelumnya di templat CloudFormation (helmauthenticationapikey).
  • Kunci akses AWS dan kunci akses rahasia โ€“ Anda dapat mengambil access key dan secret access key untuk pengguna Anda di Identitas AWS dan Manajemen Akses (IAM) konsol.

Gambar 5: Konsol AWS Identity and Access Management (IAM) untuk mengambil access key AWS dan secret access key.

Konfigurasikan modul Amazon Bedrock untuk mengaktifkan model Cohere

Selanjutnya, Anda menentukan kumpulan data (class) dipanggil Listings untuk menyimpan objek data daftar, yang analog dengan membuat tabel dalam database relasional. Pada langkah ini, Anda mengonfigurasi modul yang relevan untuk mengaktifkan penggunaan model bahasa Cohere yang dihosting di Amazon Bedrock secara asli dari dalam database vektor Weaviate. Vektorisasi (โ€œtext2vec-awsโ€œ) dan modul generatif (โ€œgenerative-awsโ€œ) ditentukan dalam definisi pengumpulan data. Kedua modul ini mengambil tiga parameter:

  • "layanan" - Menggunakan "bedrockโ€ untuk Amazon Bedrock (sebagai alternatif, gunakan โ€œsagemaker"Untuk Mulai Lompatan Amazon SageMaker)
  • "Wilayah" โ€“ Masukkan Wilayah tempat model Anda diterapkan
  • "model" โ€“ Berikan nama model fondasi

Lihat kode berikut:

collection_definition = { "class": "Listings", "moduleConfig": { "text2vec-aws": { "service": "bedrock", "region": "us-east-1", "model": "cohere.embed-english-v3", }, "generative-aws": { "service": "bedrock", "region": "us-east-1", "model": "cohere.command-text-v14" } }, "vectorizer": "text2vec-aws"
}

Menyerap data ke dalam database vektor Weaviate

Pada langkah ini, Anda menentukan struktur kumpulan data dengan mengonfigurasi propertinya. Selain nama properti dan tipe data, Anda juga dapat mengonfigurasi apakah hanya objek data yang akan disimpan atau akan disimpan bersama dengan penyematan vektornya. Dalam contoh ini, host_name dan property_type tidak di-vektor-kan:

collection_definition["properties"] = [ { "name": "host_name", "dataType": ["text"], "moduleConfig": {"text2vec-aws": {"skip": True}} }, { "name": "property_type", "dataType": ["text"], "moduleConfig": {"text2vec-aws": {"skip": True}} } { "name": "description", "dataType": ["text"] }, {"name": "neighborhood_overview", "dataType": ["text"] },
]

Jalankan kode berikut untuk membuat koleksi di instans Weaviate Anda:

client.schema.create_class(collection_definition)

Anda sekarang dapat menambahkan objek ke Weaviate. Anda menggunakan proses impor batch untuk efisiensi maksimum. Jalankan kode berikut untuk mengimpor data. Selama impor, Weaviate akan menggunakan vektorizer yang ditentukan untuk membuat penyematan vektor untuk setiap objek. Kode berikut memuat objek, menginisialisasi proses batch, dan menambahkan objek ke koleksi target satu per satu:

from weaviate.util import generate_uuid5
import pandas as pd # Read CSV file
csv_file = './data/listings.csv'
df = pd.read_csv(csv_file, usecols = ['host_name', 'property_type', 'description', 'neighborhood_overview', ]) df.fillna('', inplace=True) # Configure batch
client.batch.configure(batch_size=100) # Initialize batch process
with client.batch as batch: for _, row in df.iterrows(): listing_object = { "host_name": row["host_name"], "property_type" : row["property_type"], "description": row["description"], "neighborhood_overview" : row["neighborhood_overview"], } batch.add_data_object( class_name = "Listings", data_object = listing_object, uuid = generate_uuid5(listing_object) )

Pengambilan Augmented Generation

Anda dapat membangun alur RAG dengan menerapkan kueri penelusuran generatif pada instans Weaviate Anda. Untuk ini, pertama-tama Anda mendefinisikan template prompt dalam bentuk f-string yang dapat menerima permintaan pengguna ({target_audience}) secara langsung dan konteks tambahan ({{host_name}}, {{property_type}}, {{description}}, dan {{neighborhood_overview}}) dari database vektor saat runtime:

 prompt_template = f"""You are a copywriter. Write a short advertisement for the following vacation stay. Host: {{host_name}} Property type: {{property_type}} Description: {{description}} Neighborhood: {{neighborhood_overview}} Target audience: {target_audience} """

Selanjutnya, Anda menjalankan kueri penelusuran generatif. Ini meminta model generatif yang ditentukan dengan perintah yang terdiri dari kueri pengguna serta data yang diambil. Kueri berikut mengambil satu objek daftar (.with_limit(1)) Dari Listings koleksi yang paling mirip dengan permintaan pengguna (.with_near_text({"concepts": target_audience})). Kemudian permintaan pengguna (target_audience) dan properti listingan yang diambil (["description", "neighborhood", "host_name", "property_type"]) dimasukkan ke dalam template prompt. Lihat kode berikut:

 result = client.query .get("Listings", ["description", "neighborhood", "host_name", "property_type"]) .with_near_text({"concepts": target_audience}) .with_limit(1) .with_generate(single_prompt=prompt_template) .do()

Dalam contoh berikut, Anda dapat melihat potongan kode sebelumnya untuk target_audience = โ€œFamily with small childrenโ€ mengambil daftar dari tuan rumah Marre. Templat prompt dilengkapi dengan rincian daftar Marre dan target audiens:

"You are a copywriter.
Write a short advertisement for the following vacation stay.
Host: Marre
Property type: Entire townhouse
Description: Welcome to our lovely home! You've come to the right place ...
Neighborhood: THE NEIGHBORHOOD:<br /><br />We are in the city centre ...
Target audience: Family with small children"

Berdasarkan prompt yang ditambah pengambilan, model Perintah Cohere menghasilkan iklan bertarget berikut:

"Looking for a kid-friendly home away from home in one of the trendiest areas of Amsterdam? Look no further than this stylish townhouse in the heart of the city! Our 120ftยฒ space is perfect for a family of four or a group of adults, with two bedrooms featuring elevated beds suitable for kids and one bedroom with a single bed. The ground floor features a spacious living room, a kitchen with a large dining table, and a half bath while heading upstairs leads you to a master bedroom and a full bathroom. Our central location means you're just steps away from the best cafes, restaurants, and bars that the city has to offer, and the Vondelpark and other attractions are only a short walk away! Supermarkets and paid parking are also conveniently located nearby. Experience the best of Amsterdam in a laid-back,local way and create unforgettable memories with your family at our cozy townhouse."

Kustomisasi alternatif

Anda dapat membuat penyesuaian alternatif untuk berbagai komponen dalam solusi yang diusulkan, seperti berikut ini:

  • Model bahasa Cohere juga tersedia melalui Mulai Lompatan Amazon SageMaker, yang menyediakan akses ke model fondasi mutakhir dan memungkinkan pengembang menerapkan LLM ke dalamnya Amazon SageMaker, layanan terkelola sepenuhnya yang menyatukan serangkaian alat untuk memungkinkan pembelajaran mesin berperforma tinggi dan berbiaya rendah untuk kasus penggunaan apa pun. Weaviate juga terintegrasi dengan SageMaker.
  • Tambahan yang kuat untuk solusi ini adalah Cohere Rerank titik akhir, tersedia melalui SageMaker JumpStart. Rerank dapat meningkatkan relevansi hasil pencarian dari pencarian leksikal maupun semantik. Pemeringkatan ulang bekerja dengan menghitung skor relevansi semantik untuk dokumen yang diambil oleh sistem pencarian dan memberi peringkat pada dokumen berdasarkan skor tersebut. Menambahkan Rerank ke suatu aplikasi hanya memerlukan satu baris perubahan kode.
  • Untuk memenuhi persyaratan penerapan yang berbeda di lingkungan produksi yang berbeda, Weaviate dapat diterapkan dengan berbagai cara tambahan. Misalnya, ini tersedia sebagai unduhan langsung dari Situs web Weaviate, yang terus berjalan Layanan Amazon Elastic Kubernetes (Amazon EKS) atau secara lokal melalui Buruh pelabuhan or Kubernetes. Ini juga tersedia sebagai layanan terkelola yang dapat berjalan dengan aman dalam VPC atau sebagai layanan cloud publik yang dihosting di AWS dengan uji coba gratis selama 14 hari.
  • Anda dapat menyajikan solusi Anda di VPC menggunakan Cloud Pribadi Virtual Amazon (Amazon VPC), yang memungkinkan organisasi meluncurkan layanan AWS dalam jaringan virtual yang terisolasi secara logis, menyerupai jaringan tradisional namun dengan manfaat infrastruktur AWS yang dapat diskalakan. Bergantung pada tingkat sensitivitas data yang diklasifikasikan, organisasi juga dapat menonaktifkan akses internet di VPC ini.

Membersihkan

Untuk mencegah biaya tak terduga, hapus semua sumber daya yang Anda sebarkan sebagai bagian dari postingan ini. Jika Anda meluncurkan tumpukan CloudFormation, Anda dapat menghapusnya melalui konsol AWS CloudFormation. Perhatikan bahwa mungkin ada beberapa sumber daya AWS, seperti Toko Blok Elastis Amazon (Amazon EBS) volume dan Layanan Manajemen Kunci AWS (AWS KMS), yang mungkin tidak dihapus secara otomatis ketika tumpukan CloudFormation dihapus.

Gambar 6: Hapus semua sumber daya melalui konsol AWS CloudFormation.

Kesimpulan

Postingan ini membahas bagaimana perusahaan dapat membangun aplikasi AI generatif yang akurat, transparan, dan aman sambil tetap memiliki kendali penuh atas data mereka. Solusi yang diusulkan adalah pipeline RAG yang menggunakan tumpukan teknologi asli AI sebagai kombinasi model fondasi Cohere di Amazon Bedrock dan database vektor Weaviate di AWS Marketplace. Pendekatan RAG memungkinkan perusahaan untuk menjembatani kesenjangan antara pengetahuan umum LLM dan data kepemilikan sambil meminimalkan halusinasi. Tumpukan teknologi asli AI memungkinkan pengembangan cepat dan kinerja terukur.

Anda dapat mulai bereksperimen dengan bukti konsep RAG untuk aplikasi AI generatif yang siap digunakan perusahaan menggunakan langkah-langkah yang diuraikan dalam postingan ini. Kode sumber terlampir tersedia di repositori GitHub terkait. Terima kasih telah membaca. Jangan ragu untuk memberikan komentar atau tanggapan di bagian komentar.


Tentang penulis

James Yi adalah Arsitek Solusi Mitra AI/ML Senior di tim Teknologi COE Mitra Teknologi di Amazon Web Services. Dia bersemangat bekerja dengan pelanggan dan mitra perusahaan untuk merancang, menerapkan, dan menskalakan aplikasi AI/ML guna memperoleh nilai bisnis. Di luar pekerjaan, dia menikmati bermain sepak bola, jalan-jalan, dan menghabiskan waktu bersama keluarganya.

Leonie Monigatti adalah Advokat Pengembang di Weaviate. Area fokusnya adalah AI/ML, dan dia membantu pengembang mempelajari AI generatif. Di luar pekerjaan, dia juga membagikan pembelajarannya di bidang ilmu data dan ML di blognya dan di Kaggle.

Meor Amer adalah Advokat Pengembang di Cohere, penyedia teknologi pemrosesan bahasa alami (NLP) yang mutakhir. Dia membantu pengembang membangun aplikasi mutakhir dengan Model Bahasa Besar (LLM) Cohere.

Shun Mao adalah Arsitek Solusi Mitra AI/ML Senior di tim Emerging Technologies di Amazon Web Services. Dia bersemangat bekerja dengan pelanggan dan mitra perusahaan untuk merancang, menerapkan, dan menskalakan aplikasi AI/ML guna memperoleh nilai bisnis mereka. Di luar pekerjaan, dia menikmati memancing, jalan-jalan, dan bermain Ping-Pong.

tempat_img

Intelijen Terbaru

tempat_img

Hubungi kami

Hai, yang di sana! Apa yang bisa saya bantu?