首頁 >科技週邊 >人工智慧 >使用Pydanticai建立生產級LLM驅動的應用

使用Pydanticai建立生產級LLM驅動的應用

Jennifer Aniston
Jennifer Aniston原創
2025-03-14 09:21:10214瀏覽

在軟件開發的快速發展的景觀中,人工智能,數據驗證和數據庫管理的交集開闢了前所未有的可能性。這篇博客文章探討了使用最新的Pydanticai Framework和Google的Gemini-1.5模型來探討SQL代碼生成和SQL代碼說明的創新方法,以展示尖端AI技術如何簡化和增強數據庫查詢開發。

對於開發人員,數據科學家和數據分析師,此探索從自然語言處理中瞥見了智能代碼生成的未來,在這種情況下,可以輕鬆而準確地創建複雜的數據庫查詢。

學習目標

  • 了解Pydantic和Pydanticai的基本面。
  • 了解如何實現AI驅動的SQL代碼生成系統。
  • 在自然語言中探索雙子座-1.5頻率的功能,以進行SQL翻譯。
  • 洞悉用於構建數據庫交互的智能AI代理。

本文作為數據科學博客馬拉鬆的一部分發表

目錄

  • 什麼是pydanticai?
  • Pydanticai的示例
  • 什麼是AI代理?
  • 什麼是代理工作流程?
  • AI代理和代理工作流的現代用法
  • 什麼是Pydanticai框架?
  • 開始您的項目
  • 實施項目的逐步指南
  • 結論
  • 常見問題

什麼是pydanticai?

Pydanticai是一個強大的Python庫,可革新數據驗證和類型檢查。它為定義數據模型提供了一種聲明性的方法,從而易於創建和驗證複雜的數據結構。

Pydantic的重要特徵包括:

定制

  • 驗證廣泛的數據類型,包括原始類型和復雜的嵌套結構。
  • 幾乎支持任何python對象進行驗證和序列化

靈活性

允許控制數據驗證嚴格性:

  • 將數據脅到預期類型
  • 在需要時執行嚴格的類型檢查

序列化

  • 支持Pydantic對象,字典和JSON之間的無縫轉換。
  • 啟用自我文獻的API和與使用JSON模式的工具的兼容性。

表現

  • 核心驗證邏輯以生鏽為特殊的速度和效率編寫。
  • 適用於可擴展REST API等高通量應用的理想選擇。

生態系統

  • 廣泛用於流行的Python庫中,例如Fastapi,Langchain,LlamainDex等。
  • 如果沒有pydantic,就無法實施現代的代理LLM。

Pydanticai的示例

Pydanticai簡化了Python中的數據驗證和類型檢查,使其成為創建強大數據模型的強大工具。讓我們探索一些展示其功能的實用示例。

基本數據驗證

來自Pydantic Import Basemodel


類用戶(基本模型):
    名稱:str
    年齡:int


#有效數據
用戶=用戶(name =“ Alice”,年齡= 30)
打印(用戶)

