由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许可。