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
Patricia ArquetteOriginal
2025-01-27 18:11:09382Durchsuche

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>
  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>

Schritt 3: Verwenden Sie PGVector, um Prisma zu konfigurieren

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

  1. Verwenden Sie Ihre PostgreSQL -Datenbank, um .Env -Datei zu aktualisieren:
<code class="language-bash">npx prisma init</code>
  1. in Ihrer Schema.prisma -Datei aktivieren Sie PGVector:
<code>DATABASE_URL="postgresql://<用户名>:<密码>@localhost:5432/<数据库>?schema=public"</code>
  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>
  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>

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>
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>
Aufgabenmodul erzeugen:

  1. Implementierung von TASKService:
<code class="language-bash">nest generate module tasks
nest generate service tasks
nest generate controller tasks</code>
  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>
  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>
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>

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!

Stellungnahme:
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