gemini-chatbot数据持久化方案:Vercel Postgres与Blob存储实战

【免费下载链接】gemini-chatbot Build your own generative UI chatbot using the Vercel AI SDK and Google Gemini 【免费下载链接】gemini-chatbot 项目地址: https://gitcode.com/gh_mirrors/ge/gemini-chatbot

gemini-chatbot是一个基于Vercel AI SDK和Google Gemini构建的生成式UI聊天机器人项目。本文将深入探讨其数据持久化方案,展示如何利用Vercel Postgres进行结构化数据存储和Vercel Blob实现文件上传管理,为开发者提供完整的数据持久化实战指南。

技术架构概览:双引擎驱动的数据持久化

gemini-chatbot采用分层数据存储架构,结合关系型数据库与对象存储的优势,构建了高效可靠的数据持久化系统。项目使用Drizzle ORM作为数据访问层,通过类型安全的方式操作Vercel Postgres数据库,同时集成Vercel Blob服务处理文件上传需求。

gemini-chatbot数据持久化架构/opengraph-image.png) 图1:gemini-chatbot数据持久化架构示意图

核心技术栈包括:

  • Vercel Postgres:存储用户信息、聊天记录和业务数据
  • Vercel Blob:处理图片、PDF等二进制文件存储
  • Drizzle ORM:提供类型安全的数据库交互
  • Zod:实现数据验证与类型定义

数据库设计:Vercel Postgres与Drizzle ORM实践

数据模型设计

项目的数据模型定义在db/schema.ts文件中,主要包含三个核心表结构:

  1. User表:存储用户认证信息

    export const user = pgTable("User", {
      id: uuid("id").primaryKey().notNull().defaultRandom(),
      email: varchar("email", { length: 64 }).notNull(),
      password: varchar("password", { length: 64 }),
    });
    
  2. Chat表:保存聊天会话及消息记录

    export const chat = pgTable("Chat", {
      id: uuid("id").primaryKey().notNull().defaultRandom(),
      createdAt: timestamp("createdAt").notNull(),
      messages: json("messages").notNull(),
      userId: uuid("userId")
        .notNull()
        .references(() => user.id),
    });
    
  3. Reservation表:管理业务相关的预订数据

    export const reservation = pgTable("Reservation", {
      id: uuid("id").primaryKey().notNull().defaultRandom(),
      createdAt: timestamp("createdAt").notNull(),
      details: json("details").notNull(),
      hasCompletedPayment: boolean("hasCompletedPayment").notNull().default(false),
      userId: uuid("userId")
        .notNull()
        .references(() => user.id),
    });
    

数据库迁移与配置

Drizzle配置文件./drizzle.config.ts定义了数据库连接和迁移设置:

import { defineConfig } from "drizzle-kit";

export default defineConfig({
  schema: "./db/schema.ts",
  out: "./lib/drizzle",
  // 其他配置...
});

迁移脚本db/migrate.ts负责数据库结构的创建和更新:

import { drizzle } from "drizzle-orm/postgres-js";
import { migrate } from "drizzle-orm/postgres-js/migrator";
// ...
const db = drizzle(connection);
await migrate(db, { migrationsFolder: "./lib/drizzle" });

文件存储方案:Vercel Blob实现文件上传

上传接口实现

文件上传功能在app/(chat)/api/files/upload/route.ts/api/files/upload/route.ts)中实现,使用Vercel Blob的put方法处理文件存储:

import { put } from "@vercel/blob";
// ...
const data = await put(`${filename}`, fileBuffer, {
  access: "public",
});
return NextResponse.json(data);

文件验证策略

上传接口集成了严格的文件验证机制,确保安全性和合规性:

const FileSchema = z.object({
  file: z
    .instanceof(File)
    .refine((file) => file.size <= 5 * 1024 * 1024, {
      message: "File size should be less than 5MB",
    })
    .refine(
      (file) => ["image/jpeg", "image/png", "application/pdf"].includes(file.type),
      {
        message: "File type should be JPEG, PNG, or PDF",
      },
    ),
});

前端文件上传组件

项目提供了直观的文件上传界面,用户可以轻松上传图片和文档,支持多模态交互体验。

文件上传界面演示 图2:gemini-chatbot文件上传功能演示

数据访问层:类型安全的数据库操作

数据访问逻辑集中在db/queries.ts文件中,使用Drizzle ORM提供类型安全的数据库操作:

import { desc, eq } from "drizzle-orm";
import { drizzle } from "drizzle-orm/postgres-js";
import { user, chat, User, reservation } from "./schema";

let db = drizzle(client);
// ...

该文件包含了各种数据查询和操作函数,如获取用户信息、聊天历史、预订详情等,为应用提供统一的数据访问接口。

实战部署与配置

环境配置

项目使用环境变量管理数据库连接信息,确保敏感配置安全:

# .env.local 示例
POSTGRES_URL=postgres://username:password@host:port/database

部署步骤

  1. 克隆项目仓库:

    git clone https://gitcode.com/gh_mirrors/ge/gemini-chatbot
    
  2. 安装依赖:

    pnpm install
    
  3. 配置环境变量

  4. 执行数据库迁移:

    pnpm run db:migrate
    
  5. 启动开发服务器:

    pnpm dev
    

性能优化与最佳实践

  1. 数据索引:为常用查询字段创建索引,提升查询性能
  2. 连接池管理:优化数据库连接池配置,避免连接泄漏
  3. 文件大小限制:实施合理的文件大小限制,防止存储滥用
  4. 错误处理:完善的错误处理机制,确保系统稳定性
  5. 数据备份:定期备份数据库,防止数据丢失

总结

gemini-chatbot项目展示了如何结合Vercel Postgres和Blob存储构建现代化的数据持久化方案。通过Drizzle ORM实现类型安全的数据访问,利用Vercel生态系统提供的服务,开发者可以快速构建可靠、可扩展的AI聊天应用。无论是结构化数据存储还是文件管理,该方案都提供了清晰的实现路径和最佳实践参考。

通过本文介绍的持久化方案,开发者可以为自己的AI应用构建坚实的数据基础,专注于核心业务逻辑的实现,而无需过多关注底层存储细节。

【免费下载链接】gemini-chatbot Build your own generative UI chatbot using the Vercel AI SDK and Google Gemini 【免费下载链接】gemini-chatbot 项目地址: https://gitcode.com/gh_mirrors/ge/gemini-chatbot

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