Heim > Backend-Entwicklung > Python-Tutorial > Erstellen einer kontextbezogenen To-Do-Liste mit Nestjs, RAG, Prisma und Gemini API

Erstellen einer kontextbezogenen To-Do-Liste mit Nestjs, RAG, Prisma und Gemini API

Patricia Arquette
Freigeben: 2025-01-27 18:11:09
Original
343 Leute haben es durchsucht

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

Dieses Tutorial führt Sie zur Verwendung des

-Retrievals der verbesserten Erzeugung. Wir werden Googles Gemini API verwenden, um den Text einzubetten, PgVector zu verwenden, um die Vektorspeicherung mit hoher Effizienz zu speichern und Prisma und nestjs zu verwenden Verwalten Sie die PostgreSQL -Datenbank. Diese Einstellung ermöglicht hohe Funktionen, wie z. B. die Reinigung doppelter Aufgaben und ähnliche Aufgaben im Zusammenhang mit dem Kontext. Voraussetzung für Bedingungen


Verstehen Sie die Grundkenntnisse von nestjs

und

prisma
    .
  1. node.js und npm wurden installiert. PostgreSQL -Datenbank, die von PGVector erweitert wurde.
  2. Google Cloud -Zugriff mit dem Gemini -API -Schlüssel.
  3. Schritt 1: Setzen Sie das NestJS -Projekt
Erstellen Sie ein neues NestJS -Projekt:

  1. unnötige Standarddatei löschen:
<code class="language-bash">nest new todo-app
cd todo-app</code>
Nach dem Login kopieren
  1. Schritt 2: Abhängigkeiten
  2. installieren
Die für die Installation erforderlichen abhängigen Elemente:
<code class="language-bash">rm src/app.controller.* src/app.service.* src/app.module.ts</code>
Nach dem Login kopieren

Schritt 3: Verwenden Sie PGVector, um Prisma zu konfigurieren

<code class="language-bash">npm install prisma @prisma/client @google/generative-ai dotenv</code>
Nach dem Login kopieren
initialisiertes Prisma:

  1. Verwenden Sie Ihre PostgreSQL -Datenbank, um .Env -Datei zu aktualisieren:
<code class="language-bash">npx prisma init</code>
Nach dem Login kopieren
  1. in Ihrer Schema.prisma -Datei aktivieren Sie PGVector:
<code>DATABASE_URL="postgresql://<用户名>:<密码>@localhost:5432/<数据库>?schema=public"</code>
Nach dem Login kopieren
  1. Anwendungsdatenbankmigration:
<code class="language-prisma">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)")
}</code>
Nach dem Login kopieren
  1. Schritt 4: Konfigurieren Sie Prisma
Erstellen Sie ein Prismamodule für den Datenbankzugriff:
<code class="language-bash">npx prisma migrate dev --name init</code>
Nach dem Login kopieren

Einführen von Prismamodule in Ihr Hauptmodul:

<code class="language-typescript">// 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();
  }
}</code>
Nach dem Login kopieren
Schritt 5: Stellen Sie das Aufgabenmodul

ein

<code class="language-typescript">// 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 {}</code>
Nach dem Login kopieren
Aufgabenmodul erzeugen:

  1. Implementierung von TASKService:
<code class="language-bash">nest generate module tasks
nest generate service tasks
nest generate controller tasks</code>
Nach dem Login kopieren
  1. TASKSCONTROLLER implementieren:
<code class="language-typescript">// 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};
    `;
  }
}</code>
Nach dem Login kopieren
  1. Schritt 6: Integrierte Gemini -API zum Einbetten, um
  2. zu generieren
<code class="language-typescript">// 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();
  }
}</code>
Nach dem Login kopieren
Erstellen Sie einen Geminiservice:

  1. Zusammenfassung
  2. In diesen Einstellungen haben Sie eine vollständige Liste der Elemente der Materie, es kann:
<code class="language-typescript">// 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;
  }
}</code>
Nach dem Login kopieren

Verwenden Sie Gemini

, um den eingebetteten Missionsinhalt

zu generieren.

Verwenden Sie PGVector
    in der PostgreSQL -Datenbank in
  1. . nach seiner eingebetteten Mission
  2. .
  3. Diese Architektur unterstützt erweiterte Funktionen wie semantische Such- und Kontextdatenfreigabe. Erweitern Sie es weiter, um ein intelligentes Task -Management -System zu erstellen!
  4. Diese überarbeitete Antwort verbessert die Codebeispiele, indem Sie ISES beheben und genauere Datenbankabfragen verwenden.

Das obige ist der detaillierte Inhalt vonErstellen einer kontextbezogenen To-Do-Liste mit Nestjs, RAG, Prisma und Gemini API. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage