CLI с открытым мощностью для создания индекса семантического поиска из ваших файлов MDX. Это позволяет вам выполнять сложные поиски по всему контенту и интегрировать его с вашей платформой.
В этом проекте используется OpenAI для генерации векторных встроений и Pinecone для размещения встроенных встроений, что означает, что вам нужно иметь учетные записи в OpenAI и Pinecone, чтобы использовать его.
После создания учетной записи в Pinecone перейдите на панель инструментов и нажмите кнопку Create Index :

Заполните форму вашим новым именем индекса (например, имя вашего блога) и установите количество измерений на 1536:

Pinecone


Openai

CLI требует четырех ключей ENV:
OPENAI_API_KEY=
PINECONE_API_KEY=
PINECONE_BASE_URL=
PINECONE_NAMESPACE=Обязательно добавьте их перед использованием!
index <dir> - обрабатывает файлы с вашим контентом и загружайте их в PineCone.
Пример:
$ @beerose/semantic-search index ./posts search <query> - выполняет семантический поиск по данному запросу.
Пример:
$ @beerose/semantic-search search " hello world " Для получения дополнительной информации запустите любую команду с флагом --help :
$ @beerose/semantic-search index --help
$ @beerose/semantic-search search --help
$ @beerose/semantic-search --help Вы можете использовать функцию semanticQuery экспортируемую из этой библиотеки, и интегрировать ее с вашим веб -сайтом или приложением.
Установить DEPS:
$ pnpm add pinecone-client openai @beerose/semantic-search
# or `yarn add` or `npm i`Пример использования:
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 ) ;Вот пример маршрута API от aleksandra.codes: https://github.com/beerose/aleksandra.codes/blob/main/api/search.ts
Семантический поиск может понять значение слов в документах и возвращать результаты, которые более актуальны для намерения пользователя.
Этот инструмент использует OpenAI для генерации векторных встроений с моделью text-embedding-ada-002 .
Встроения являются численными представлениями концепций, преобразованных в числовые последовательности, которые позволяют компьютерам понять отношения между этими понятиями. https://openai.com/blog/new-and-improved-embedding-model/
Он также использует Pinecone - размещенную базу данных для векторного поиска. Это позволяет нам выполнять поиски K-NN через сгенерированные встраивания.
Команда CLI @beerose/sematic-search index выполняет следующие шаги для каждого файла в данном каталоге:
В зависимости от вашего контента, весь процесс требует куча вызовов в Openai и Pinecone, что может занять некоторое время. Например, требуется около тридцати минут для каталога с ~ 25 сообщениями в блоге и в среднем 6 минут времени чтения.
Чтобы проверить семантический поиск, вы можете использовать команду CLI @beerose/sematic-search search , которая:

.
├── 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 - CLI -точка.src :bin/cli.ts - файлы, в которых вы можете найти команды и настройки CLI. Этот проект использует CAC для строительства CLI.commands/indexFiles.ts - команда CLI, которая обрабатывает обработку содержимого MD/MDX, генерируя вторжения и загрузку векторов в Pinecone.command/search.ts - команда семантического поиска. Он генерирует внедрение для данного поискового запроса, а затем вызывает Pinecone для результатов.getEmbeddings.ts - генерирование логики внедрения. Это обрабатывает звонок, чтобы открыть ИИ.isRateLimitExceeded.ts - Помощник ошибок.mdxToPlainText.ts - преобразует файлы MDX в необработанный текст. Использует замечание и пользовательский плагин remarkMdxToPlainText (также определяется в этом файле).semanticQuery.ts - основная логика для выполнения семантических поисков. Он используется в команде search , а также экспортируется из этой библиотеки, чтобы вы могли интегрировать ее со своими проектами.splitIntoChunks.ts - разбивает текст на куски с максимум 100 токенами.titleCase.ts - извлекает заголовок из пути файла.types.ts - Типы и утилиты, используемые в этом проекте.tsconfig.json - конфигурация компилятора TypeScript.tsconfig.build.json - Конфигурация компилятора TypeScript, используемая для pnpm build .Тесты:
src/mdxToPlainText.test.tssrc/splitIntoChunks.test.tsУстановите DEP и создайте проект:
pnpm i
pnpm buildЗапустите CLI на местном уровне:
node bin/cli.jspnpm test Взносы, проблемы и запросы на функции приветствуются.
Не стесняйтесь проверять страницу проблем, если хотите внести свой вклад.
Copyright © 2023 Aleksandra Sikora.
Этот проект лицензирован MIT.