碼??!Pydantic AI智能體框架,輕松打造AI Agent
大型語言模型(LLMs)降低了人工智能的門檻,使其觸手可及。但要開發(fā)成熟的的AI系統(tǒng),我們經(jīng)常要面對類型安全、依賴管理、錯誤處理等一系列挑戰(zhàn)?,F(xiàn)在Pydantic AI能夠解決這些問題,這是一個創(chuàng)新的Python框架,能夠簡化生產(chǎn)級AI智能體的開發(fā)。
得益于Pydantic強大的類型系統(tǒng),這個框架成為了開發(fā)者構(gòu)建既可靠又易于維護的AI應(yīng)用的理想工具。本文為大家分析Pydantic AI框架的價值和功能,以及如何利用其來構(gòu)建可靠的AI應(yīng)用。
1.Pydantic AI簡介
Pydantic AI是專為Python開發(fā)者設(shè)計的框架,架起了開發(fā)者與大型語言模型(LLMs)之間的橋梁,使智能體的創(chuàng)建更加簡單便捷,能夠依據(jù)系統(tǒng)指令、函數(shù)調(diào)用以及結(jié)構(gòu)化輸出來完成既定任務(wù)。
核心功能包括:
- 類型安全:確保所有輸入和輸出的數(shù)據(jù)類型都經(jīng)過嚴格驗證,從而提高代碼的穩(wěn)定性和可靠性。
- 靈活設(shè)計:支持動態(tài)系統(tǒng)提示、可復(fù)用的工具以及模塊化的架構(gòu)設(shè)計,使得智能體的開發(fā)更加靈活和高效。
- 廣泛兼容:能夠與多種LLMs無縫協(xié)作,包括但不限于OpenAI、Anthropic和Gemini。
- 錯誤處理:內(nèi)建了重試機制和結(jié)構(gòu)化的異常管理,有效提升了智能體的魯棒性和錯誤恢復(fù)能力。
2.選擇Pydantic AI的理由
便捷開發(fā):Pydantic AI讓開發(fā)者能夠更加集中精力于業(yè)務(wù)邏輯,將復(fù)雜的底層細節(jié)交給框架來處理。
增強可靠性:框架通過類型驗證確保輸入、輸出和依賴的準確性,有效預(yù)防了運行時錯誤。
生產(chǎn)級支持:內(nèi)置了對異步操作、實時監(jiān)控和調(diào)試的支持,為開發(fā)生產(chǎn)級別的應(yīng)用提供了強大的工具。
3.安裝指南
安裝Pydantic AI非常簡單快捷,只需在命令行中執(zhí)行以下命令:
pip install pydantic-ai
4.智能體定義
在Pydantic AI框架中,智能體是一個集成了多個組件的單元:
- 系統(tǒng)提示:為LLMs提供行為指導(dǎo)的規(guī)則。
- 依賴管理:動態(tài)注入的、類型安全的依賴項。
- 函數(shù)工具:針對特定任務(wù)設(shè)計的可復(fù)用功能。
- 結(jié)構(gòu)化輸出:使用Pydantic模型定義輸出數(shù)據(jù)的格式。
5.示例:創(chuàng)建簡單的智能體
以下是使用Pydantic AI創(chuàng)建一個響應(yīng)用戶查詢的智能體的基本示例:
from pydantic_ai import Agent, RunContext
from pydantic import BaseModel
class QueryResponse(BaseModel):
answer: str
confidence: float
agent = Agent(
"openai:gpt-4",
result_type=QueryResponse,
system_prompt="為用戶提供簡潔的答案。"
)
@agent.tool
asyncdef provide_context(ctx: RunContext[str]) -> str:
returnf"Context: {ctx.deps}"
result = agent.run_sync("印度的首都是哪里?", deps="General Knowledge")
print(result.data)
輸出:
answer='印度的首都是新德里。' confidence=0.9
6.關(guān)鍵特性
6.1 運行智能體
Pydantic AI框架提供了三種執(zhí)行智能體的方法:
- 異步執(zhí)行(agent.run()?):這是一個異步協(xié)程,返回包含完整響應(yīng)的?RunResult對象。
from pydantic_ai import Agent
agent = Agent("openai:gpt-4", system_prompt="成為一個有用的助手。")
result = await agent.run("你好,你好嗎?")
print(result.data) # 輸出響應(yīng)
- 同步執(zhí)行(agent.run_sync()?):這是?agent.run()的同步版本,會阻塞直到獲取響應(yīng)。
result = agent.run_sync("天氣怎么樣?")
print(result.data)
- 流式執(zhí)行(agent.run_stream()?):以流的形式傳輸結(jié)果,允許逐步處理輸出。
async with agent.run_stream("給我講個故事。") as result:
async for text in result.stream_text():
print(text) # 輸出流式文本
6.2 智能體運行與對話管理
智能體的單次運行可以涵蓋整個對話流程,或者作為更長篇互動的一部分。具體應(yīng)用場景如下:
- 單次運行對話:在一個會話中完整捕獲所有交互消息。
- 多次運行對話:在不同的運行實例間保持對話狀態(tài),適用于構(gòu)建復(fù)雜的對話流程。
以下是如何訪問RunResult中的消息示例:
print(result.all_messages()) # 顯示所有消息,包括系統(tǒng)和用戶的提示
print(result.new_messages()) # 顯示新消息,不包括系統(tǒng)的提示
6.3 系統(tǒng)提示
系統(tǒng)提示是指導(dǎo)智能體行為的關(guān)鍵,可以是靜態(tài)的或動態(tài)的:
- 靜態(tài)提示:在智能體初始化時設(shè)定,為智能體提供一貫的行為準則。
agent = Agent("openai:gpt-4", system_prompt="成為一個有用的老師。")
- 動態(tài)提示:在智能體運行時根據(jù)上下文進行調(diào)整,使智能體能夠根據(jù)不同情境靈活響應(yīng)。
@agent.system_prompt
def dynamic_prompt(ctx):
return f"為{ctx.user_role}用戶提供答案。"
6.4 函數(shù)工具的應(yīng)用
函數(shù)工具是擴展智能體功能的重要手段,可以是靜態(tài)的或動態(tài)的:
- 靜態(tài)工具:通過@agent.tool裝飾器注冊,為智能體提供固定的功能。
@agent.tool
def current_date():
return datetime.now().isoformat()
- 動態(tài)工具:根據(jù)每次運行的具體情況定制,通過prepare函數(shù)來決定工具的行為。
@agent.tool(prepare=lambda ctx, tool: tool if ctx.user_query == "specific" else None)
def fetch_data():
return "根據(jù)上下文過濾數(shù)據(jù)"
6.5 智能體的自我修正
智能體具備自我修正的能力,能夠通過處理驗證錯誤和重試失敗的操作來優(yōu)化執(zhí)行過程:
- 驗證重試:當(dāng)數(shù)據(jù)驗證未通過時,智能體會自動嘗試重新執(zhí)行。
from pydantic_ai import ModelRetry
@agent.tool
def validate_data(ctx):
if not ctx.input_data:
raise ModelRetry("數(shù)據(jù)缺失,正在重試...")
- 重試次數(shù)設(shè)置:可以對智能體進行全局或工具級別的重試次數(shù)配置。
agent = Agent("openai:gpt-4", retry_count=3)
7.結(jié)語
Pydantic AI正在重塑開發(fā)者構(gòu)建AI智能體的方式。它專注于提供類型安全、模塊化設(shè)計和用戶友好的體驗,是開發(fā)可靠且即插即用的AI應(yīng)用的必備工具。
