在 Postgres 中直接实现 RAG,无需额外向量数据库,简化架构和运维成本。
一句查询,统御一切
| 文档 | 博客 | Discord |
|---|
Korvus 是一款搜索 SDK,能够通过一条数据库查询统一整个 RAG 流水线。Korvus 构建于 Postgres 之上,并提供 Python、JavaScript 和 Rust bindings,以极低的基础设施维护成本,带来高性能且可定制的搜索能力。
Korvus 是一套为 Postgres 打造的一体化开源 RAG(Retrieval-Augmented Generation,检索增强生成)流水线。它将 LLM、向量记忆、embedding 生成、reranking、摘要生成和自定义模型整合到一条查询中,从而最大限度提升性能并简化搜索架构。
Korvus 为多种编程语言提供 SDK 支持,让你可以将它无缝集成到现有技术栈中:
JavaScript:npm Package
Rust:Crates.io Package
Korvus 充分发挥 Postgres 在 RAG 操作方面的全部能力,因此脱颖而出:
Postgres 原生 RAG:Korvus 利用 Postgres 强大的能力,让你可以直接在数据库内执行复杂的 RAG 操作。这种方式不再需要外部服务和 API 调用,能够大幅降低延迟和复杂度。
Postgres 原生 RAG:Korvus 利用 Postgres 强大的能力,让你可以直接在数据库内执行复杂的 RAG 操作。这种方式不再需要外部服务和 API 调用,能够大幅降低延迟和复杂度。
单查询效率:使用 Korvus,从 embedding 生成到文本生成,整个 RAG 流水线都可以在一条 SQL 查询中完成。这种“一句查询,统御一切”的方式既简化了架构,也提升了性能。
单查询效率:使用 Korvus,从 embedding 生成到文本生成,整个 RAG 流水线都可以在一条 SQL 查询中完成。这种“一句查询,统御一切”的方式既简化了架构,也提升了性能。
可扩展性与性能:由于构建在 Postgres 之上,Korvus 继承了它出色的可扩展性和性能特征。随着数据增长,Korvus 也能同步扩展,即使面对大型数据集,也能保持高性能。
可扩展性与性能:由于构建在 Postgres 之上,Korvus 继承了它出色的可扩展性和性能特征。随着数据增长,Korvus 也能同步扩展,即使面对大型数据集,也能保持高性能。
简化架构:用一条强大的查询取代复杂的面向服务架构。
高性能:消除 API 调用和数据搬运,实现更快的处理速度与更高的可靠性。
开源:通过开源软件和同样能够在本地 Docker 中运行的模型,改善开发者体验。
多语言支持:可以通过 Python、JavaScript 和 Rust 使用 Korvus。你也可以提交 issue,为支持其他语言投票。
统一流水线:在一条查询中组合 embedding 生成、向量搜索、reranking 和文本生成。
Postgres 驱动:在底层,Korvus 的各项操作由这个久经考验的数据库平台上的高效 SQL 查询提供支持。
Korvus 使用 PostgresML 的 pgml extension 和 pgvector extension,将整个 RAG 流水线压缩到 Postgres 内部。
要使用 Korvus,你需要一个安装了 pgml 和 pgvector 的 Postgres 数据库。你有两种选择:
自行托管:搭建自己的数据库,并安装 pgml 和 pgvector。具体操作请参阅我们的自行托管指南。
自行托管:搭建自己的数据库,并安装 pgml 和 pgvector。
具体操作请参阅我们的自行托管指南。
托管服务:使用我们预装了 pgml 和 pgvector 的托管 Postgres 服务。注册 PostgresML Cloud。
托管服务:使用我们预装了 pgml 和 pgvector 的托管 Postgres 服务。
注册 PostgresML Cloud。
pip install korvus
设置 KORVUS_DATABASE_URL 环境变量:
export KORVUS_DATABASE_URL="{YOUR DATABASE CONNECTION STRING}"
初始化 Collection 和 Pipeline:
from korvus import Collection, Pipeline
import asyncio
collection = Collection("korvus-demo-v0")
pipeline = Pipeline(
"v1",
{
"text": {
"splitter": {"model": "recursive_character"},
"semantic_search": {"model": "Alibaba-NLP/gte-base-en-v1.5"},
}
},
)
async def add_pipeline():
await collection.add_pipeline(pipeline)
asyncio.run(add_pipeline())
async def upsert_documents():
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)
asyncio.run(upsert_documents())
async def rag():
query = "Is Korvus fast?"
print(f"Querying for response to: {query}")
results = await collection.rag(
{
"CONTEXT": {
"vector_search": {
"query": {
"fields": {"text": {"query": query}},
},
"document": {"keys": ["id"]},
"limit": 1,
},
"aggregate": {"join": "\n"},
},
"chat": {
"model": "meta-llama/Meta-Llama-3-8B-Instruct",
"messages": [
{
"role": "system",
"content": "You are a friendly and helpful chatbot",
},
{
"role": "user",
"content": f"Given the context\n:{{CONTEXT}}\nAnswer the question: {query}",
},
],
"max_tokens": 100,
},
},
pipeline,
)
print(results)
asyncio.run(rag())
尽管 Korvus 为多种编程语言提供了高层接口,但其核心操作建立在经过优化的 SQL 查询之上。这种方式具有多项优势:
透明性:高级用户可以检查并理解底层查询。
可定制性:通过修改或扩充 SQL 操作,拓展 Korvus 的能力。
性能:受益于 PostgreSQL 先进的查询优化能力。
即使你不是 SQL 专家也不用担心——Korvus 直观的 API 屏蔽了其中的复杂性,同时仍能让你充分发挥基于 SQL 操作的全部能力。
如需查看完整文档,包括 API 参考、教程和最佳实践,请访问我们的官方文档。
加入我们的社区,获取帮助、分享想法并参与贡献:
我们欢迎大家为 Korvus 贡献代码!提交 pull request 前,请先阅读我们的贡献指南。
Korvus 由 PostgresML 维护。如需企业支持和咨询服务,请联系我们。