Uma CLI movida a OpenAI para criar um índice de pesquisa semântica a partir de seus arquivos MDX. Ele permite que você execute pesquisas complexas em seu conteúdo e o integrá -lo à sua plataforma.
Este projeto usa o OpenAI para gerar incorporações de vetores e Pinecone para hospedar as incorporações, o que significa que você precisa ter contas no OpenAI e Pinecone para usá -lo.
Depois de criar uma conta no Pinecone, vá para o painel e clique no botão Create Index :

Preencha o formulário com seu novo nome de índice (por exemplo, o nome do seu blog) e defina o número de dimensões como 1536:

Pinecone


Openai

A CLI requer quatro teclas Env:
OPENAI_API_KEY=
PINECONE_API_KEY=
PINECONE_BASE_URL=
PINECONE_NAMESPACE=Certifique -se de adicioná -los antes de usá -lo!
index <dir> - Processa arquivos com seu conteúdo e envie -os para Pinecone.
Exemplo:
$ @beerose/semantic-search index ./posts search <query> - Executa uma pesquisa semântica por uma determinada consulta.
Exemplo:
$ @beerose/semantic-search search " hello world " Para mais informações, execute qualquer comando com o sinalizador --help :
$ @beerose/semantic-search index --help
$ @beerose/semantic-search search --help
$ @beerose/semantic-search --help Você pode usar a função semanticQuery exportada desta biblioteca e integrá -la ao seu site ou aplicativo.
Instalar deps:
$ pnpm add pinecone-client openai @beerose/semantic-search
# or `yarn add` or `npm i`Um exemplo de uso:
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 ) ;Aqui está um exemplo de rota da API de Aleksandra.Codes: https://github.com/beerose/aleksandra.codes/blob/main/api/search.ts
A pesquisa semântica pode entender o significado das palavras nos documentos e os resultados de retorno que são mais relevantes para a intenção do usuário.
Esta ferramenta usa o OpenAI para gerar incorporações vetoriais com um modelo text-embedding-ada-002 .
As incorporações são representações numéricas de conceitos convertidos em sequências numéricas, o que facilita para os computadores entenderem as relações entre esses conceitos. https://openai.com/blog/new-and-improted-embedding-model/
Ele também usa Pinecone - um banco de dados hospedado para pesquisa de vetores. Ele nos permite realizar pesquisas da K-NN nas incorporações geradas.
O comando @beerose/sematic-search index da CLI executa as etapas a seguir para cada arquivo em um determinado diretório:
Dependendo do seu conteúdo, todo o processo requer um monte de chamadas para o OpenAI e Pinecone, o que pode levar algum tempo. Por exemplo, leva cerca de trinta minutos para um diretório com ~ 25 postagens de blog e uma média de 6 minutos de tempo de leitura.
Para testar a pesquisa semântica, você pode usar o 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 - o ponto de entrada da CLI.src :bin/cli.ts - arquivos onde você pode encontrar comandos e configurações da CLI. Este projeto usa CAC para a construção de CLIs.commands/indexFiles.ts - Um comando da CLI que lida com o processamento de conteúdo MD/MDX, gerando incorporação e upload de vetores para Pinecone.command/search.ts - Um comando de pesquisa semântica. Ele gera uma incorporação para uma determinada consulta de pesquisa e chama Pinecone para os resultados.getEmbeddings.ts - gerando lógica de incorporação. Ele lida com uma chamada para abrir a IA.isRateLimitExceeded.ts - Helper de manuseio de erros.mdxToPlainText.ts - converte arquivos MDX em texto bruto. Usa o observar e um plug -in personalizado remarkMdxToPlainText (também definido nesse arquivo).semanticQuery.ts - Lógica central para realizar pesquisas semânticas. Ele está sendo usado no comando search e também é exportado a partir desta biblioteca, para que você possa integrá -lo aos seus projetos.splitIntoChunks.ts - divide o texto em pedaços com um máximo de 100 fichas.titleCase.ts - Extrai um título de um caminho de arquivo.types.ts - Tipos e utilitários usados neste projeto.tsconfig.json - Configuração do compilador TypeScript.tsconfig.build.json - Configuração do compilador TypeScript usado para pnpm build .Testes:
src/mdxToPlainText.test.tssrc/splitIntoChunks.test.tsInstalar deps e construir o projeto:
pnpm i
pnpm buildExecute a CLI localmente:
node bin/cli.jspnpm test Contribuições, questões e solicitações de recursos são bem -vindos.
Sinta -se à vontade para verificar a página de problemas se quiser contribuir.
Copyright © 2023 Aleksandra Sikora.
Este projeto está licenciado pelo MIT.