打印(“ ==================================
#無效數據(年齡是字符串)
嘗試:
    用戶=用戶(name =“ Alice”,age =“三十”)
除例外為E:
    打印(E)

上面的代碼使用Pydantic的基本模型定義了用戶模型,將名稱作為字符串和年齡作為整數執行。它驗證了正確的數據,但是當提供了無效的數據(年齡的字符串)時,會引起驗證錯誤。

輸出:

使用Pydanticai建立生產級LLM驅動的應用

自動型強制

來自Pydantic Import Basemodel
類產品(基本模型):
    價格:浮動
    數量:int

#不匹配類型的數據
產品=產品(價格=“ 19.99”,數量=“ 5”)
印刷(產品)

打印(類型(product.price))
打印(類型(product.Quantity))

在這裡,價格為浮動和數量的產品模型作為整數。 Pydantic自動將字符串輸入(“ 19.99”和“ 5”)驅動到正確的類型(float and int)中,以演示其類型的轉換功能。

輸出:

使用Pydanticai建立生產級LLM驅動的應用

嵌套模型

來自Pydantic Import Basemodel
班級地址(基本模型):
    街:Str
    城市:Str
類用戶(基本模型):
    名稱:str
    地址:地址

#有效數據
user =用戶(name =“ bob”,地址= {“街”:“ 123 Main St”,“ City”:“ Wonderland”})
打印(用戶)

#訪問嵌套屬性
打印(user.address.city)

在這裡,我們定義一個包含地址模型的嵌套用戶模型。 Pydantic允許嵌套驗證,並自動轉換字典成模型。有效的數據初始化了用戶對象,您可以直接訪問諸如“ user.address.city”之類的嵌套屬性。

輸出:

使用Pydanticai建立生產級LLM驅動的應用

使用自定義規則驗證

來自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的驗證功能。

輸出:

使用Pydanticai建立生產級LLM驅動的應用

這些是Pydantic的一些核心例子,我希望它們能幫助您了解數據驗證的基本原理。

什麼是AI代理?

AI代理是智能係統,旨在自主執行任務,做出決策並與其環境互動以實現特定目標。這些代理並不是新的,而是生成AI的近期快速發展,並將其與代理相結合,使代理軟件在新時代開發。現在,代理可以處理輸入,執行操作並動態適應。他們的行為模仿了類似人類的問題解決,使他們能夠在人類干預的情況下在各個領域發揮作用。

什麼是代理工作流程?

代理工作流程是指由一個或多個AI代理管理和執行的結構,目標驅動的任務序列。統一僵化的傳統工作流程,代理工作流具有適應性,自主性和上下文意識。這些工作流程中的AI代理可以獨立做出決策,委派子任務並從反饋中學習,從而導致有效且優化的結果。

AI代理和代理工作流的現代用法

AI代理和代理工作流程的整合通過使復雜的任務自動化,增強決策和推動效率來徹底改變行業。這些智能係統動態適應,從而使跨不同領域的更智能解決方案。

業務自動化

AI代理通過聊天機器人,電子郵件管理和銷售管道優化的重複任務自動化重複任務。它們通過從高價值任務中釋放人力資源來提高生產率。

軟件開發

通過生成,測試和調試代碼,通過AI驅動的代理加速軟件生命週期,從而減少了開發時間和人為錯誤。

衛生保健

AI代理協助醫療診斷,患者監測和治療個性化,改善醫療保健提供和操作效率。

金融

金融系統中的代理工作流程自動化欺詐檢測,風險評估和投資分析,實現更快,更可靠的決策。

電子商務

情報機構可以增強購物體驗中的個性化,優化產品建議和客戶服務。

AI代理和代理工作流的興起意味著向能夠管理複雜過程的高度自主系統的轉變。它們的適應性和學習能力使它們對於現代行業來說是必不可少的,推動了跨領域的創新,可擴展性和效率。隨著AI的不斷發展,AI代理將進一步集成到我們的日常工作流程中,從而改變瞭如何管理和執行任務。

什麼是Pydanticai框架?

Pydanticai是由Pydantic,Fastapi的創建者開發的Python代理框架,用於簡化利用生成AI的生產級應用的構建,它強調了類型的安全性,模型 - 敏銳的設計以及與大語言模型(LLMS)的無縫集成。

pydanticai的關鍵功能包括:

  • 模型 - 不合Snostic的支持: Pydanticai與各種模型兼容,包括OpenAI,Antropic,Gemini,Groq,Mistral和Ollama,並具有直接的界面,以結合其他模型。
  • 類型安全:利用Python的類型系統和Pydantic的驗證,Pydanticai確保了穩健而可擴展的代理開發。
  • 依賴注入系統:它引入了一種新穎的TY-SAFE依賴注入機制,增強了測試和評估驅動的發展。
  • 結構化響應驗證:利用Pydantic的驗證功能,確保准確可靠的結構響應。
  • LogFire集成:提供與Pydantic LogFire的集成,以增強對LLM功率應用程序的調試和監視。

這是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建立生產級LLM驅動的應用

現在是時候做一些真實的事情了。我們將使用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和Load Database

要安裝Postgres,PSQL-Command-Tools和Pgadmin-4,只需轉到EDBDONDON for Systaller的系統,然後一次安裝所有工具即可。

現在,從Hereand下載DVDRENALE數據庫,將其加載到Postgres,請按照以下步驟

步驟1:打開終端

PSQL -U Postgres

#它會要求密碼放置

步驟2:創建數據庫

#在Postgres =#中

創建數據庫DVDRENTAL;

步驟3:終端的命令

現在,退出PSQL命令,然後輸入終端

pg_restore -u postgres -d dvdrenaltal d:/sampledb/postgres/dvdrental.tar

步驟4:連接到PSQL

現在,連接到PSQL並檢查數據庫是否已加載。

 PSQL -U Postgres

#與dvDretal
\ c dvDretal

#讓我們看看桌子

\ dt

輸出:

使用Pydanticai建立生產級LLM驅動的應用

如果您看到上表,則可以。我們都準備啟動我們的主要項目。

現在,將必要的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
|  - 。吉蒂尼爾

實施項目的逐步指南

通過此全面的實施指南,深入研究詳細的步驟和實用技術,以將您的項目從概念帶到現實。

Pydantic模型

我們將首先在模型中創建數據模型。

從數據級導入數據級
從輸入導入註釋
導入異步
從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

在上述代碼中,

  • DEPS類管理數據庫連接依賴性。 @dataclass會自動生成__init__和__repr__等特殊方法。 conn鍵入為`asyncpg.connection` ,代表一個活動的後Ql連接。該設計遵循依賴注入模式,使代碼更具測試和可維護。
  • 成功類代表成功的SQL Query Generation, SQL_Query必須是一個非空字符串( MinLen (1)),並使用註釋來添加驗證約束。說明是一個可選字段,帶有默認的空字符串。
  • InvalidRequest類是錯誤響應模型,代表了失敗的SQL Query Generation嘗試。

該代碼為數據庫連接管理,輸入驗證,結構化響應處理和錯誤處理建立了基礎。

服務模塊

現在,我們將在服務模塊中為SQL生成實施Pydanticai服務。

導入庫和配置

導入操作系統
從輸入進口聯盟
來自dotenv import load_dotenv
導入異步
從typing_extensions導入typealias
來自pydantic_ai進口代理,模型,runco​​ntext
來自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,
)
  • 首先定義可以取得成功或無效的響應類型
  • 用API鍵初始化Gemini 1.5 Flash模型
  • 創建具有指定響應和依賴類型的Pydanticai代理

