Rumah > pembangunan bahagian belakang > Tutorial Python > Membina senarai tugas yang menyedari konteks dengan Nestjs, Rag, Prisma, dan Gemini API

Membina senarai tugas yang menyedari konteks dengan Nestjs, Rag, Prisma, dan Gemini API

Patricia Arquette
Lepaskan: 2025-01-27 18:11:09
asal
400 orang telah melayarinya

Building a Context-Aware To-Do List with Nestjs, RAG, Prisma, and Gemini API

Tutorial ini akan membimbing anda untuk menggunakan pengambilan semula generasi yang dipertingkatkan. Kami akan menggunakan Gemini API Google

untuk membenamkan teks, gunakan pgvector untuk menyimpan penyimpanan vektor kecekapan tinggi, dan gunakan prisma dan nestjs Urus pangkalan data PostgreSQL. Tetapan ini akan membolehkan fungsi peringkat tinggi, seperti pembersihan tugas pendua dan tugas yang sama yang berkaitan dengan konteks. keadaan prasyarat

memahami pengetahuan asas nestjs
dan

prisma

.
  1. node.js dan npm telah dipasang. pangkalan data PostgreSQL yang telah dilanjutkan oleh PGVector. Access Cloud Google dengan kekunci API Gemini.
  2. Langkah 1: Tetapkan Projek Nestjs
  3. Buat projek NESTJS baru:

    Padam fail lalai yang tidak perlu:
nest new todo-app
cd todo-app
Salin selepas log masuk
    Langkah 2: Pasang Ketergantungan
  1. item bergantung yang diperlukan untuk pemasangan:
rm src/app.controller.* src/app.service.* src/app.module.ts
Salin selepas log masuk

Langkah 3: Gunakan PGVector untuk mengkonfigurasi Prisma

Prisma Inisialisasi:
npm install prisma @prisma/client @google/generative-ai dotenv
Salin selepas log masuk

    Gunakan pangkalan data PostgreSQL anda untuk mengemas kini.
npx prisma init
Salin selepas log masuk
Dalam fail skema.prisma anda, aktifkan PGVector:
<code>DATABASE_URL="postgresql://<用户名>:<密码>@localhost:5432/<数据库>?schema=public"</code>
Salin selepas log masuk
Migrasi pangkalan data aplikasi:
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)")
}
Salin selepas log masuk
Langkah 4: Konfigurasikan Prisma
  1. Buat Prismamodule untuk Akses Pangkalan Data:
npx prisma migrate dev --name init
Salin selepas log masuk
Memperkenalkan Prismamodule dalam modul utama anda:

Langkah 5: Tetapkan Modul Tugas

// src/prisma/prisma.module.ts
import { Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';

@Module({
  providers: [PrismaService],
  exports: [PrismaService],
})
export class PrismaModule {}

// src/prisma/prisma.service.ts
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';

@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
  async onModuleInit() {
    await this.$connect();
  }

  async onModuleDestroy() {
    await this.$disconnect();
  }
}
Salin selepas log masuk

menghasilkan modul tugas:

// src/app.module.ts
import { Module } from '@nestjs/common';
import { PrismaModule } from './prisma/prisma.module';
import { TasksModule } from './tasks/tasks.module';

@Module({
  imports: [PrismaModule, TasksModule],
})
export class AppModule {}
Salin selepas log masuk

Melaksanakan Taskservice:
nest generate module tasks
nest generate service tasks
nest generate controller tasks
Salin selepas log masuk
Melaksanakan TasksController:
// src/tasks/tasks.service.ts
import { Injectable } from '@nestjs/common';
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<Task[]> {
    const embeddingStr = `[${embedding.join(',')}]`;
    return this.prisma.$queryRaw`
      SELECT *, embedding <-> ${embeddingStr}::vector AS distance
      FROM "Task"
      ORDER BY distance
      LIMIT ${limit};
    `;
  }
}
Salin selepas log masuk
Langkah 6: API Gemini Bersepadu untuk membenamkan untuk menghasilkan
  1. Buat Geminiservice:
// src/tasks/tasks.controller.ts
import { Controller, Post, Get, Body } from '@nestjs/common';
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();
  }
}
Salin selepas log masuk

Ringkasan <总>
    melalui tetapan ini, anda akan mempunyai senarai lengkap perkara -perkara perkara, boleh:
Gunakan Gemini
// src/gemini/gemini.service.ts
import { Injectable } from '@nestjs/common';
import * as genai from '@google/generative-ai';

@Injectable()
export class GeminiService {
  private client: genai.GenerativeLanguageServiceClient;

  constructor() {
    this.client = new genai.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;
  }
}
Salin selepas log masuk
untuk menghasilkan kandungan misi yang tertanam
.

Gunakan pgvector

sampel ke dalam

dalam pangkalan data PostgreSQL.
  1. Menurut misi tertanamnya .
  2. Senibina ini menyokong fungsi lanjutan, seperti carian semantik dan pelepasan data konteks. Selanjutnya mengembangkannya untuk membina sistem pengurusan tugas pintar! Respons yang disemak ini meningkatkan contoh kod dengan menetapkan jenis ISE dan menggunakan pertanyaan pangkalan data yang lebih tepat.

Atas ialah kandungan terperinci Membina senarai tugas yang menyedari konteks dengan Nestjs, Rag, Prisma, dan Gemini API. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan