CLI ที่ขับเคลื่อนด้วย OpenAI เพื่อสร้างดัชนีการค้นหาความหมายจากไฟล์ MDX ของคุณ ช่วยให้คุณทำการค้นหาที่ซับซ้อนในเนื้อหาของคุณและรวมเข้ากับแพลตฟอร์มของคุณ
โครงการนี้ใช้ OpenAI เพื่อสร้าง embeddings และ pinecone เพื่อโฮสต์ embeddings ซึ่งหมายความว่าคุณต้องมีบัญชีใน 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 Flag:
$ @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 เพื่อสร้าง embeddings เวกเตอร์ด้วยโมเดล text-embedding-ada-002
Embeddings เป็นตัวแทนเชิงตัวเลขของแนวคิดที่แปลงเป็นลำดับตัวเลขซึ่งทำให้คอมพิวเตอร์เข้าใจความสัมพันธ์ระหว่างแนวคิดเหล่านั้นได้ง่าย https://openai.com/blog/new-and-improved-embedding-model/
นอกจากนี้ยังใช้ Pinecone - ฐานข้อมูลโฮสต์สำหรับการค้นหาเวกเตอร์ มันช่วยให้เราทำการค้นหา K-NN ผ่านการฝังตัวที่สร้างขึ้น
คำสั่ง @beerose/sematic-search index CLI ดำเนินการตามขั้นตอนต่อไปนี้สำหรับแต่ละไฟล์ในไดเรกทอรีที่กำหนด:
กระบวนการทั้งหมดของคุณต้องใช้การโทรไปยัง OpenAI และ Pinecone ทั้งนี้ขึ้นอยู่กับเนื้อหาของคุณซึ่งอาจใช้เวลาพอสมควร ตัวอย่างเช่นใช้เวลาประมาณสามสิบนาทีสำหรับไดเรกทอรีที่มีโพสต์บล็อก ~ 25 และเวลาอ่านเฉลี่ย 6 นาที
ในการทดสอบการค้นหาความหมายคุณสามารถใช้คำสั่ง @beerose/sematic-search search cli-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 - จุดเข้าใช้ CLIsrc :bin/cli.ts - ไฟล์ที่คุณสามารถค้นหาคำสั่งและการตั้งค่า CLI โครงการนี้ใช้ CAC สำหรับการสร้าง cliscommands/indexFiles.ts - คำสั่ง CLI ที่จัดการกับการประมวลผลเนื้อหา MD/MDX สร้างการฝังและการอัปโหลดเวกเตอร์ไปยัง Pineconecommand/search.ts - คำสั่งค้นหาความหมาย มันสร้างการฝังสำหรับการค้นหาที่กำหนดแล้วเรียกใช้ pinecone สำหรับผลลัพธ์getEmbeddings.ts - สร้างตรรกะการฝังตัว มันจัดการสายเพื่อเปิด AIisRateLimitExceeded.ts - ผู้ช่วยจัดการข้อผิดพลาดmdxToPlainText.ts - แปลงไฟล์ MDX เป็นข้อความดิบ ใช้คำพูดและปลั๊กอิน remarkMdxToPlainText ที่กำหนดเอง (ยังกำหนดไว้ในไฟล์นั้น)semanticQuery.ts - ตรรกะหลักสำหรับการค้นหาความหมาย มันถูกใช้ในคำสั่ง search และมันถูกส่งออกจากไลบรารีนี้เพื่อให้คุณสามารถรวมเข้ากับโครงการของคุณsplitIntoChunks.ts - แยกข้อความออกเป็นชิ้นที่มีโทเค็นสูงสุด 100 โทtitleCase.ts - แยกชื่อเรื่องจากเส้นทางไฟล์types.ts - ประเภทและยูทิลิตี้ที่ใช้ในโครงการนี้tsconfig.json - การกำหนดค่าคอมไพเลอร์ TypeScripttsconfig.build.json - การกำหนดค่าคอมไพเลอร์ TypeScript ที่ใช้สำหรับ pnpm buildการทดสอบ:
src/mdxToPlainText.test.tssrc/splitIntoChunks.test.tsติดตั้ง deps และสร้างโครงการ:
pnpm i
pnpm buildเรียกใช้ CLI ในพื้นที่:
node bin/cli.jspnpm test ยินดีต้อนรับการมีส่วนร่วมปัญหาและคำขอคุณสมบัติ
อย่าลังเลที่จะตรวจสอบหน้าปัญหาหากคุณต้องการมีส่วนร่วม
ลิขสิทธิ์© 2023 Aleksandra Sikora
โครงการนี้ได้รับใบอนุญาต MIT