Pydantic AI 向量表示 (Embeddings)
在構建現代 AI 應用(特別是 RAG - 檢索增強生成系統)時,將文字或文件轉換成一串數字構成的向量(Embeddings)是不可或缺的步驟。向量化能夠讓電腦計算兩段文字在語意上的相似度,從而在龐大的資料庫中精準搜尋出最相關的文件提供給 Agent 參考。
Pydantic AI 作為一個全方位的框架,不僅負責代理人的執行邏輯,也提供了簡潔的 API 來幫助你產生與處理 Embeddings。
什麼是 Embeddings?
如果你對這個概念還不熟悉,可以把 Embeddings 想像成一段文字的「DNA 序列」或「座標」。
意義相近的詞彙或句子,它們轉換出來的座標點會在多維度的空間中靠得非常近;而毫無關聯的句子,它們的座標點就會相隔很遠。這讓我們可以利用數學方法(如計算餘弦相似度 Cosine Similarity)來進行高效的「語意搜尋」。
產生文字的向量
在 Pydantic AI 中,你可以輕易地呼叫特定的模型來為你的字串生成 Embeddings。這通常涉及使用特定的 Embedding 類別或模型提供者的介面。
import asyncio
# 引入與 Embeddings 相關的模組 (以實際版本為準)
from pydantic_ai.embeddings import EmbeddingsClient
async def main():
# 建立一個 Embedding 客戶端,指定使用 OpenAI 的 text-embedding-3-small 模型
# 這與 Agent 的模型設定方式相似
client = EmbeddingsClient('openai:text-embedding-3-small')
# 準備我們要轉換的文字陣列
texts = [
"Pydantic AI 是一個超好用的 Python 框架。",
"今天台北的天氣非常晴朗,適合出遊。",
"什麼是依賴注入機制?"
]
# 呼叫非同步方法來獲取向量
embeddings_result = await client.embed(texts)
# embeddings_result 通常會包含一個浮點數列表的陣列
for i, text in enumerate(texts):
# 為了排版,這裡只印出該段文字向量的前三個維度的數字
vector = embeddings_result[i][:3]
print(f"文字: '{text}'")
print(f"向量前三碼: {vector}...\n")
asyncio.run(main())
在 RAG (檢索增強生成) 中的應用
雖然 Pydantic AI 本身專注於 Agent 框架,並不包含內建的向量資料庫(如 Pinecone, Qdrant 或是 Chroma),但它提供的 Embeddings 工具可以完美地融入你的 RAG 工作流中。
一個典型的 Pydantic AI RAG 流程設計如下:
- 資料預處理階段:使用 Pydantic AI 的
EmbeddingsClient將你的企業內部文件或是知識庫文章轉換成向量,並儲存到你偏好的向量資料庫中。 - 建立 Agent 與工具:
- 建立一個負責回答問題的 Pydantic AI
Agent。 - 寫一個
@agent.tool工具函數,這個函數的職責是去向量資料庫搜尋資料。
- 建立一個負責回答問題的 Pydantic AI
- 執行階段:
- 使用者問了一個問題:「公司的請假規定是什麼?」
- Agent 決定呼叫上述搜尋工具。
- 工具函數內部再次使用 Pydantic AI 將「公司的請假規定是什麼?」這句話轉成向量,去資料庫比對最相近的文件。
- 工具函數將找出的文件內容回傳給 Agent。
- Agent 根據找到的文件,給予使用者最終解答。
透過這種方式,Pydantic AI 讓你可以在同一個框架下、用一致的語法與設定風格(包含共用 API Key、Retry 機制與 Logfire 監控),同時處理複雜的語言模型邏輯與基礎的向量轉換。