把AI裝進(jìn)數(shù)據(jù)庫(kù):PostgresML和Korvus的新思路
當(dāng)下機(jī)器學(xué)習(xí)應(yīng)用開(kāi)發(fā)就像是接力賽:從數(shù)據(jù)庫(kù)取數(shù)據(jù),傳到應(yīng)用服務(wù)器,再送到 ML 服務(wù),處理完原路返回。每一棒都是延遲。更別提,開(kāi)發(fā)者還需在SQL和應(yīng)用代碼之間不斷“翻譯”,這無(wú)形中增加了認(rèn)知負(fù)荷和工程的復(fù)雜度。
這時(shí)候,生態(tài)無(wú)比繁榮的開(kāi)源數(shù)據(jù)庫(kù) Postgres 再次帶來(lái)了驚喜,PostgresML 團(tuán)隊(duì)直接讓 AI 模型跑在數(shù)據(jù)庫(kù)中。

今天我們就介紹這個(gè)體系的兩個(gè)關(guān)鍵項(xiàng)目:PostgresML和Korvus。這兩個(gè)項(xiàng)目的關(guān)系很清晰,PostgresML作為底層,用 Rust 編寫(xiě),提供 pgml schema 下的各種函數(shù),能夠處理模型加載、GPU 調(diào)度、向量運(yùn)算等任務(wù)。而Korvus基于此對(duì)外提供各種語(yǔ)言( Python、JavaScript、Rust、C等)的SDK封裝。這樣的組合,顯而易見(jiàn)降低了復(fù)雜度。
傳統(tǒng) RAG 架構(gòu):
用戶(hù)請(qǐng)求 → API服務(wù)器 → 向量數(shù)據(jù)庫(kù) → API服務(wù)器 → LLM服務(wù) → API服務(wù)器 → 用戶(hù)PostgresML + Korvus:
用戶(hù)請(qǐng)求 → Postgres(包含所有處理) → 用戶(hù)PostgresML:數(shù)據(jù)庫(kù)即 AI 運(yùn)行時(shí)
PostgresML 是一個(gè) Postgres 擴(kuò)展,讓數(shù)據(jù)庫(kù)具備了完整的機(jī)器學(xué)習(xí)能力。
安裝后,你可以在 SQL 里直接訓(xùn)練模型:
-- 訓(xùn)練分類(lèi)模型
SELECT * FROM pgml.train(
'Handwritten Digit Image Classifier',
algorithm => 'xgboost',
'classification',
'pgml.digits',
'target'
);
-- 預(yù)測(cè)
SELECT pgml.predict(
'My Classification Project',
ARRAY[0.1, 2.0, 5.0]
) AS prediction;更強(qiáng)大的是深度學(xué)習(xí)支持。PostgresML 集成了 Hugging Face 模型庫(kù),可以直接在數(shù)據(jù)庫(kù)內(nèi)運(yùn)行大語(yǔ)言模型:
-- 生成文本
SELECT pgml.transform(
task => 'text-generation',
inputs => ARRAY['Once upon a time'],
args => '{"model": "gpt2"}'
);
-- 文本嵌入
SELECT pgml.embed(
'sentence-transformers/all-MiniLM-L6-v2',
'PostgresML is bringing AI to the database'
);關(guān)鍵特性:
- 47 種機(jī)器學(xué)習(xí)算法
- GPU 加速推理
- 支持 Hugging Face 上的預(yù)訓(xùn)練模型
- 內(nèi)置向量數(shù)據(jù)庫(kù)功能(基于 pgvector)
- 推理速度比 HTTP 服務(wù)快 8-40 倍
這個(gè)性能提升來(lái)自幾個(gè)方面:沒(méi)有網(wǎng)絡(luò)開(kāi)銷(xiāo)、沒(méi)有序列化成本、數(shù)據(jù)和計(jì)算在同一進(jìn)程。
Korvus:讓 RAG 變成一條 SQL
有了 PostgresML 的基礎(chǔ)能力,團(tuán)隊(duì)進(jìn)一步開(kāi)發(fā)了 Korvus。如果說(shuō) PostgresML 是引擎,Korvus 就是為 RAG 場(chǎng)景優(yōu)化的 SDK。
Korvus 的核心理念:"One query to rule them all"。整個(gè) RAG 流程壓縮成一個(gè)數(shù)據(jù)庫(kù)查詢(xún)。

看一個(gè)完整例子:
from korvus import Collection, Pipeline
import asyncio
# 1. 初始化
collection = Collection("korvus-demo-v0")
pipeline = Pipeline(
"v1",
{
"text": {
"splitter": {"model": "recursive_character"},
"semantic_search": {"model": "Alibaba-NLP/gte-base-en-v1.5"},
}
},
)
# 2. 添加pipeline
await collection.add_pipeline(pipeline)
# 3. 插入文檔
documents = [
{"id": "1", "text": "Korvus is incredibly fast and easy to use."},
{"id": "2", "text": "Tomatoes are incredible on burgers."},
]
await collection.upsert_documents(documents)
# 4. RAG查詢(xún) - 這里是關(guān)鍵
results = await collection.rag({
"CONTEXT": {
"vector_search": {
"query": {"fields": {"text": {"query": "Is Korvus fast?"}}},
"limit": 1
},
"aggregate": {"join": "\n"}
},
"chat": {
"model": "meta-llama/Meta-Llama-3-8B-Instruct",
"messages": [
{
"role": "system",
"content": "You are a friendly assistant"
},
{
"role": "user",
"content": "Given the context:\n{CONTEXT}\nAnswer the question: Is Korvus fast?"
}
],
"max_tokens": 100
}
}, pipeline)這一個(gè)??rag()??調(diào)用在數(shù)據(jù)庫(kù)內(nèi)完成了:
- 將查詢(xún)文本向量化
- 在向量索引中搜索相似文檔
- 聚合搜索結(jié)果作為上下文
- 調(diào)用 LLM 生成回答
沒(méi)有外部 API,沒(méi)有多次往返,就是一個(gè)查詢(xún)。
部署和使用
最簡(jiǎn)單的方式是 Docker:
docker run \
-it \
-v postgresml_data:/var/lib/postgresql \
-p 5433:5432 \
-p 8000:8000 \
ghcr.io/postgresml/postgresml:2.10.0 \
sudo -u postgresml psql -d postgresml或者使用 PostgresML Cloud,免費(fèi) tier 就提供 GPU 訪問(wèn)。
對(duì)于 Korvus,安裝后只需設(shè)置數(shù)據(jù)庫(kù)連接:
pip install korvus
export KORVUS_DATABASE_URL="postgresql://..."小結(jié)
PostgresML 提供基礎(chǔ)能力,Korvus 簡(jiǎn)化使用體驗(yàn),兩者結(jié)合讓"在 SQL 里跑 AI"從技術(shù)可能變成了工程現(xiàn)實(shí),大大降低了開(kāi)發(fā)者上手 AI 的門(mén)檻。
“后端即服務(wù)”、“數(shù)據(jù)庫(kù)即服務(wù)”、“表格即服務(wù)”越來(lái)越流行,這背后其實(shí)是一種趨勢(shì),大家越來(lái)越關(guān)注如何用最簡(jiǎn)單的方式解決問(wèn)題,而不是為了技術(shù)而技術(shù)。
github:
??https://github.com/postgresml/postgresml??
??https://github.com/postgresml/korvus??
本文轉(zhuǎn)載自??AI工程化??,作者:ully

















