开源数据层
SQLAlchemy 数据层
开源数据层
SQLAlchemy 数据层
此自定义数据层已在 PostgreSQL 上测试过,但由于使用了 SQL Alchemy 数据库,它应该支持更多 SQL 数据库。
此数据层还支持 BaseStorageClient
,它使您能够将元素存储到 Azure Blob Storage 或 AWS S3 中。
以下是用于创建此数据层模式的 SQL。
CREATE TABLE users (
"id" UUID PRIMARY KEY,
"identifier" TEXT NOT NULL UNIQUE,
"metadata" JSONB NOT NULL,
"createdAt" TEXT
);
CREATE TABLE IF NOT EXISTS threads (
"id" UUID PRIMARY KEY,
"createdAt" TEXT,
"name" TEXT,
"userId" UUID,
"userIdentifier" TEXT,
"tags" TEXT[],
"metadata" JSONB,
FOREIGN KEY ("userId") REFERENCES users("id") ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS steps (
"id" UUID PRIMARY KEY,
"name" TEXT NOT NULL,
"type" TEXT NOT NULL,
"threadId" UUID NOT NULL,
"parentId" UUID,
"streaming" BOOLEAN NOT NULL,
"waitForAnswer" BOOLEAN,
"isError" BOOLEAN,
"metadata" JSONB,
"tags" TEXT[],
"input" TEXT,
"output" TEXT,
"createdAt" TEXT,
"command" TEXT,
"start" TEXT,
"end" TEXT,
"generation" JSONB,
"showInput" TEXT,
"language" TEXT,
"indent" INT,
FOREIGN KEY ("threadId") REFERENCES threads("id") ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS elements (
"id" UUID PRIMARY KEY,
"threadId" UUID,
"type" TEXT,
"url" TEXT,
"chainlitKey" TEXT,
"name" TEXT NOT NULL,
"display" TEXT,
"objectKey" TEXT,
"size" TEXT,
"page" INT,
"language" TEXT,
"forId" UUID,
"mime" TEXT,
"props" JSONB,
FOREIGN KEY ("threadId") REFERENCES threads("id") ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS feedbacks (
"id" UUID PRIMARY KEY,
"forId" UUID NOT NULL,
"threadId" UUID NOT NULL,
"value" INT NOT NULL,
"comment" TEXT,
FOREIGN KEY ("threadId") REFERENCES threads("id") ON DELETE CASCADE
);
示例
以下是在 PostgreSQL 数据库上使用 Azure 存储客户端设置此数据层的示例。首先安装所需的依赖项。
pip install asyncpg SQLAlchemy azure-identity azure-storage-file-datalake aiohttp greenlet
导入自定义数据层和存储客户端,并在 Chainlit 应用开头使用 @cl.data_layer
指示要使用哪个数据层。
import chainlit as cl
from chainlit.data.sql_alchemy import SQLAlchemyDataLayer
from chainlit.data.storage_clients.azure import AzureStorageClient
storage_client = AzureStorageClient(account_url="<your_account_url>", container="<your_container>")
@cl.data_layer
def get_data_layer():
return SQLAlchemyDataLayer(conninfo="<your conninfo>", storage_provider=storage_client)
请注意,您需要在 conninfo
字符串中的协议中添加 +asyncpg
,以便它使用 asyncpg 库。
在本页