系統提示定義

現在,我們將定義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:runco​​ntext [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查詢

關鍵驗證步驟:

  • 如果結果是無效的,請立即返回,請清理額外的後斜線
  • 確保查詢是選擇語句
  • 使用PostgreSQL解釋驗證SQL語法
  • 提高無效查詢模型

資料庫結構定義

要獲取數據庫架構,請打開您在Postgres設置期間安裝的PGADMIN4,轉到`` dvDrenaltal`數據庫'',右鍵單擊它,然後單擊數據庫`。
您將獲得以下ERD圖,現在從ERD生成SQL(請參閱圖像上的圓形黑色標記)。

將架構複製到schema.py模塊:

使用Pydanticai建立生產級LLM驅動的應用

 #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“獲取每個客戶的租金總數”

輸出:

使用Pydanticai建立生產級LLM驅動的應用

測試PGADMIN4中的SQL查詢後:

使用Pydanticai建立生產級LLM驅動的應用

哇!它像我們想要的一樣工作。測試更多這樣的查詢並享受學習。

結論

該項目代表了使數據庫交互更加直觀和訪問的重要一步。通過將AI的功能與強大的軟件工程原則相結合,我們創建了一個工具,不僅可以生成SQL查詢,而且以安全,教育意義和實用的方式進行現實使用的方式。

該實施的成功表明了AI增強而不是取代傳統數據庫操作的潛力,從而為學習和生產力提供了有價值的工具。

項目回購- 此項目中使用的所有代碼都可以在此處獲得。

關鍵要點

  • Pydanticai啟用智能,上下文感知的代碼生成。
  • Gemini-1.5-Flash為技術任務提供了高級的自然語言理解。
  • AI代理可以改變我們與數據庫交互的方式並生成代碼。
  • 強大的驗證在AI生成的代碼系統中至關重要。

常見問題

Q 1。pydanticai在SQL Generation中的優勢是什麼?

A. Pydanticai提供了類型安全的,經過驗證的代碼生成,具有內置錯誤檢查和上下文理解。

2。Gemini-1.5-Flash如何為該項目做出貢獻?

A. Gemini模型提供了先進的自然語言處理,將復雜的人類查詢轉化為精確的SQL語句。

3。該項目可以擴展到其他AI應用程序嗎?

答:絕對!該體系結構可以用於代碼生成,數據轉換和跨各個域的智能自動化。

本文所示的媒體不由Analytics Vidhya擁有,並由作者酌情使用。

以上是使用Pydanticai建立生產級LLM驅動的應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn