Eine OpenAI-angetriebene CLI zum Erstellen eines semantischen Suchindex aus Ihren MDX-Dateien. Sie können komplexe Suchvorgänge in Ihren Inhalten durchführen und in Ihre Plattform integrieren.
In diesem Projekt wird OpenAI verwendet, um Vektor -Einbettungen und Tinecone zu generieren, um die Einbettungen zu hosten. Dies bedeutet, dass Sie Konten in OpenAI und Pinecone benötigen, um sie zu verwenden.
Gehen Sie nach dem Erstellen eines Kontos in PineCone zum Dashboard und klicken Sie auf die Schaltfläche Create Index :

Füllen Sie das Formular mit Ihrem neuen Indexnamen (z. B. Ihrem Blog -Namen) aus und setzen Sie die Anzahl der Dimensionen auf 1536:

Tannenzapfen


Openai

Die CLI erfordert vier Env -Tasten:
OPENAI_API_KEY=
PINECONE_API_KEY=
PINECONE_BASE_URL=
PINECONE_NAMESPACE=Stellen Sie sicher, dass Sie sie hinzufügen, bevor Sie es verwenden!
index <dir> - verarbeitet Dateien mit Ihrem Inhalt und laden Sie sie in PineCone hoch.
Beispiel:
$ @beerose/semantic-search index ./posts search <query> - führt eine semantische Suche nach einer bestimmten Abfrage durch.
Beispiel:
$ @beerose/semantic-search search " hello world " Führen Sie für weitere Informationen einen Befehl mit der Flagge --help aus:
$ @beerose/semantic-search index --help
$ @beerose/semantic-search search --help
$ @beerose/semantic-search --help Sie können die aus dieser Bibliothek exportierte semanticQuery -Funktion verwenden und in Ihre Website oder Anwendung integrieren.
DEPs installieren:
$ pnpm add pinecone-client openai @beerose/semantic-search
# or `yarn add` or `npm i`Eine Beispielnutzung:
import { PineconeMetadata , semanticQuery } from "@beerose/semantic-search" ;
import { Configuration , OpenAIApi } from "openai" ;
import { PineconeClient } from "pinecone-client" ;
const openai = new OpenAIApi (
new Configuration ( {
apiKey : process . env . OPENAI_API_KEY ,
} )
) ;
const pinecone = new PineconeClient < PineconeMetadata > ( {
apiKey : process . env . PINECONE_API_KEY ,
baseUrl : process . env . PINECONE_BASE_URL ,
namespace : process . env . PINECONE_NAMESPACE ,
} ) ;
const result = await semanticQuery ( "hello world" , openai , pinecone ) ;Hier ist eine Beispiel -API -Route von areksandra.codes: https://github.com/beerose/aleksandra.codes/blob/main/api/search.ts
Die semantische Suche kann die Bedeutung von Wörtern in Dokumenten und Rückgabergebnissen verstehen, die für die Absicht des Benutzers relevanter sind.
Dieses Tool verwendet OpenAI, um Vektor-Einbettungen mit einem text-embedding-ada-002 Modell zu generieren.
Einbettungen sind numerische Darstellungen von Konzepten, die in Zahlensequenzen konvertiert sind, die es Computern erleichtern, die Beziehungen zwischen diesen Konzepten zu verstehen. https://openai.com/blog/new-and-improved-embedding-model/
Es verwendet auch PineCone - eine gehostete Datenbank für die Vektorsuche. Dadurch können wir K-NN-Suchanfragen über die generierten Einbettungen durchführen.
Der Befehl @beerose/sematic-search index CLI führt die folgenden Schritte für jede Datei in einem bestimmten Verzeichnis aus:
Abhängig von Ihren Inhalten erfordert der gesamte Vorgang eine Reihe von Anrufen, um zu öffnen, und Tinecone, was einige Zeit in Anspruch nehmen kann. Zum Beispiel dauert es ungefähr dreißig Minuten für ein Verzeichnis mit ~ 25 Blog -Posts und durchschnittlich 6 Minuten Lesezeit.
Um die semantische Suche zu testen, können Sie @beerose/sematic-search search CLI-Befehl verwenden, die:

.
├── bin
│ └── cli.js
├── src
│ ├── bin
│ │ └── cli.ts
│ ├── commands
│ │ ├── indexFiles.ts
│ │ └── search.ts
│ ├── getEmbeddings.ts
│ ├── isRateLimitExceeded.ts
│ ├── mdxToPlainText.test.ts
│ ├── mdxToPlainText.ts
│ ├── semanticQuery.ts
│ ├── splitIntoChunks.test.ts
│ ├── splitIntoChunks.ts
│ ├── titleCase.ts
│ └── types.ts
├── tsconfig.build.json
├── tsconfig.json
├── package.json
└── pnpm-lock.yamlbin/cli.js - Der CLI -Einstiegspunkt.src :bin/cli.ts - Dateien, in denen Sie CLI -Befehle und -einstellungen finden können. Dieses Projekt verwendet CAC zum Bau von CLIs.commands/indexFiles.ts - Ein CLI -Befehl, der die Verarbeitung von MD/MDX -Inhalten, das Generieren von Einbettungen und das Hochladen von Vektoren in Pinecone übernimmt.command/search.ts - Ein semantischer Suchbefehl. Es generiert eine Einbettung für eine bestimmte Suchabfrage und ruft dann Pinecone für die Ergebnisse auf.getEmbeddings.ts - Erzeugen von Einbettungslogik. Es behandelt einen Anruf, um KI zu öffnen.isRateLimitExceeded.ts - Fehlerbehandlung Helfer.mdxToPlainText.ts - Konvertiert MDX -Dateien in Rohtext. Verwendet eine Bemerkung und ein benutzerdefiniertes remarkMdxToPlainText -Plugin (auch in dieser Datei definiert).semanticQuery.ts - Kernlogik für die Durchführung semantischer Suchanfragen. Es wird im search verwendet und auch aus dieser Bibliothek exportiert, damit Sie es in Ihre Projekte integrieren können.splitIntoChunks.ts - teilt den Text in Stücke mit maximal 100 Token.titleCase.ts - extrahiert einen Titel aus einem Dateipfad.types.ts - Typen und Dienstprogramme, die in diesem Projekt verwendet werden.tsconfig.json - TypeScript -Compiler -Konfiguration.tsconfig.build.json - Typscript -Compiler -Konfiguration, die für pnpm build verwendet wird.Tests:
src/mdxToPlainText.test.tssrc/splitIntoChunks.test.tsInstallieren Sie DEPs und erstellen Sie das Projekt:
pnpm i
pnpm buildFühren Sie die CLI lokal aus:
node bin/cli.jspnpm test Beiträge, Probleme und Feature -Anfragen sind willkommen.
Fühlen Sie sich frei, Probleme mit der Seite zu überprüfen, wenn Sie einen Beitrag leisten möchten.
Copyright © 2023 Aleksandra Sikora.
Dieses Projekt ist MIT lizenziert.