由OpenAI驅動的CLI從MDX文件中構建語義搜索索引。它使您可以在內容上執行複雜的搜索並將其與平台集成在一起。
該項目使用OpenAI生成矢量嵌入和松果來託管嵌入,這意味著您需要在OpenAI和Pinecone中擁有帳戶才能使用它。
在Pinecone中創建帳戶後,轉到儀表板,然後單擊Create Index按鈕:

用您的新索引名稱(例如您的博客名稱)填寫表格,並將尺寸的數量設置為1536:

松果


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 ) ;這是來自Aleksandra.codes的示例API路線:https://github.com/beerose/aleksandra.codes/blob/main/main/api/search.ts
語義搜索可以理解文檔中單詞的含義,並返回與用戶意圖更相關的結果。
該工具使用OpenAI生成具有text-embedding-ada-002型號的向量嵌入。
嵌入是轉換為數字序列的概念的數值表示,這使計算機很容易理解這些概念之間的關係。 https://openai.com/blog/new-and-mpreved-embedding-model/
它還使用Pinecone-託管數據庫進行矢量搜索。它使我們可以在生成的嵌入式上執行K-NN搜索。
@beerose/sematic-search index cli命令在給定目錄中對每個文件執行以下步驟:
根據您的內容,整個過程需要對OpenAI和Pinecone的呼叫,這可能需要一些時間。例如,一個目錄約25個博客文章和平均6分鐘閱讀時間的目錄大約需要三十分鐘。
要測試語義搜索,您可以使用@beerose/sematic-search search cli命令,其中:

.
├── 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來建造CLIS。commands/indexFiles.ts - 一個處理MD/MDX內容的CLI命令,生成嵌入式並將向量上傳到Pinecone。command/search.ts - 語義搜索命令。它為給定的搜索查詢生成嵌入式,然後致電Pinecone以獲取結果。getEmbeddings.ts - 生成嵌入式邏輯。它處理打開AI的電話。isRateLimitExceeded.ts - 錯誤處理助手。mdxToPlainText.ts - 將MDX文件轉換為原始文本。使用備註和自定義remarkMdxToPlainText插件(該文件中也定義)。semanticQuery.ts - 用於執行語義搜索的核心邏輯。它被用於search命令中,並且也從該庫中導出,以便您可以將其與項目集成在一起。splitIntoChunks.ts - 將文本最多100個令牌分成塊。titleCase.ts - 從文件路徑中提取標題。types.ts - 此項目中使用的類型和實用程序。tsconfig.json打字稿編譯器配置。tsconfig.build.json用於pnpm build的打字稿編譯器配置。測試:
src/mdxToPlainText.test.tssrc/splitIntoChunks.test.ts安裝DEP並構建項目:
pnpm i
pnpm build在本地運行CLI:
node bin/cli.jspnpm test 歡迎貢獻,問題和功能請求。
如果您想貢獻,請隨時檢查問題頁面。
版權所有©2023 Aleksandra Sikora。
該項目已獲得MIT許可。