Sampel ini menunjukkan beberapa pendekatan untuk membuat pengalaman seperti chatgpt atas data Anda sendiri menggunakan pola pembuatan augmented pengambilan. Ini menggunakan layanan Azure Openai untuk mengakses model chatgpt (GPT-35-turbo), dan pencarian AIure AI untuk pengindeksan data dan pengambilan.
Repo mencakup data sampel sehingga siap untuk mencoba ujung ke ujung. Dalam aplikasi sampel ini kami menggunakan perusahaan fiktif yang disebut Contoso Real Estate, dan pengalaman itu memungkinkan pelanggannya untuk mengajukan pertanyaan dukungan tentang penggunaan produknya. Data sampel mencakup serangkaian dokumen yang menggambarkan ketentuan layanannya, kebijakan privasi, dan panduan dukungan.
Aplikasi ini dibuat dari beberapa komponen, termasuk:
Tonton ikhtisar video aplikasi
PENTING: Untuk menggunakan dan menjalankan sampel ini, Anda akan membutuhkan:
Microsoft.Authorization/roleAssignments/write
Izin, seperti administrator kontrol akses berbasis peran, administrator akses pengguna, atau pemilik. Jika Anda tidak memiliki izin level langganan, mereka harus diberikan kepada Anda dengan RBAC untuk grup sumber daya yang ada dan menggunakan grup yang ada.Microsoft.Resources/deployments/write
Izin pada tingkat berlangganan. Harga dapat bervariasi per wilayah dan penggunaan. Biaya yang tepat tidak dapat diperkirakan. Anda dapat mencoba kalkulator harga Azure untuk sumber daya di bawah ini.
azd down --purge
.
Ada beberapa cara untuk berhasil mengatur proyek ini.
Cara termudah untuk memulai adalah dengan gitub codespaces yang menyediakan prakonfigurasi untuk mengatur semua alat untuk Anda. Baca lebih lanjut di bawah ini. Atau Anda dapat mengatur lingkungan lokal Anda untuk instruksi di bawah ini.
Anda dapat menjalankan repo ini secara virtual dengan menggunakan github codespaces, yang akan membuka kode vs berbasis web di browser Anda:
Opsi serupa dengan Codespaces adalah VS Code Remote Containers, yang akan membuka proyek di instance VS Code lokal Anda menggunakan Extension Containers Dev:
pwsh.exe
dari perintah PowerShell. Jika ini gagal, Anda mungkin perlu meningkatkan PowerShell.Kemudian dapatkan kode proyek:
azd auth login
azd init -t azure-search-openai-javascript
Jalankan perintah berikut, jika Anda tidak memiliki layanan Azure yang sudah ada sebelumnya dan ingin memulai dari penyebaran yang baru.
azd up
- Ini akan menyediakan sumber daya Azure dan menggunakan sampel ini ke sumber daya tersebut, termasuk membangun indeks pencarian berdasarkan file yang ditemukan di folder ./data
.eastus2
. Anda dapat mengatur lokasi yang berbeda dengan azd env set AZURE_OPENAI_RESOURCE_GROUP_LOCATION {location}
. Saat ini hanya daftar pendek lokasi yang diterima. Daftar lokasi itu didasarkan pada tabel ketersediaan model OpenAI dan mungkin sudah ketinggalan zaman sebagai perubahan ketersediaan.eastus2
. Anda dapat mengatur lokasi yang berbeda dengan azd env set AZURE_WEBAPP_LOCATION {location}
. Saat ini hanya daftar pendek lokasi yang diterima. Perhatikan bahwa aplikasi web statis adalah layanan global, dan lokasi yang Anda pilih hanya akan mempengaruhi aplikasi fungsi yang dikelola yang tidak digunakan dalam sampel ini.Ini akan terlihat seperti berikut:
Catatan: Dapat memakan waktu 15+ menit untuk aplikasi yang akan sepenuhnya digunakan.
Jika Anda sudah memiliki sumber daya Azure yang ada, Anda dapat menggunakannya kembali dengan menetapkan nilai lingkungan azd
.
azd env set AZURE_RESOURCE_GROUP {Name of existing resource group}
azd env set AZURE_LOCATION {Location of existing resource group}
azd env set AZURE_OPENAI_SERVICE {Name of existing OpenAI service}
azd env set AZURE_OPENAI_RESOURCE_GROUP {Name of existing resource group that OpenAI service is provisioned to}
azd env set AZURE_OPENAI_CHATGPT_DEPLOYMENT {Name of existing ChatGPT deployment}
. Hanya diperlukan jika penyebaran chatgpt Anda bukanlah 'obrolan' default.azd env set AZURE_OPENAI_EMBEDDING_DEPLOYMENT {Name of existing GPT embedding deployment}
. Hanya diperlukan jika penyebaran embeddings Anda bukanlah default 'embedding'. azd env set AZURE_SEARCH_SERVICE {Name of existing Azure AI Search service}
azd env set AZURE_SEARCH_SERVICE_RESOURCE_GROUP {Name of existing resource group with ACS service}
azd up
, lalu jalankan azd env set AZURE_SEARCH_SERVICE_LOCATION {Location of existing service}
azd env set AZURE_SEARCH_SERVICE_SKU {Name of SKU}
. Tingkat gratis tidak akan berfungsi karena tidak mendukung identitas yang dikelola. (Lihat nilai lain yang mungkin) Anda juga dapat menggunakan akun penyimpanan yang ada. Lihat ./infra/main.parameters.json
untuk daftar variabel lingkungan untuk diteruskan ke azd env set
untuk mengkonfigurasi sumber daya yang ada.
Sekarang Anda dapat menjalankan azd up
, mengikuti langkah -langkah yang digunakan dari awal di atas. Itu akan memberikan sumber daya penyediaan dan menggunakan kode.
Jika Anda hanya mengubah kode backend/frontend di folder app
, maka Anda tidak perlu menyediakan kembali sumber daya Azure. Anda bisa menjalankan:
azd deploy
Jika Anda telah mengubah file infrastruktur ( infra
folder atau azure.yaml
), maka Anda harus memberikan kembali sumber daya Azure. Anda dapat melakukannya dengan menjalankan:
azd up
Untuk memberi orang lain akses ke lingkungan yang sepenuhnya digunakan dan sudah ada, baik Anda atau mereka dapat mengikuti langkah -langkah ini:
azd init -t azure-search-openai-javascript
atau klon repositori ini.azd env refresh -e {environment name}
Mereka akan membutuhkan nama lingkungan AZD, ID berlangganan, dan lokasi untuk menjalankan perintah ini. Anda dapat menemukan nilai -nilai itu di file .azure/{env name}/.env
. Ini akan mengisi file .env
lingkungan AZD mereka dengan semua pengaturan yang diperlukan untuk menjalankan aplikasi secara lokal.AZURE_PRINCIPAL_ID
baik di dalam file .env
atau di shell aktif ke ID Azure mereka, yang bisa mereka dapatkan dengan az ad signed-in-user show
../scripts/roles.ps1
atau ./scripts/roles.sh
untuk menetapkan semua peran yang diperlukan kepada pengguna. Jika mereka tidak memiliki izin yang diperlukan untuk membuat peran dalam langganan, maka Anda mungkin perlu menjalankan skrip ini untuk mereka. Setelah skrip berjalan, mereka harus dapat menjalankan aplikasi secara lokal. Untuk membersihkan semua sumber daya yang dibuat oleh sampel ini:
azd down --purge
y
y
Grup Sumber Daya dan semua sumber daya akan dihapus.
Secara default, aplikasi Web Azure yang digunakan tidak akan memiliki otentikasi atau pembatasan akses yang diaktifkan, yang berarti siapa pun dengan akses jaringan yang dapat dirutekan ke aplikasi Web dapat mengobrol dengan data yang diindeks. Anda dapat memerlukan otentikasi ke ID Azure Entra Anda dengan mengikuti tutorial Add App Authentication dan mengaturnya terhadap aplikasi Web yang digunakan.
Untuk kemudian membatasi akses ke seperangkat pengguna atau grup tertentu, Anda dapat mengikuti langkah -langkah dari membatasi aplikasi Azure Entra Anda ke satu set pengguna dengan mengubah "penugasan yang diperlukan?" Opsi di bawah aplikasi perusahaan, dan kemudian menetapkan akses pengguna/grup. Pengguna yang tidak diberikan akses eksplisit akan menerima pesan kesalahan -aAdsts50105: Administrator Anda telah mengonfigurasi aplikasi <pesp_name> untuk memblokir pengguna kecuali mereka secara khusus diberikan ('ditetapkan') akses ke aplikasi.-
Kami merekomendasikan untuk menggunakan mekanisme keamanan tambahan. Bila berlaku, pertimbangkan untuk menyiapkan VNET atau menyiapkan kebijakan proxy.
Secara default, API pencarian yang digunakan hanya akan mengizinkan permintaan dari asal yang sama dengan asal aplikasi web yang digunakan. Untuk mengaktifkan CORS untuk frontend yang di -host pada asal yang berbeda, jalankan:
azd env set ALLOWED_ORIGIN https://<your-domain.com>
azd up
Anda hanya dapat menjalankan secara lokal setelah berhasil menjalankan perintah azd up
.
azd auth login
azd env get-values > .env
untuk mendapatkan variabel lingkungan untuk aplikasiaz login
npm start
atau jalankan "VS Code Task: Start App" untuk memulai proyek secara lokal. Sekali di aplikasi web:
Layanan API pencarian mengimplementasikan protokol HTTP untuk aplikasi obrolan AI. Ini dapat ditukar dengan layanan apa pun yang mengimplementasikan protokol yang sama, seperti klien backend Python di repositori ini alih -alih implementasi Node.js yang ditampilkan dalam repo ini.
Untuk melakukannya, ikuti langkah -langkah ini:
azd env get-values | grep WEBAPP_URI
untuk mendapatkan URL.http://localhost:5173
.https://<your_codespace_base_url>-5173.app.github.dev
.azd env set ALLOWED_ORIGIN <your_frontend_url>
.azd env get-values | grep BACKEND_URI
.azd env set BACKEND_URI <your_backend_url>
. Jika Anda ingin menggunakan aplikasi Web yang digunakan, jalankan azd up
hingga Redeploy.
Jika Anda ingin menggunakan aplikasi web lokal di mesin Anda atau di codespaces, jalankan:
# Export the environment variable.
# The syntax may be different depending on your shell or if you're using Windows.
export BACKEND_URI= < your_backend_url >
# Start the app
npm start --workspace=webapp
Sampel ini disusun oleh dua aplikasi: layanan backend dan API, digunakan ke aplikasi wadah Azure, dan aplikasi frontend, yang digunakan ke aplikasi web statis Azure. Secara default, aplikasi Azure Container yang digunakan tidak akan memiliki otentikasi atau pembatasan akses yang diaktifkan, yang berarti siapa pun dengan akses jaringan yang dapat dirutekan ke aplikasi wadah dapat mengobrol dengan data yang Anda diindeks. Anda dapat memerlukan otentikasi ke Azure Entra ID Anda dengan mengikuti Tutorial Otentikasi Tambahkan Aplikasi Container dan mengaturnya terhadap aplikasi Azure Container yang digunakan.
Untuk membatasi akses ke seperangkat pengguna atau grup tertentu, Anda dapat mengikuti langkah -langkah dari membatasi aplikasi Azure Entra Anda ke satu set pengguna dengan mengubah "penugasan yang diperlukan?" Opsi di bawah aplikasi perusahaan, dan kemudian menetapkan akses pengguna/grup. Pengguna yang tidak diberikan akses eksplisit akan menerima pesan kesalahan -aAdsts50105: Administrator Anda telah mengonfigurasi aplikasi <pesp_name> untuk memblokir pengguna kecuali mereka secara khusus diberikan ('ditetapkan') akses ke aplikasi.-
Sampel ini dirancang untuk menjadi titik awal untuk aplikasi produksi Anda sendiri, tetapi Anda harus melakukan tinjauan menyeluruh tentang keamanan dan kinerja sebelum digunakan untuk produksi. Berikut beberapa hal yang perlu dipertimbangkan:
chatGptDeploymentCapacity
dan embeddingDeploymentCapacity
di infra/main.bicep
ke kapasitas maksimum akun Anda. Anda juga dapat melihat tab kuota di Azure Openai Studio untuk memahami berapa banyak kapasitas yang Anda miliki.Standard_LRS
. Untuk meningkatkan ketahanan Anda, kami sarankan menggunakan Standard_ZRS
untuk penyebaran produksi, yang dapat Anda tentukan menggunakan properti sku
di bawah modul storage
di infra/main.bicep
.Standard
dengan opsi pencarian semantik gratis, yang memberi Anda 1000 pertanyaan gratis sebulan. Dengan asumsi aplikasi Anda akan mengalami lebih dari 1000 pertanyaan, Anda harus mengubah semanticSearch
menjadi "standar" atau menonaktifkan pencarian semantik sepenuhnya dalam opsi permintaan. Jika Anda melihat kesalahan tentang kapasitas layanan pencarian yang dilampaui, Anda mungkin merasa terbantu untuk meningkatkan jumlah replika dengan mengubah replicaCount
di infra/core/search/search-services.bicep
.Chunking memungkinkan kami untuk membatasi jumlah informasi yang kami kirim ke OpenAi karena batasan token. Dengan memecah konten, ini memungkinkan kita untuk dengan mudah menemukan potongan teks potensial yang dapat kita suntikkan ke Openai. Metode chunking yang kami gunakan memanfaatkan jendela teks geser sehingga kalimat yang mengakhiri satu potongan akan dimulai berikutnya. Ini memungkinkan kita untuk mengurangi kemungkinan kehilangan konteks teks.
Untuk mengunggah lebih banyak dokumen, masukkan ke dalam data/folder dan jalankan ./scripts/index-data.sh
atau ./scripts/index-data.ps1
.
Repositori populer lainnya untuk kasus penggunaan ini ada di sini: https://github.com/microsoft/sample-app-aoai-catgpt/
Repositori itu dirancang untuk digunakan oleh pelanggan menggunakan Azure OpenAi Studio dan Azure Portal untuk diatur. Ini juga termasuk dukungan azd
untuk orang -orang yang ingin menggunakannya sepenuhnya dari awal.
Perbedaan utama:
Perbandingan fitur:
Fitur | Azure-search-openai-javascript | sampel-app-aoai-catgpt |
---|---|---|
Pendekatan kain | Beberapa pendekatan | Hanya melalui chatcompletion API data_sources |
Dukungan vektor | ✅ Ya | ✅ Ya |
Konsumsi data | ✅ Ya (MD) | ✅ Ya (pdf, txt, md, html) |
Riwayat obrolan yang gigih | Tidak (hanya tab browser) | ✅ Ya, di Cosmosdb |
Perbandingan Teknologi:
Tech | Azure-search-openai-javascript | sampel-app-aoai-catgpt |
---|---|---|
Frontend | Bereaksi/menyala | Bereaksi |
Backend | Node.js (alifikasikan) | Python (Flask) |
Vektor DB | Pencarian Azure AI | Pencarian Azure AI |
Penyebaran | Azure Developer CLI (AZD) | Portal azure, az, azd |
Jalankan perintah ini:
azd env set AZURE_OPENAI_CHATGPT_MODEL gpt-4
Anda mungkin juga perlu menyesuaikan kapasitas dalam file infra/main.bicep
, tergantung pada seberapa banyak TPM akun Anda diizinkan.
Tab obrolan menggunakan pendekatan yang diprogram dalam obrolan-back-retrieve-read.ts. Tab Ask menggunakan pendekatan yang diprogram dalam ask-retrieve-then-read.ts. Ada juga pendekatan satu/tanya yang tersedia, [menggunakan agen] (https://github.com/azure-samples/azure-search-openai-javascript/blob/main-packages/search/src/lib/approaches/ask-read-retrieve-read.ts.
Perintah azd up
berasal dari Azure Developer CLI, dan menangani kedua penyediaan sumber daya Azure dan menggunakan kode ke host Azure yang dipilih.
Perintah azd up
menggunakan file azure.yaml
yang dikombinasikan dengan file .bicep
infrastruktur-sebagai-kode di infra/
folder. File azure.yaml
untuk proyek ini menyatakan beberapa "kait" untuk langkah prapackage dan langkah -langkah postprovision. Perintah up
pertama-tama menjalankan kait prepackage
yang menginstal dependensi simpul dan membangun file JavaScript berbasis react.js. Kemudian mengemas semua kode (baik layanan frontend dan backend) ke dalam file zip yang akan digunakan nanti.
Selanjutnya, TI menyediakan sumber daya berdasarkan main.bicep
dan main.parameters.json
. Pada titik itu, karena tidak ada nilai default untuk lokasi sumber daya OpenAi, ia meminta Anda untuk memilih lokasi dari daftar pendek daerah yang tersedia. Maka itu akan mengirim permintaan ke Azure untuk menyediakan semua sumber daya yang diperlukan. Dengan segala sesuatu yang disediakan, ia menjalankan kait postprovision
untuk memproses data lokal dan menambahkannya ke indeks pencarian AIure AI.
Akhirnya, terlihat di azure.yaml
untuk menentukan host Azure (aplikasi wadah dan aplikasi web statis, dalam hal ini) dan mengunggah layanan aplikasi zip ke Azure. Perintah azd up
sekarang lengkap, tetapi mungkin perlu beberapa menit untuk aplikasi untuk sepenuhnya tersedia dan berfungsi setelah penyebaran awal.
Perintah terkait adalah azd provision
hanya untuk penyediaan (jika file infra berubah) dan azd deploy
untuk hanya menggunakan kode aplikasi yang diperbarui.
Berikut adalah skenario dan solusi kegagalan yang paling umum:
Langganan ( AZURE_SUBSCRIPTION_ID
) tidak memiliki akses ke layanan Azure Openai. Harap pastikan AZURE_SUBSCRIPTION_ID
cocok dengan ID yang ditentukan dalam proses permintaan akses OpenAI.
Anda mencoba membuat sumber daya di daerah yang tidak diaktifkan untuk Azure Openai (mis. East US 2 bukannya AS Timur), atau di mana model yang Anda coba gunakan tidak diaktifkan. Lihat matriks ketersediaan model ini.
Anda telah melampaui kuota, paling sering jumlah sumber daya per wilayah. Lihat artikel ini tentang kuota dan batasan.
Anda mendapatkan konflik "nama sumber daya yang sama tidak diperbolehkan". Itu mungkin karena Anda telah menjalankan sampel beberapa kali dan menghapus sumber daya yang telah Anda buat setiap kali, tetapi lupa untuk membersihkannya. Azure menyimpan sumber daya selama 48 jam kecuali jika Anda membersihkan dari soft delete. Lihat artikel ini tentang sumber daya pembersihan.
Setelah menjalankan azd up
dan mengunjungi situs web, Anda melihat '404 tidak ditemukan' di browser. Tunggu 10 menit dan coba lagi, karena mungkin masih dimulai. Kemudian cobalah menjalankan azd deploy
dan tunggu lagi. Jika Anda masih mengalami kesalahan dengan aplikasi yang digunakan, konsultasikan dengan tips ini untuk men -debugging penyebaran aplikasi layanan dan mengajukan masalah jika log kesalahan tidak membantu Anda menyelesaikan masalah tersebut.
Anda mendapatkan 401 Principal does not have access to API/Operation
saat menjalankan proyek secara lokal atau mencoba digunakan. Itu mungkin karena variabel lingkungan Anda termasuk AZURE_TENANT_ID
, AZURE_CLIENT_ID
dan AZURE_CLIENT_SECRET
. Anda harus memberikan izin kepada kepala sekolah terkait atau menghapus variabel -variabel ini dari lingkungan Anda untuk memastikan akses normal. Untuk detail lebih lanjut, silakan merujuk ke Azure Identity SDK.
Catatan: Dokumen yang digunakan dalam demo ini berisi informasi yang dihasilkan menggunakan model bahasa (Azure OpenAai Service). Informasi yang terkandung dalam dokumen -dokumen ini hanya untuk tujuan demonstrasi dan tidak mencerminkan pendapat atau keyakinan Microsoft. Microsoft tidak membuat representasi atau jaminan dalam bentuk apa pun, tersurat maupun tersirat, tentang kelengkapan, akurasi, keandalan, kesesuaian atau ketersediaan sehubungan dengan informasi yang terkandung dalam dokumen ini. Semua hak dilindungi undang -undang untuk Microsoft.