Dalam landskap pembangunan perisian yang pesat berkembang, persimpangan kecerdasan buatan, pengesahan data, dan pengurusan pangkalan data telah membuka kemungkinan yang belum pernah terjadi sebelumnya. Pos blog ini meneroka pendekatan yang inovatif untuk penjanaan kod SQL dan penjelasan kod SQL menggunakan rangka kerja Pydanticai terkini dan model Gemini-1.5 Google, menunjukkan bagaimana teknologi AI yang canggih dapat menyelaraskan dan meningkatkan pembangunan pertanyaan pangkalan data.
Bagi pemaju, saintis data, dan penganalisis data, penerokaan ini menawarkan gambaran masa depan penjanaan kod pintar dari pemprosesan bahasa semulajadi, di mana pertanyaan pangkalan data yang kompleks dapat dibuat dengan mudah dan ketepatan.
Artikel ini diterbitkan sebagai sebahagian daripada Blogathon Sains Data.
Pydanticai adalah perpustakaan Python yang kuat yang merevolusi pengesahan data dan pemeriksaan jenis. Ia menyediakan pendekatan deklaratif untuk menentukan model data, menjadikannya mudah untuk membuat dan mengesahkan struktur data kompleks.
Ciri -ciri penting Pydantic termasuk:
Penyesuaian
Fleksibiliti
Membolehkan kawalan ke atas ketat pengesahan data:
Serialization
Prestasi
Ekosistem
Pydanticai memudahkan pengesahan data dan pemeriksaan jenis dalam Python, menjadikannya alat yang berkuasa untuk membuat model data yang mantap. Mari kita meneroka beberapa contoh praktikal yang mempamerkan keupayaannya.
dari basemodel import pydantic Pengguna Kelas (BaseModel): Nama: Str Umur: Int # Data yang sah pengguna = pengguna (name = "Alice", umur = 30) Cetak (pengguna) Cetak ("===================================") # Data tidak sah (umur adalah rentetan) Cuba: Pengguna = pengguna (name = "Alice", umur = "tiga puluh") Kecuali pengecualian sebagai e: cetak (e)
Kod di atas mentakrifkan model pengguna menggunakan basemodel Pydantic, menguatkuasakan nama sebagai rentetan dan umur sebagai integer. Ia mengesahkan data yang betul tetapi menimbulkan ralat pengesahan apabila data tidak sah (rentetan untuk umur) disediakan.
Output:
dari basemodel import pydantic Produk Kelas (BaseModel): Harga: Terapung Kuantiti: Int # Data dengan jenis yang tidak sesuai produk = produk (harga = "19.99", kuantiti = "5") Cetak (produk) cetak (jenis (produk.price)) cetak (jenis (produk.quantity))
Di sini, model produk dengan harga sebagai terapung dan kuantiti sebagai integer. Pydantic secara automatik memaksa input rentetan ("19.99" dan "5") ke dalam jenis yang betul (Float dan Int), menunjukkan ciri penukaran jenisnya.
Output:
dari basemodel import pydantic Alamat Kelas (BaseModel): Jalan: Str Bandar: Str Pengguna Kelas (BaseModel): Nama: Str Alamat: Alamat # Data yang sah pengguna = pengguna (name = "bob", alamat = {"street": "123 main st", "city": "wonderland"}) Cetak (pengguna) # Akses atribut bersarang cetak (user.address.city)
Di sini, kami menentukan model pengguna bersarang yang mengandungi model alamat . Pydantic membolehkan kamus pengesahan bersarang dan penukaran automatik ke dalam model. Data yang sah memulakan objek pengguna , dan anda boleh mengakses atribut bersarang seperti ' user.address.city' secara langsung.
Output:
Dari Pydantic Import Basemodel, Field, Field_Validator Pengguna Kelas (BaseModel): Nama: Str Umur: int = medan (..., gt = 0, description = "umur mesti lebih besar daripada sifar") @field_validator ("Nama") def name_must_be_non_empty (cls, nilai): jika tidak nilai.strip (): Naikkan ValueError ("Nama tidak boleh kosong") nilai pulangan # Data yang sah pengguna = pengguna (name = "Charlie", umur = 25) Cetak (pengguna) # data tidak sah Cuba: pengguna = pengguna (name = "", umur = -5) Kecuali pengecualian sebagai e: cetak (e)
Di sini, kami menentukan model pengguna dengan peraturan pengesahan, umur mestilah lebih besar daripada 0, dan nama tidak boleh kosong (disahkan melalui kaedah name_must_be_non_empty ). Data yang sah mencipta contoh pengguna , sementara data tidak sah (nama kosong atau umur negatif) menimbulkan kesilapan pengesahan terperinci, menunjukkan keupayaan pengesahan Pydantic.
Output:
Ini adalah beberapa contoh utama Pydantic Saya harap mereka membantu anda memahami prinsip asas pengesahan data.
Ejen AI adalah sistem pintar yang direka untuk melaksanakan tugas secara autonomi, membuat keputusan, dan berinteraksi dengan persekitaran mereka untuk mencapai objektif tertentu. Ejen -ejen ini bukan perkembangan pesat baru tetapi baru -baru ini dalam AI generatif dan menggabungkannya dengan ejen membuat pembangunan perisian agensi pada era baru. Sekarang, ejen boleh memproses input, melaksanakan tindakan, dan menyesuaikan diri secara dinamik. Tingkah laku mereka meniru penyelesaian masalah seperti manusia, membolehkan mereka berfungsi dalam pelbagai domain dengan campur tangan manusia yang minimum.
Aliran kerja yang agentik merujuk kepada struktur, urutan tugas yang didorong oleh matlamat yang diuruskan dan dilaksanakan oleh satu atau beberapa agen AI. Aliran kerja tradisional yang tegar, aliran kerja agentik mempamerkan kebolehsuaian, autonomi, dan kesedaran konteks. Ejen AI dalam aliran kerja ini secara bebas boleh membuat keputusan, mewakilkan subtask, dan belajar dari maklum balas, yang membawa kepada hasil yang cekap dan dioptimumkan.
Penyepaduan ejen AI dan aliran kerja agentik telah merevolusikan industri dengan mengautomasikan tugas-tugas yang kompleks, meningkatkan pengambilan keputusan, dan kecekapan memandu. Sistem pintar ini menyesuaikan diri secara dinamik, membolehkan penyelesaian yang lebih bijak merentasi pelbagai domain.
Ejen AI mengautomasikan tugas berulang seperti sokongan pelanggan melalui chatbots, pengurusan e -mel, dan pengoptimuman saluran paip jualan. Mereka meningkatkan produktiviti dengan membebaskan sumber manusia dari tugas bernilai tinggi.
Ejen berkuasa AI mempercepatkan hayat perisian dengan menghasilkan, menguji, dan menyahpepijat kod, dengan itu mengurangkan masa pembangunan dan kesilapan manusia.
Ejen AI membantu dalam diagnosis perubatan, pemantauan pesakit, dan pemperibadian rawatan, meningkatkan penyampaian penjagaan kesihatan dan kecekapan operasi.
Aliran kerja Agentik dalam sistem kewangan mengotomatisasi pengesanan penipuan, penilaian risiko, dan analisis pelaburan, yang membolehkan pengambilan keputusan yang lebih cepat dan lebih dipercayai.
Agensi perisikan meningkatkan keperibadian dalam pengalaman membeli -belah, mengoptimumkan cadangan produk dan perkhidmatan pelanggan.
Kebangkitan ejen AI dan aliran kerja agentik menandakan peralihan ke arah sistem yang sangat autonomi yang mampu menguruskan proses yang kompleks. Keupayaan penyesuaian dan pembelajaran mereka menjadikan mereka sangat diperlukan untuk industri moden, memacu inovasi, skalabilitas, dan kecekapan di seluruh domain. Apabila AI terus berkembang, ejen AI akan terus mengintegrasikan ke dalam aliran kerja harian kami, mengubah cara tugas diuruskan dan dilaksanakan.
Pydanticai adalah kerangka agen Python yang dibangunkan oleh pencipta Pydantic, FastAPI untuk menyelaraskan pembinaan aplikasi gred pengeluaran menggunakan AI generatif, ia menekankan jenis keselamatan, reka bentuk model-agnostik, dan integrasi lancar dengan model bahasa besar (LLMS).
Ciri -ciri utama Pydanticai termasuk:
Berikut adalah contoh minimum Pydanticai:
Import OS dari ejen import pydantic_ai dari pydantic_ai.models.gemini import geminimodel dari dotenv import load_dotenv LOAD_DOTENV () Gemini_api_key = os.getenv ("<google_api_key>") Model = GeminiModel ( "Gemini-1.5-Flash", api_key = Gemini_api_key, ) ejen = ejen ( model = model, System_prompt = "Jadilah ringkas, balas dengan satu ayat.", ) hasil = agen.run_sync ('Di manakah "Hello World" berasal?') cetak (result.data)</google_api_key>
Output:
Kini sudah tiba masanya untuk melakukan beberapa perkara sebenar. Kami akan membina penjanaan pertanyaan SQL Postgres menggunakan rangka kerja agen Pydanticai.
Letakkan asas untuk projek anda dengan panduan langkah demi langkah untuk menubuhkan alat dan persekitaran penting.
Kami akan mewujudkan persekitaran conda untuk projek ini.
#Buat env $ conda create -nama sql_gen python = 3.12 # Aktifkan env $ conda mengaktifkan sql_gen
Sekarang, buat folder projek
# Buat folder $ mkdir sql_code_gen # Tukar ke folder $ cd sql_code_gen
Untuk memasang pasang Postgres, psql-command, dan pgadmin-4, hanya pergi ke edbdownload pemasang anda untuk sistem anda, dan pasang semua alat dalam satu perjalanan.
Sekarang muat turun pangkalan data dvdrental dari hereand untuk memuatkannya ke postgres ikuti langkah -langkah ini
PSQL -U Postgres # Ia akan meminta kata laluan meletakkannya
# Di postgres =# Buat pangkalan data dvdrental;
Sekarang, keluar dari arahan PSQL dan kemudian taipkan terminal
pg_restore -u postgres -d dvdrental d: /sampledb/postgres/dvdrental.tar
Sekarang, sambungkan ke PSQL dan periksa sama ada pangkalan data anda dimuatkan atau tidak.
PSQL -U Postgres # Berhubung dengan dvdrental \ c dvdrental # mari kita lihat jadual \ dt
Output:
Sekiranya anda melihat jadual di atas maka anda baik -baik saja. Kami bersedia untuk memulakan projek utama kami.
Sekarang pasang perpustakaan Python yang diperlukan ke dalam SQL_Gen Conda Env.
Conda Aktifkan SQL_GEN # Pasang perpustakaan PIP Pasang Pydantic Asyncpg Asyncio Pydantic-ai PIP Pasang Python-Dotenv Fastapi Google-Generativeai PIP Pasang DevTools jenis-jenis-jenis-jenis
Projek kami mempunyai 4 fail iaitu Main, Model, Perkhidmatan, dan Skema.
sql_query_gen/ | | ---main.py |--Models.py |-schema.py |-service.py |-. Env | --__ init__.py |-. Gitignore
Menyelam langkah -langkah terperinci dan teknik praktikal untuk membawa projek anda dari konsep kepada realiti dengan panduan pelaksanaan komprehensif ini.
Kami akan mulakan dengan membuat model data dalam fail model.py
Dari DataClass Import DataClass dari menaip import anotasi Import asyncpg dari annotated_types import minlen dari Pydantic Import Basemodel, Field @DataClass Deps Kelas: Conn: asyncpg.connection Kejayaan Kelas (Basemodel): SQL_Query: Annotated [str, minlen (1)] Penjelasan: str = medan ("", keterangan = "Penjelasan pertanyaan SQL, sebagai Markdown") Kelas InvalidRequest (BaseModel): error_message: str
Dalam kod di atas,
Kod ini menubuhkan asas bagi pengurusan sambungan pangkalan data, pengesahan input, pengendalian tindak balas berstruktur, dan pengendalian ralat.
Sekarang, kami akan melaksanakan perkhidmatan Pydanticai untuk penjanaan SQL dalam modul perkhidmatan.
Import Perpustakaan dan Konfigurasi
Import OS dari menaip kesatuan import dari dotenv import load_dotenv Import asyncpg dari typing_extensions import sypealias dari ejen import pydantic_ai, modelretry, runcontext dari pydantic_ai.models.gemini import geminimodel dari skema import db_schema Dari model import Deps, kejayaan, Invalidrequest
Untuk mengkonfigurasi, buat fail .env di akar projek dan letakkan kunci API Gemini anda di sana
# .env Gemini_api_key = "asgfhkdhjy457gthjhajbsd"
Kemudian dalam fail service.py:
LOAD_DOTENV () Gemini_api_key = os.getenv ("Google_API_KEY")
Ia akan memuatkan kunci API Google dari `. env `fail.
Respons: Typealias = Union [Kejayaan, InvalidRequest] Model = GeminiModel ( "Gemini-1.5-Flash", api_key = Gemini_api_key, ) ejen = ejen ( model, result_type = respons, # jenis: abaikan deps_type = deps, )
Sekarang kita akan menentukan sistem prompt untuk penjanaan pertanyaan SQL kami.
@agen.system_prompt async def system_prompt () -> str: kembali f "" "\ Memandangkan jadual rekod postgresQL berikut, tugas anda adalah Tulis pertanyaan SQL yang sesuai dengan permintaan pengguna. Skema pangkalan data: {Db_schema} Contoh Permintaan: Cari semua filem dengan kadar sewa lebih daripada $ 4.00 dan penarafan 'PG' Respons: Pilih Tajuk, Rental_Rate Dari filem Di mana sewa_rate> 4.00 dan rating = 'pg'; Contoh Permintaan: Cari filem dengan panjang terpanjang Respons: Pilih Tajuk, Panjang Dari filem Di mana panjang = (pilih max (panjang) dari filem); Contoh Permintaan: Cari tempoh sewa purata untuk filem dalam setiap kategori Respons: Pilih C.Name, AVG (f.rental_duration) sebagai purata_rental_duration Dari kategori c Sertai Film_Category FC pada c.category_id = fc.category_id Sertai Filem F di fc.film_id = f.film_id Kumpulan oleh C.Name Perintah oleh purata_rental_duration desc; "" "
Di sini, kami menentukan konteks asas untuk model AI dan memberikan pertanyaan contoh untuk membimbing tindak balas model. Kami juga memasukkan maklumat skema pangkalan data dalam model supaya model dapat menganalisis skema dan menghasilkan respons yang lebih baik.
Untuk membuat respons dari model AI tanpa ralat dan sehingga keperluan projek, kami hanya mengesahkan respons.
@agen.result_validator async def validate_result (ctx: runContext [deps], hasil: respons) -> respons: jika isInstance (hasil, InvalidRequest): Keputusan pulangan # Gemini sering menambah tindak balas extraneos ke SQL result.sql_query = result.sql_query.replace ("\\", "") jika tidak result.sql_query.upper (). startswith ("pilih"): Naikkan ModelRetry ("Sila buat pertanyaan pilih") Cuba: menunggu ctx.deps.conn.execute (f "jelaskan {result.sql_query}") kecuali asyncpg.exceptions.postgreSerror sebagai e: meningkatkan modelRetry (f "tidak sah sql: {e}") dari e lain: Keputusan pulangan
Di sini, kami akan mengesahkan dan memproses pertanyaan SQL yang dihasilkan
Langkah Pengesahan Utama:
Untuk mendapatkan skema pangkalan data anda, buka PGAdmin4 yang telah anda pasang semasa persediaan Postgres, pergi ke pangkalan data ` dvDrental` , klik kanan di atasnya, dan klik` erd untuk pangkalan data `.
Anda akan mendapat gambarajah ERD di bawah, kini menjana SQL dari ERD (lihat tanda hitam bulat pada imej).
Salin skema ke modul skema.py:
# skema.py Db_schema = "" " Bermula; Buat jadual jika tidak ada awam.Actor ( pelakon_id siri tidak batal, watak pertama_name berbeza -beza (45) menyusun pg_catalog. "lalai" tidak null, watak last_name berbeza -beza (45) menyusun pg_catalog. "lalai" tidak null, last_update Timestamp tanpa zon waktu tidak null lalai sekarang (), Kekunci utama pelakon_pkey (actor_id) ); . . . . . . "" "
Blok kod di atas sangat dipotong , untuk mendapatkan kod penuh sila lawati repo projek.
Sekarang, bahawa semua modul yang diperlukan telah selesai, masa untuk melaksanakan kaedah dan ujian utama.
Kami akan melakukan definisi fungsi utama dan pengendalian segera.
Import Asyncio Import OS Import sys dari menaip kesatuan import dari dotenv import load_dotenv Import asyncpg dari debug import devtools dari typing_extensions import sypealias dari ejen import pydantic_ai dari pydantic_ai.models.gemini import geminimodel Dari model import Deps, kejayaan, Invalidrequest LOAD_DOTENV () Gemini_api_key = os.getenv ("Google_API_KEY") Respons: Typealias = Union [Kejayaan, InvalidRequest] Model = GeminiModel ( "Gemini-1.5-Flash", api_key = Gemini_api_key, ) ejen = ejen ( model, result_type = respons, # jenis: abaikan deps_type = deps, ) async def main (): jika len (sys.argv) == 1: prompt = "Sila buat pertanyaan pilih" lain: prompt = sys.argv [1] # Sambungan ke pangkalan data Conn = menanti asyncpg.connect ( pengguna = "Postgres", kata laluan = "avizyt", tuan rumah = "localhost", port = 5432, pangkalan data = "dvdrental", ) Cuba: Deps = Deps (Conn) hasil = menunggu ejen.run (prompt, deps = deps) hasil = debug (result.data) Cetak ("======== Pertanyaan anda =========") cetak (debug (result.sql_query)) Cetak ("======== Penjelasan =========") cetak (debug (result.explanation)) Akhirnya: menanti conn.close () jika __name__ == "__main__": asyncio.run (utama ())
Di sini, pertama, tentukan fungsi utama yang tidak segerak, dan periksa hujah baris arahan untuk pertanyaan klien. Jika tiada args disediakan, gunakan prompt lalai.
Kemudian kami menetapkan parameter sambungan Postgres untuk berhubung dengan perkhidmatan pangkalan data DVDrental.
Dalam blok cuba, buat contoh DEPS dengan sambungan pangkalan data, jalankan ejen AI dengan prompt, memproses hasil menggunakan fungsi debug ( PIP Install DevTools ). Kemudian mencetak output diformat termasuk pertanyaan SQL yang dihasilkan dan penjelasan pertanyaan. Selepas itu, kami akhirnya menutup sambungan pangkalan data.
Sekarang jalankan modul utama seperti di bawah:
# di terminal python main.py "Dapatkan jumlah sewa untuk setiap pelanggan"
Output:
Selepas menguji pertanyaan SQL di pgadmin4:
Wow! Ia berfungsi seperti yang kita mahukan. Uji lebih banyak pertanyaan seperti ini dan nikmati pembelajaran.
Projek ini merupakan langkah penting dalam membuat interaksi pangkalan data lebih intuitif dan boleh diakses. Dengan menggabungkan kuasa AI dengan prinsip kejuruteraan perisian yang mantap, kami telah mencipta alat yang bukan sahaja menjana pertanyaan SQL tetapi melakukannya dengan cara yang selamat, pendidikan, dan praktikal untuk kegunaan dunia nyata.
Kejayaan pelaksanaan ini menunjukkan potensi AI untuk meningkatkan daripada menggantikan operasi pangkalan data tradisional, menyediakan alat yang berharga untuk pembelajaran dan produktiviti.
Repo Projek - Semua kod yang digunakan dalam projek ini boleh didapati di sini.
A. Pydanticai menawarkan penjanaan kod yang selamat, disahkan dengan pemeriksaan ralat terbina dalam dan pemahaman kontekstual.
Q 2. Bagaimana Gemini-1.5-Flash menyumbang kepada projek itu?A. Model Gemini menyediakan pemprosesan bahasa semulajadi yang maju, menterjemahkan pertanyaan manusia yang kompleks ke dalam pernyataan SQL yang tepat.
Q 3. Bolehkah projek ini diperluaskan ke aplikasi AI yang lain?A. Sudah tentu! Senibina boleh disesuaikan untuk penjanaan kod, transformasi data, dan automasi pintar merentasi pelbagai domain.
Media yang ditunjukkan dalam artikel ini tidak dimiliki oleh Analytics Vidhya dan digunakan atas budi bicara penulis.
Atas ialah kandungan terperinci Membina aplikasi bertenaga LLM-gred pengeluaran dengan Pydanticai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!