Un CLI propulsé OpenAI pour créer un index de recherche sémantique à partir de vos fichiers MDX. Il vous permet d'effectuer des recherches complexes sur votre contenu et de l'intégrer avec votre plateforme.
Ce projet utilise OpenAI pour générer des incorporations vectorielles et des pinone pour héberger les intégres, ce qui signifie que vous devez avoir des comptes en Openai et PineCone pour l'utiliser.
Après avoir créé un compte dans Pinecone, accédez au tableau de bord et cliquez sur le bouton Create Index :

Remplissez le formulaire avec votre nouveau nom d'index (par exemple, le nom de votre blog) et définissez le nombre de dimensions sur 1536:

Pignon


Openai

La CLI a besoin de quatre clés Env:
OPENAI_API_KEY=
PINECONE_API_KEY=
PINECONE_BASE_URL=
PINECONE_NAMESPACE=Assurez-vous de les ajouter avant de l'utiliser!
index <dir> - traite les fichiers avec votre contenu et les téléchargez-les sur pinecone.
Exemple:
$ @beerose/semantic-search index ./posts search <query> - effectue une recherche sémantique par une requête donnée.
Exemple:
$ @beerose/semantic-search search " hello world " Pour plus d'informations, exécutez n'importe quelle commande avec l'indicateur --help :
$ @beerose/semantic-search index --help
$ @beerose/semantic-search search --help
$ @beerose/semantic-search --help Vous pouvez utiliser la fonction semanticQuery exportée à partir de cette bibliothèque et l'intégrer avec votre site Web ou votre application.
Installer Deps:
$ pnpm add pinecone-client openai @beerose/semantic-search
# or `yarn add` or `npm i`Un exemple d'utilisation:
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 ) ;Voici un exemple d'itinéraire API depuis Aleksandra.codes: https://github.com/beerose/aleksandra.codes/blob/main/api/search.ts
La recherche sémantique peut comprendre la signification des mots dans des documents et des résultats de retour plus pertinents pour l'intention de l'utilisateur.
Cet outil utilise OpenAI pour générer des intégres vectoriels avec un modèle text-embedding-ada-002 .
Les intégres sont des représentations numériques des concepts convertis en séquences numériques, ce qui facilite la compréhension des relations entre ces concepts. https://openai.com/blog/new-and-improved-embedding-model/
Il utilise également PineCone - une base de données hébergée pour la recherche vectorielle. Il nous permet d'effectuer des recherches K-NN à travers les intérêts générés.
La commande @beerose/sematic-search index CLI effectue les étapes suivantes pour chaque fichier dans un répertoire donné:
Selon votre contenu, l'ensemble du processus nécessite un tas d'appels à Openai et à Pinecone, ce qui peut prendre un certain temps. Par exemple, il faut environ trente minutes pour un répertoire avec environ 25 articles de blog et une moyenne de 6 minutes de temps de lecture.
Pour tester la recherche sémantique, vous pouvez utiliser la commande @beerose/sematic-search search CLI, qui:

.
├── 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 - le point d'entrée CLI.src :bin/cli.ts - fichiers où vous pouvez trouver des commandes et des paramètres CLI. Ce projet utilise du CAC pour construire des CLI.commands/indexFiles.ts - Une commande CLI qui gère le traitement du contenu MD / MDX, générant des intégres et téléchargeant des vecteurs sur pinecone.command/search.ts - une commande de recherche sémantique. Il génère une intégration pour une requête de recherche donnée, puis appelle PineCone pour les résultats.getEmbeddings.ts - Génération de logique d'intégration. Il gère un appel pour ouvrir l'IA.isRateLimitExceeded.ts - Helping Handling Error.mdxToPlainText.ts - convertit les fichiers mdx en texte brut. Utilise Remark et un plugin remarkMdxToPlainText personnalisé (également défini dans ce fichier).semanticQuery.ts - Core Logic pour effectuer des recherches sémantiques. Il est utilisé dans la commande search , et il est également exporté de cette bibliothèque afin que vous puissiez l'intégrer à vos projets.splitIntoChunks.ts - divise le texte en morceaux avec un maximum de 100 jetons.titleCase.ts - extrait un titre d'un chemin de fichier.types.ts - Types et utilitaires utilisés dans ce projet.tsconfig.json - Configuration du compilateur TypeScript.tsconfig.build.json - Configuration du compilateur TypeScript utilisé pour pnpm build .Tests:
src/mdxToPlainText.test.tssrc/splitIntoChunks.test.tsInstallez les DEP et construisez le projet:
pnpm i
pnpm buildExécutez la CLI localement:
node bin/cli.jspnpm test Les contributions, les problèmes et les demandes de fonctionnalités sont les bienvenus.
N'hésitez pas à vérifier la page des problèmes si vous souhaitez contribuer.
Copyright © 2023 Aleksandra Sikora.
Ce projet est sous licence MIT.