本站资源收集于互联网,不提供软件存储服务,每天免费更新优质的软件以及学习资源!

使用Nestjs、RAG、Prisma和GeminiAPI构建上下文感知的待办事项列表

网络教程 app 1℃

使用NestjsRAGPrisma和GeminiAPI构建上下文感知的待办事项列表

本教程演示如何利用检索增强生成 (RAG) 技术构建一个具备上下文感知能力的待办事项列表应用。我们将结合Google Gemini API进行文本嵌入,借助pgvector高效管理向量数据,并使用Prisma和NestJS框架操作PostgreSQL数据库。此方案将实现诸如去重任务和基于上下文检索相似任务等高级功能。

前提条件

    熟悉NestJS和Prisma框架。已安装Node.js和npm。PostgreSQL数据库已安装并启用pgvector扩展。拥有可访问Google Cloud的Gemini API密钥。

步骤一:搭建NestJS项目

    创建新的NestJS项目:

nest new todo-appcd todo-app

    删除默认生成的无用文件:

rm src/app.controller.* src/app.service.* src/app.module.ts

步骤二:安装依赖

安装所需依赖包:

npm install prisma @prisma/client @google/generative-ai dotenv pg

步骤三:使用pgvector配置Prisma

    初始化Prisma:

npx prisma init

    使用你的PostgreSQL数据库连接信息更新.env文件:

DATABASE_URL="postgresql://<用户名>:<密码>@localhost:5432/<数据库名>?schema=public"GEMINI_API_KEY="<你的Gemini API密钥>"

    在schema.prisma文件中启用pgvector:

generator client { provider = "prisma-client-js" previewFeatures = ["postgresqlextensions"]}datasource db { provider = "postgresql" url= env("DATABASE_URL") extensions = ["pgvector"]}model Task { id Int@id @default(autoincrement()) title String content String embedding Unsupported("vector(1536)")}

    执行数据库迁移:

npx prisma migrate dev –name init

步骤四:在NestJS中配置Prisma

创建Prisma模块用于数据库访问:

// src/prisma/prisma.module.tsimport { Module } from ‘@nestjs/mon’;import { PrismaService } from ‘./prisma.service’;@Module({ providers: [PrismaService], exports: [PrismaService],})export class PrismaModule {}// src/prisma/prisma.service.tsimport { Injectable, OnModuleInit, OnModuleDestroy } from ‘@nestjs/mon’;import { PrismaClient } from ‘@prisma/client’;@Injectable()export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy { async onModuleInit() { await this.$connect(); } async onModuleDestroy() { await this.$disconnect(); }}

在主模块中导入Prisma模块:

// src/app.module.tsimport { Module } from ‘@nestjs/mon’;import { PrismaModule } from ‘./prisma/prisma.module’;import { TasksModule } from ‘./tasks/tasks.module’;@Module({ imports: [PrismaModule, TasksModule],})export class AppModule {}

步骤五:创建任务模块

    生成任务模块:

nest generate module tasksnest generate service tasksnest generate controller tasks

    实现TasksService:

// src/tasks/tasks.service.tsimport { Injectable } from ‘@nestjs/mon’;import { PrismaService } from ‘../prisma/prisma.service’;import { Task } from ‘@prisma/client’;import { GeminiService } from ‘../gemini/gemini.service’;@Injectable()export class TasksService { constructor(private prisma: PrismaService, private geminiService: GeminiService) {} async createTask(title: string, content: string): Promise<Task> { const embedding = await this.geminiService.getEmbedding(`${title} ${content}`); return this.prisma.task.create({data: { title, content, embedding }, }); } async getTasks(): Promise<Task[]> { return this.prisma.task.findMany(); } async findSimilarTasks(embedding: number[], limit = 5): Promise<any[]> { const embeddingStr = `[${embedding.join(‘,’)}]`; return this.prisma.$queryRaw`SELECT *, embedding <-> ${embeddingStr}::vector AS distanceFROM "Task"ORDER BY distanceLIMIT ${limit}; `; }}

    实现TasksController:

// src/tasks/tasks.controller.tsimport { Controller, Post, Get, Body } from ‘@nestjs/mon’;import { TasksService } from ‘./tasks.service’;@Controller(‘tasks’)export class TasksController { constructor(private tasksService: TasksService) {} @Post() async createTask(@Body(‘title’) title: string, @Body(‘content’) content: string) { return this.tasksService.createTask(title, content); } @Get() async getTasks() { return this.tasksService.getTasks(); }}

步骤六:集成Gemini API生成嵌入向量

    创建GeminiService:

// src/gemini/gemini.service.tsimport { Injectable } from ‘@nestjs/mon’;import { GenerativeLanguageServiceClient } from ‘@google/generative-ai’;@Injectable()export class GeminiService { private client: GenerativeLanguageServiceClient; constructor() { this.client = new GenerativeLanguageServiceClient({apiKey: process.env.GEMINI_API_KEY, }); } async getEmbedding(text: string): Promise<number[]> { const result = await this.client.embedText({model: ‘models/text-embedding-001’,content: text, }); return result.embedding; }}

总结

通过以上步骤,你将拥有一个功能完善的待办事项列表应用,具备以下能力:

    使用Gemini API为任务内容生成嵌入向量。使用pgvector将嵌入向量存储在PostgreSQL数据库中。基于嵌入向量检索相似任务。

此架构支持语义搜索和上下文数据清理等高级功能,可进一步扩展以构建更智能的任务管理系统。

以上就是使用 Nestjs、RAG、Prisma 和 Gemini API 构建上下文感知的待办事项列表的详细内容,更多请关注范的资源库其它相关文章!

转载请注明:范的资源库 » 使用Nestjs、RAG、Prisma和GeminiAPI构建上下文感知的待办事项列表

喜欢 (0)