在軟件開發的快速發展的景觀中,人工智能,數據驗證和數據庫管理的交集開闢了前所未有的可能性。這篇博客文章探討了使用最新的Pydanticai Framework和Google的Gemini-1.5模型來探討SQL代碼生成和SQL代碼說明的創新方法,以展示尖端AI技術如何簡化和增強數據庫查詢開發。
對於開發人員,數據科學家和數據分析師,此探索從自然語言處理中瞥見了智能代碼生成的未來,在這種情況下,可以輕鬆而準確地創建複雜的數據庫查詢。
本文作為數據科學博客馬拉鬆的一部分發表。
Pydanticai是一個強大的Python庫,可革新數據驗證和類型檢查。它為定義數據模型提供了一種聲明性的方法,從而易於創建和驗證複雜的數據結構。
Pydantic的重要特徵包括:
定制
靈活性
允許控制數據驗證嚴格性:
序列化
表現
生態系統
Pydanticai簡化了Python中的數據驗證和類型檢查,使其成為創建強大數據模型的強大工具。讓我們探索一些展示其功能的實用示例。
來自Pydantic Import Basemodel 類用戶(基本模型): 名稱:str 年齡:int #有效數據 用戶=用戶(name =“ Alice”,年齡= 30) 打印(用戶) 打印(“ ================================== #無效數據(年齡是字符串) 嘗試: 用戶=用戶(name =“ Alice”,age =“三十”) 除例外為E: 打印(E)
上面的代碼使用Pydantic的基本模型定義了用戶模型,將名稱作為字符串和年齡作為整數執行。它驗證了正確的數據,但是當提供了無效的數據(年齡的字符串)時,會引起驗證錯誤。
輸出:
來自Pydantic Import Basemodel 類產品(基本模型): 價格:浮動 數量:int #不匹配類型的數據 產品=產品(價格=“ 19.99”,數量=“ 5”) 印刷(產品) 打印(類型(product.price)) 打印(類型(product.Quantity))
在這裡,價格為浮動和數量的產品模型作為整數。 Pydantic自動將字符串輸入(“ 19.99”和“ 5”)驅動到正確的類型(float and int)中,以演示其類型的轉換功能。
輸出:
來自Pydantic Import Basemodel 班級地址(基本模型): 街:Str 城市:Str 類用戶(基本模型): 名稱:str 地址:地址 #有效數據 user =用戶(name =“ bob”,地址= {“街”:“ 123 Main St”,“ City”:“ Wonderland”}) 打印(用戶) #訪問嵌套屬性 打印(user.address.city)
在這裡,我們定義一個包含地址模型的嵌套用戶模型。 Pydantic允許嵌套驗證,並自動轉換字典成模型。有效的數據初始化了用戶對象,您可以直接訪問諸如“ user.address.city”之類的嵌套屬性。
輸出:
來自Pydantic Import basemodel,field,field_validator 類用戶(基本模型): 名稱:str 年齡:int = field(...,gt = 0,description =“年齡必須大於零”) @field_validator(“名稱”) def name_must_be_non_empty(cls,value): 如果不是value.strip(): 提高價值Error(“名稱不能為空”) 返回值 #有效數據 用戶=用戶(name =“ Charlie”,年齡= 25) 打印(用戶) #無效數據 嘗試: 用戶=用戶(name =“”,年齡= -5) 除例外為E: 打印(E)
在這裡,我們定義具有驗證規則的用戶模型,年齡必須大於0,並且該名稱不能為空(通過name_must_be_non_empty方法驗證)。有效的數據創建了一個用戶實例,而無效的數據(空名稱或負年齡)會引發詳細的驗證錯誤,以證明Pydantic的驗證功能。
輸出:
這些是Pydantic的一些核心例子,我希望它們能幫助您了解數據驗證的基本原理。
AI代理是智能係統,旨在自主執行任務,做出決策並與其環境互動以實現特定目標。這些代理並不是新的,而是生成AI的近期快速發展,並將其與代理相結合,使代理軟件在新時代開發。現在,代理可以處理輸入,執行操作並動態適應。他們的行為模仿了類似人類的問題解決,使他們能夠在人類干預的情況下在各個領域發揮作用。
代理工作流程是指由一個或多個AI代理管理和執行的結構,目標驅動的任務序列。統一僵化的傳統工作流程,代理工作流具有適應性,自主性和上下文意識。這些工作流程中的AI代理可以獨立做出決策,委派子任務並從反饋中學習,從而導致有效且優化的結果。
AI代理和代理工作流程的整合通過使復雜的任務自動化,增強決策和推動效率來徹底改變行業。這些智能係統動態適應,從而使跨不同領域的更智能解決方案。
AI代理通過聊天機器人,電子郵件管理和銷售管道優化的重複任務自動化重複任務。它們通過從高價值任務中釋放人力資源來提高生產率。
通過生成,測試和調試代碼,通過AI驅動的代理加速軟件生命週期,從而減少了開發時間和人為錯誤。
AI代理協助醫療診斷,患者監測和治療個性化,改善醫療保健提供和操作效率。
金融系統中的代理工作流程自動化欺詐檢測,風險評估和投資分析,實現更快,更可靠的決策。
情報機構可以增強購物體驗中的個性化,優化產品建議和客戶服務。
AI代理和代理工作流的興起意味著向能夠管理複雜過程的高度自主系統的轉變。它們的適應性和學習能力使它們對於現代行業來說是必不可少的,推動了跨領域的創新,可擴展性和效率。隨著AI的不斷發展,AI代理將進一步集成到我們的日常工作流程中,從而改變瞭如何管理和執行任務。
Pydanticai是由Pydantic,Fastapi的創建者開發的Python代理框架,用於簡化利用生成AI的生產級應用的構建,它強調了類型的安全性,模型 - 敏銳的設計以及與大語言模型(LLMS)的無縫集成。
pydanticai的關鍵功能包括:
這是Pydanticai的最小例子:
導入操作系統 來自Pydantic_ai進口代理 來自pydantic_ai.models.gemini導入geminimodel 來自dotenv import load_dotenv load_dotenv() gemini_api_key = os.getenv(“ <google_api_key>”) 型號= geminimodel( “ Gemini-1.5-Flash”, api_key = gemini_api_key, ) 代理=代理( 模型=模型, system_prompt =“要簡潔,用一個句子回复。”,, ) 結果= agent.run_sync('“ Hello World”來自哪裡?') 打印(result.data)</google_api_key>
輸出:
現在是時候做一些真實的事情了。我們將使用Pydanticai代理框架構建Postgres SQL查詢生成。
通過逐步指南為您的項目奠定基礎,以設置基本工具和環境。
我們將為該項目創建一個Conda環境。
#創建一個環境 $ conda create -name sql_gen python = 3.12 #激活env $ conda激活sql_gen
現在,創建一個項目文件夾
#創建一個文件夾 $ mkdir sql_code_gen #更改為文件夾 $ CD SQL_CODE_GEN
要安裝Postgres,PSQL-Command-Tools和Pgadmin-4,只需轉到EDBDONDON for Systaller的系統,然後一次安裝所有工具即可。
現在,從Hereand下載DVDRENALE數據庫,將其加載到Postgres,請按照以下步驟
PSQL -U Postgres #它會要求密碼放置
#在Postgres =#中 創建數據庫DVDRENTAL;
現在,退出PSQL命令,然後輸入終端
pg_restore -u postgres -d dvdrenaltal d:/sampledb/postgres/dvdrental.tar
現在,連接到PSQL並檢查數據庫是否已加載。
PSQL -U Postgres #與dvDretal \ c dvDretal #讓我們看看桌子 \ dt
輸出:
如果您看到上表,則可以。我們都準備啟動我們的主要項目。
現在,將必要的Python庫安裝到SQL_GEN CONDA ENV中。
conda激活sql_gen #安裝庫 PIP安裝pydantic asyncpg asyncio pydantic-ai PIP安裝Python-Dotenv Fastapi Google-generativeai PIP安裝DevTools註釋類型類型擴展
我們的項目有4個文件,即主,模型,服務和架構。
sql_query_gen/ | | -main.py | - models.py | -schema.py | -service.py | - | --__ init__.py | - 。吉蒂尼爾
通過此全面的實施指南,深入研究詳細的步驟和實用技術,以將您的項目從概念帶到現實。
我們將首先在模型中創建數據模型。
從數據級導入數據級 從輸入導入註釋 導入異步 從Annotated_types進口minlen 來自Pydantic Import Basemodel,field @DataClass 班級級別: conn:asyncpg.connection 班級成功(基本模型): sql_query:註釋[str,minlen(1)] 說明:str = field(“”,description =“ SQL查詢的說明,作為Markdown”) 類InvalidRequest(basemodel): error_message:str
在上述代碼中,
該代碼為數據庫連接管理,輸入驗證,結構化響應處理和錯誤處理建立了基礎。
現在,我們將在服務模塊中為SQL生成實施Pydanticai服務。
導入庫和配置
導入操作系統 從輸入進口聯盟 來自dotenv import load_dotenv 導入異步 從typing_extensions導入typealias 來自pydantic_ai進口代理,模型,runcontext 來自pydantic_ai.models.gemini導入geminimodel 從模式導入db_schema 從模型導入深度,成功,無效
要配置,請在項目root中創建.ENV文件,然後將您的Gemini API密鑰放在那裡
#.env gemini_api_key =“ asgfhkdhjy457gthjhajblsd”
然後在service.py文件中:
load_dotenv() gemini_api_key = os.getEnv(“ google_api_key”)
它將從`````'''加載Google API密鑰。 env`文件。
響應:typealias = union [成功,無效] 型號= geminimodel( “ Gemini-1.5-Flash”, api_key = gemini_api_key, ) 代理=代理( 模型, result_type =響應,#類型:忽略 dep_type = deps, )
現在,我們將定義SQL查詢生成的系統提示。
@agent.system_prompt 異步def system_prompt() - > str: 返回f“” \ 鑑於以下郵政記錄表,您的工作是 編寫適合用戶請求的SQL查詢。 資料庫結構定義: {db_schema} 例子 請求:查找所有租金大於$ 4.00的電影和“ PG”的評級 響應:選擇標題,lental_rate 來自電影 其中rental_rate> 4.00和等級='pg'; 例子 請求:查找最長長度的電影 響應:選擇標題,長度 來自電影 其中長度=(從膠片中選擇最大(長度)); 例子 請求:找到每個類別中電影的平均租金持續時間 響應:選擇C.NAME,AVG(F.Rental_duration)作為平均_rental_duration 從類別c 加入c.Category_id = fc.category_id on c.Category_id上 加入FC.FILM_ID上的電影F = F.FILM_ID 組由C.Name 按平均訂單_rental_duration desc; ”“”
在這裡,我們定義了AI模型的基本上下文,並提供了示例查詢以指導模型的響應。我們還將數據庫架構信息包括在模型中,以便模型可以分析模式並產生更好的響應。
為了使AI模型無錯誤的響應並符合項目要求,我們只是驗證了響應。
@Agent.Result_Validator 異步def validate_result(ctx:runcontext [deps],結果:響應) - >響應: 如果IsInstance(結果,無效): 返回結果 #雙子座經常向SQL添加反彈 result.sql_query = result.sql_query.replace(“ \\”,“”) 如果不是結果。 提高模型培訓(“請創建一個選擇查詢”) 嘗試: 等待ctx.deps.conn.execute(f“ divell {result.sql_query}”) 除了asyncpg.exceptions.postgreserror為e: 從e提出模型的(f“無效的sql:{e}”) 別的: 返回結果
在這裡,我們將驗證並處理生成的SQL查詢
關鍵驗證步驟:
要獲取數據庫架構,請打開您在Postgres設置期間安裝的PGADMIN4,轉到`` dvDrenaltal`數據庫'',右鍵單擊它,然後單擊數據庫`。
您將獲得以下ERD圖,現在從ERD生成SQL(請參閱圖像上的圓形黑色標記)。
將架構複製到schema.py模塊:
#schema.py db_schema =“” 開始; 創建表格,如果不存在public.actor (( actor_id序列而不是null, first_name字符變化(45)caltrate pg_catalog。“默認”而不是null, last_name字符變化(45)整理pg_catalog。“默認”而不是null, last_update時間戳記沒有時區,而不是null默認值(), 約束actor_pkey主鍵(actor_id) ); 。 。 。 。 。 。 ”“”
上面的代碼塊被嚴重截斷,要獲得完整的代碼,請訪問項目回購。
現在,所有必要的模塊都已完成,是時候實現主方法和測試了。
我們將執行主要功能定義和提示處理。
導入異步 導入操作系統 導入系統 從輸入進口聯盟 來自dotenv import load_dotenv 導入異步 從DevTools導入調試 從typing_extensions導入typealias 來自Pydantic_ai進口代理 來自pydantic_ai.models.gemini導入geminimodel 從模型導入深度,成功,無效 load_dotenv() gemini_api_key = os.getEnv(“ google_api_key”) 響應:typealias = union [成功,無效] 型號= geminimodel( “ Gemini-1.5-Flash”, api_key = gemini_api_key, ) 代理=代理( 模型, result_type =響應,#類型:忽略 dep_type = deps, ) 異步def main(): 如果Len(sys.argv)== 1: 提示=“請創建一個選擇查詢” 別的: 提示= sys.argv [1] #連接到數據庫 conn =等待asyncpg.connect( 用戶=“ Postgres”, 密碼=“ avizyt”, 主機=“ localhost”, 端口= 5432, 數據庫=“ dvdretaltal”, ) 嘗試: deps = deps(conn) 結果=等待代理。 結果= debug(result.data) 打印(“ ==========您的查詢=========”) 打印(debug(result.sql_query)) 打印(“ ===========解釋=========”) 打印(debug(結果。解釋)) 最後: 等待conn.close() 如果__name__ ==“ __ -main __”: asyncio.run(main())
首先,在這裡定義異步主函數,然後檢查客戶端查詢的命令行參數。如果沒有提供ARG,請使用默認提示。
然後,我們將Postgres連接參數設置為與DVDRENTAR數據庫服務連接。
在Try Block中,使用數據庫連接創建一個DEPS實例,使用提示來運行AI代理,使用調試函數( PIP INSTALS DEVTOOLS )處理結果。然後打印格式的輸出,包括生成的SQL查詢和查詢的說明。之後,我們終於關閉了數據庫連接。
現在運行主模塊,如下所示:
#在終端中 python main.py“獲取每個客戶的租金總數”
輸出:
測試PGADMIN4中的SQL查詢後:
哇!它像我們想要的一樣工作。測試更多這樣的查詢並享受學習。
該項目代表了使數據庫交互更加直觀和訪問的重要一步。通過將AI的功能與強大的軟件工程原則相結合,我們創建了一個工具,不僅可以生成SQL查詢,而且以安全,教育意義和實用的方式進行現實使用的方式。
該實施的成功表明了AI增強而不是取代傳統數據庫操作的潛力,從而為學習和生產力提供了有價值的工具。
項目回購- 此項目中使用的所有代碼都可以在此處獲得。
A. Pydanticai提供了類型安全的,經過驗證的代碼生成,具有內置錯誤檢查和上下文理解。
問2。Gemini-1.5-Flash如何為該項目做出貢獻?A. Gemini模型提供了先進的自然語言處理,將復雜的人類查詢轉化為精確的SQL語句。
問3。該項目可以擴展到其他AI應用程序嗎?答:絕對!該體系結構可以用於代碼生成,數據轉換和跨各個域的智能自動化。
本文所示的媒體不由Analytics Vidhya擁有,並由作者酌情使用。
以上是使用Pydanticai建立生產級LLM驅動的應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!