Una CLI con alimentación de OpenAI para construir un índice de búsqueda semántica a partir de sus archivos MDX. Le permite realizar búsquedas complejas en su contenido e integrarlo con su plataforma.
Este proyecto utiliza OpenAI para generar embedidas vectoriales y Pinecone para alojar los incrustaciones, lo que significa que debe tener cuentas en OpenAI y Pinecone para usarlo.
Después de crear una cuenta en Pinecone, vaya al tablero y haga clic en el botón Create Index :

Complete el formulario con su nuevo nombre de índice (por ejemplo, el nombre de su blog) y establezca el número de dimensiones en 1536:

Piña


Opadai

El CLI requiere cuatro claves env:
OPENAI_API_KEY=
PINECONE_API_KEY=
PINECONE_BASE_URL=
PINECONE_NAMESPACE=¡Asegúrese de agregarlos antes de usarlo!
index <dir> : procesa archivos con su contenido y cárguelos a Pinecone.
Ejemplo:
$ @beerose/semantic-search index ./posts search <query> - Realiza una búsqueda semántica por una consulta dada.
Ejemplo:
$ @beerose/semantic-search search " hello world " Para obtener más información, ejecute cualquier comando con el indicador --help :
$ @beerose/semantic-search index --help
$ @beerose/semantic-search search --help
$ @beerose/semantic-search --help Puede usar la función semanticQuery exportada desde esta biblioteca e integrarla con su sitio web o aplicación.
Instalar DEPS:
$ pnpm add pinecone-client openai @beerose/semantic-search
# or `yarn add` or `npm i`Un uso de ejemplo:
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 ) ;Aquí hay una ruta API de ejemplo desde Aleksandra.Codes: https://github.com/beerose/aleksandra.codes/blob/main/api/search.ts
La búsqueda semántica puede comprender el significado de las palabras en documentos y devolver los resultados que son más relevantes para la intención del usuario.
Esta herramienta utiliza OpenAI para generar integridades vectoriales con un modelo text-embedding-ada-002 .
Los incrustaciones son representaciones numéricas de conceptos convertidos en secuencias numéricas, lo que facilita que las computadoras comprendan las relaciones entre esos conceptos. https://openai.com/blog/new-and-improved-embedding-model/
También usa Pinecone, una base de datos alojada para la búsqueda vectorial. Nos permite realizar las búsquedas de K-NN en los incrustaciones generadas.
El comando @beerose/sematic-search index CLI realiza los siguientes pasos para cada archivo en un directorio determinado:
Dependiendo de su contenido, todo el proceso requiere un montón de llamadas a OpenAi y Pinecone, lo que puede llevar algún tiempo. Por ejemplo, tarda alrededor de treinta minutos en un directorio con ~ 25 publicaciones de blog y un promedio de 6 minutos de tiempo de lectura.
Para probar la búsqueda semántica, puede usar el comando @beerose/sematic-search search CLI, que:

.
├── 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 - el punto de entrada de la CLI.src :bin/cli.ts : archivos donde puede encontrar comandos y configuraciones de CLI. Este proyecto utiliza CAC para construir clis.commands/indexFiles.ts : un comando CLI que maneja el procesamiento de contenido MD/MDX, generando incrustaciones y cargando vectores a Pinecone.command/search.ts - Un comando de búsqueda semántica. Genera una incrustación para una consulta de búsqueda dada y luego llama a Pinecone para los resultados.getEmbeddings.ts - Generación de la lógica de incrustaciones. Maneja una llamada para abrir la IA.isRateLimitExceeded.ts - Helper de manejo de errores.mdxToPlainText.ts - Convierte los archivos MDX en texto sin procesar. Utiliza Observar y un complemento personalizado remarkMdxToPlainText (también definido en ese archivo).semanticQuery.ts - Lógica central para realizar búsquedas semánticas. Se está utilizando en el comando search , y también se exporta desde esta biblioteca para que pueda integrarlo con sus proyectos.splitIntoChunks.ts : divide el texto en trozos con un máximo de 100 tokens.titleCase.ts : extrae un título de una ruta de archivo.types.ts : tipos y utilidades utilizados en este proyecto.tsconfig.json - Configuración del compilador TypeScript.tsconfig.build.json - Configuración del compilador TypeScript utilizado para pnpm build .Pruebas:
src/mdxToPlainText.test.tssrc/splitIntoChunks.test.tsInstale DEPS y cree el proyecto:
pnpm i
pnpm buildEjecute la CLI localmente:
node bin/cli.jspnpm test Las contribuciones, los problemas y las solicitudes de funciones son bienvenidas.
No dude en verificar la página de problemas si desea contribuir.
Copyright © 2023 Aleksandra Sikora.
Este proyecto tiene licencia MIT.