vectordb
เป็นฐานข้อมูลเวกเตอร์ Pythonic ที่นำเสนอชุดการดำเนินการ CRUD (สร้าง อ่าน อัปเดต ลบ) ที่ครอบคลุม และตัวเลือกความสามารถในการปรับขนาดที่แข็งแกร่ง รวมถึงการแบ่งส่วนและการจำลองแบบ พร้อมใช้งานในสภาพแวดล้อมที่หลากหลาย ตั้งแต่ภายในเครื่องไปจนถึงในองค์กรและบนคลาวด์ vectordb
มอบสิ่งที่คุณต้องการ ไม่มากไป ไม่น้อยไปกว่านี้ เป็นข้อพิสูจน์ถึงการออกแบบ Pythonic ที่มีประสิทธิภาพโดยไม่ต้องมีวิศวกรรมมากเกินไป ทำให้เป็นโซลูชันแบบลีนแต่ทรงพลังสำหรับทุกความต้องการของคุณ
vectordb
ใช้ประโยชน์จากความสามารถในการดึงข้อมูลอันทรงพลังของ DocArray และความสามารถในการปรับขนาด ความน่าเชื่อถือ และการให้บริการของ Jina สิ่งมหัศจรรย์: DocArray ทำหน้าที่เป็นกลไกขับเคลื่อนตรรกะการค้นหาเวกเตอร์ ในขณะที่ Jina รับประกันการแสดงดัชนีที่มีประสิทธิภาพและปรับขนาดได้ การทำงานร่วมกันนี้ทำให้เกิดประสบการณ์ฐานข้อมูลเวกเตอร์ที่แข็งแกร่งแต่ยังใช้งานง่าย นั่นคือ vectordb
สำหรับคุณ
pip ติดตั้ง vectordb
vectordb
ในเครื่องเริ่มต้นสิ่งต่างๆ ด้วยการกำหนดสคีมาเอกสารด้วยไวยากรณ์คลาสข้อมูล DocArray:
จาก docarray นำเข้า BaseDoc จาก docarray.typing นำเข้า NdArrayclass ToyDoc (BaseDoc): ข้อความ: str = '' การฝัง: NdArray[128]
เลือกใช้ฐานข้อมูลที่สร้างไว้ล่วงหน้า (เช่น InMemoryExactNNVectorDB
หรือ HNSWVectorDB
) และใช้สคีมา:
จาก docarray นำเข้า DocListimport numpy เป็น npfrom vectordb import InMemoryExactNNVectorDB, HNSWVectorDB# ระบุพื้นที่ทำงานของคุณ pathdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./workspace_path')# จัดทำดัชนีรายการเอกสารที่มีการฝังแบบสุ่ม doc_list = [ToyDoc(text=f'toy doc {ฉัน}', embedding=np.random.rand(128)) for i in range(1000)]db.index(inputs=DocList[ToyDoc](doc_list))# ดำเนินการค้นหาqueryquery = ToyDoc(text='query', embedding=np .random.rand(128))results = db.search(inputs=DocList[ToyDoc]([แบบสอบถาม]), ขีดจำกัด=10)# พิมพ์รายการที่ตรงกันสำหรับ m ในผลลัพธ์ [0].การจับคู่: พิมพ์(m)
เนื่องจากเราออกแบบสอบถามเดียว results
มีเพียงองค์ประกอบเดียวเท่านั้น ผลการค้นหาเพื่อนบ้านที่ใกล้ที่สุดจะถูกจัดเก็บไว้อย่างสะดวกในแอตทริบิวต์ . .matches
vectordb
เป็นบริการ vectordb
ได้รับการออกแบบมาให้ให้บริการได้อย่างง่ายดาย โดยรองรับโปรโตคอลการสื่อสาร gRPC
, HTTP
และ Websocket
ทางฝั่งเซิร์ฟเวอร์ คุณจะเริ่มบริการดังนี้:
ด้วย db.serve(protocol='grpc', port=12345, Replicas=1, shards=1) เป็นบริการ: service.block()
คำสั่งนี้เริ่มต้น vectordb
เป็นบริการบนพอร์ต 12345
โดยใช้โปรโตคอล gRPC
ที่มี 1
เรพลิกาและ 1
ชาร์ด
บนฝั่งไคลเอ็นต์ คุณสามารถเข้าถึงบริการด้วยคำสั่งต่อไปนี้:
จาก vectordb import Client# สร้างอินสแตนซ์ไคลเอ็นต์ที่เชื่อมต่อกับเซิร์ฟเวอร์ ในทางปฏิบัติ ให้แทนที่ 0.0.0.0 ไปยังเซิร์ฟเวอร์ IP address.client = Client[ToyDoc](address='grpc://0.0.0.0:12345')# ดำเนินการค้นหาผลลัพธ์ = client.search(inputs=DocList[ToyDoc] ([แบบสอบถาม]) ขีดจำกัด=10)
สิ่งนี้ทำให้คุณสามารถดำเนินการค้นหา โดยรับผลลัพธ์โดยตรงจากบริการ vectordb
ระยะไกล
vectordb
บน Jina AI Cloud คุณสามารถปรับใช้อินสแตนซ์ vectordb
ของคุณกับ Jina AI Cloud ได้อย่างราบรื่น ซึ่งรับประกันการเข้าถึงฐานข้อมูลของคุณจากทุกที่
เริ่มต้นด้วยการฝังอินสแตนซ์หรือคลาสฐานข้อมูลของคุณลงในไฟล์ Python:
# example.pyfrom docarray import BaseDocfrom vectordb import InMemoryExactNNVectorDBdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./vectordb') # สังเกตว่า `db` เป็นอินสแตนซ์ที่เราต้องการให้บริการอย่างไร ถ้า __name__ == '__main__':# สำคัญ: ตรวจสอบให้แน่ใจว่า เพื่อปกป้องส่วนนี้ของโค้ดโดยใช้ __main__ guardwith db.serve() as บริการ: service.block()
จากนั้น ทำตามขั้นตอนเหล่านี้เพื่อปรับใช้อินสแตนซ์ของคุณ:
หากคุณยังไม่ได้ลงทะเบียนบัญชี Jina AI Cloud
ใช้บรรทัดคำสั่ง jc
เพื่อเข้าสู่บัญชี Jina AI Cloud ของคุณ:
เจซีเข้าสู่ระบบ
ปรับใช้อินสแตนซ์ของคุณ:
vectordb ปรับใช้ --db ตัวอย่าง: db
หลังจากการปรับใช้ ให้ใช้ vectordb
Client เพื่อเข้าถึงตำแหน่งข้อมูลที่กำหนด:
จาก vectordb import Client# แทนที่ ID ด้วย ID ของ DB ที่ปรับใช้ของคุณดังที่แสดงในภาพหน้าจอด้านบน c = Client(address='grpcs://ID.wolf.jina.ai')
จากนั้นคุณสามารถแสดงรายการ หยุดชั่วคราว ดำเนินการต่อ หรือลบฐานข้อมูลที่ปรับใช้ของคุณด้วยคำสั่ง jc
:
jcloud list ID
jcloud pause ID
หรือ jcloud resume ID
jcloud remove ID
ฐานข้อมูลเวกเตอร์ทำหน้าที่เป็นพื้นที่เก็บข้อมูลที่ซับซ้อนสำหรับการฝัง โดยรวบรวมสาระสำคัญของความคล้ายคลึงทางความหมายระหว่างวัตถุที่แตกต่างกัน ฐานข้อมูลเหล่านี้อำนวยความสะดวกในการค้นหาความคล้ายคลึงกันในประเภทข้อมูลหลายรูปแบบจำนวนมากมาย ซึ่งปูทางไปสู่ยุคใหม่ของการเรียกค้นข้อมูล ด้วยการให้ความเข้าใจตามบริบทและเพิ่มผลลัพธ์ในการสร้าง ฐานข้อมูลเวกเตอร์ช่วยเพิ่มประสิทธิภาพและประโยชน์ของโมเดลการเรียนรู้ภาษา (LLM) ได้อย่างมาก สิ่งนี้ตอกย้ำบทบาทสำคัญของพวกเขาในวิวัฒนาการของแอปพลิเคชันวิทยาศาสตร์ข้อมูลและการเรียนรู้ของเครื่อง
ทั้งการใช้งานไลบรารีในเครื่องและการโต้ตอบระหว่างไคลเอนต์และเซิร์ฟเวอร์ใน vectordb
แชร์ API เดียวกัน ซึ่งมีฟังก์ชัน index
search
update
และ delete
:
index
: ยอมรับ DocList
เพื่อสร้างดัชนี
search
: รับ DocList
ของการสืบค้นแบบแบตช์หรือ BaseDoc
เดียวเป็นแบบสอบถามเดียว โดยจะส่งกลับผลลัพธ์รายการเดียวหรือหลายรายการ โดยแต่ละรายการมีแอตทริบิวต์ matches
และ scores
ที่จัดเรียงตาม relevance
delete
: ยอมรับ DocList
ของเอกสารที่จะลบออกจากดัชนี จำเป็นต้องมีแอตทริบิวต์ id
เท่านั้น ดังนั้นโปรดติดตาม IDs
indexed
ไว้หากคุณต้องการลบเอกสาร
update
: ยอมรับ DocList
ของเอกสารที่จะอัปเดตในดัชนี การดำเนินการ update
จะแทนที่เอกสาร indexed
ด้วยดัชนีเดียวกันกับแอตทริบิวต์และเพย์โหลดจากเอกสารอินพุต
คุณสามารถให้บริการ vectordb
และเข้าถึงได้จากไคลเอนต์ด้วยพารามิเตอร์ต่อไปนี้:
โปรโตคอล: โปรโตคอลการให้บริการ อาจเป็น gRPC
, HTTP
, websocket
หรือทั้งสองอย่างรวมกัน โดยระบุเป็นรายการ ค่าเริ่มต้นคือ gRPC
พอร์ต: พอร์ตการเข้าถึงบริการ สามารถเป็นรายการพอร์ตสำหรับแต่ละโปรโตคอลที่ให้มา ค่าเริ่มต้นคือ 8081
พื้นที่ทำงาน: เส้นทางที่ VectorDB ยังคงมีข้อมูลที่จำเป็น ค่าเริ่มต้นคือ '.' (ไดเรกทอรีปัจจุบัน)
คุณสามารถตั้งค่าพารามิเตอร์การปรับขนาดได้สองตัวเมื่อให้บริการหรือปรับใช้ฐานข้อมูลเวกเตอร์ของคุณด้วย vectordb
:
ชาร์ด: จำนวนชาร์ดข้อมูล สิ่งนี้จะช่วยปรับปรุงเวลาแฝง เนื่องจาก vectordb
ช่วยให้มั่นใจว่าเอกสารได้รับการจัดทำดัชนีในส่วนแบ่งข้อมูลเพียงส่วนเดียวเท่านั้น คำขอค้นหาจะถูกส่งไปยังชาร์ดทั้งหมดและผลลัพธ์จะถูกรวมเข้าด้วยกัน
แบบจำลอง: จำนวนแบบจำลอง DB vectordb
ใช้อัลกอริทึม RAFT เพื่อซิงค์ดัชนีระหว่างแบบจำลองของแต่ละส่วน สิ่งนี้จะเพิ่มความพร้อมใช้งานของบริการและปริมาณการค้นหา เนื่องจากแบบจำลองหลายตัวสามารถตอบสนองแบบขนานกับคำขอการค้นหาที่มากขึ้นในขณะที่อนุญาตการดำเนินการ CRUD หมายเหตุ: ในการปรับใช้ JCloud จำนวนเรพลิกาจะถูกตั้งค่าเป็น 1 เรากำลังดำเนินการเปิดใช้งานการจำลองในระบบคลาวด์
ต่อไปนี้เป็นพารามิเตอร์สำหรับ VectorDB
แต่ละประเภท:
ฐานข้อมูลนี้ทำการค้นหาการฝังอย่างละเอียดถี่ถ้วนและมีการตั้งค่าการกำหนดค่าที่จำกัด:
workspace
: โฟลเดอร์ที่มีข้อมูลที่ต้องการอยู่
InMemoryExactNNVectorDB[MyDoc](พื้นที่ทำงาน='./vectordb')InMemoryExactNNVectorDB[MyDoc].serve(พื้นที่ทำงาน='./vectordb')
ฐานข้อมูลนี้ใช้อัลกอริธึม HNSW (Hierarchical Navigable Small World) จาก HNSWLib สำหรับการค้นหาเพื่อนบ้านที่ใกล้ที่สุดโดยประมาณ มีตัวเลือกการกำหนดค่าหลายแบบ:
workspace
: ระบุไดเร็กทอรีที่จัดเก็บและคงข้อมูลที่ต้องการ
นอกจากนี้ HNSWVectorDB ยังมีชุดการกำหนดค่าที่อนุญาตให้ปรับแต่งประสิทธิภาพและความแม่นยำของอัลกอริธึมการค้นหา Nearest Neighbor คำอธิบายโดยละเอียดของการกำหนดค่าเหล่านี้มีอยู่ใน HNSWLib README:
space
: ระบุตัวชี้วัดความคล้ายคลึงที่ใช้สำหรับช่องว่าง (ตัวเลือกคือ "l2", "ip" หรือ "โคไซน์") ค่าเริ่มต้นคือ "l2"
max_elements
: ตั้งค่าความจุเริ่มต้นของดัชนีซึ่งสามารถเพิ่มได้แบบไดนามิก ค่าเริ่มต้นคือ 1024
ef_construction
: พารามิเตอร์นี้ควบคุมการแลกเปลี่ยนความเร็ว/ความแม่นยำระหว่างการสร้างดัชนี ค่าเริ่มต้นคือ 200
ef
: พารามิเตอร์นี้ควบคุมเวลาในการสืบค้น/การแลกเปลี่ยนความแม่นยำ ค่าเริ่มต้นคือ 10
M
: พารามิเตอร์นี้กำหนดจำนวนการเชื่อมต่อขาออกสูงสุดในกราฟ ค่าเริ่มต้นคือ 16
allow_replace_deleted
: หากตั้งค่าเป็น True
จะทำให้สามารถแทนที่องค์ประกอบที่ถูกลบด้วยองค์ประกอบที่เพิ่มใหม่ได้ ค่าเริ่มต้นคือ False
num_threads
: นี่เป็นการตั้งค่าจำนวนเธรดเริ่มต้นที่จะใช้ระหว่างการดำเนินการจัดทำ index
และ search
ค่าเริ่มต้นคือ 1
vectordb
มี CLI อย่างง่ายสำหรับการให้บริการและปรับใช้ฐานข้อมูลของคุณ:
คำอธิบาย | สั่งการ |
---|---|
ให้บริการ DB ของคุณในพื้นที่ | vectordb serve --db example:db |
ปรับใช้ฐานข้อมูลของคุณบน Jina AI Cloud | vectordb deploy --db example:db |
ส่วนต่อประสานที่ใช้งานง่าย: ด้วย vectordb
ความเรียบง่ายคือกุญแจสำคัญ อินเทอร์เฟซที่ใช้งานง่ายได้รับการออกแบบมาเพื่อรองรับผู้ใช้ตามระดับความเชี่ยวชาญที่แตกต่างกัน
การออกแบบที่เรียบง่าย: vectordb
รวบรวมทุกสิ่งที่จำเป็น โดยไม่มีความซับซ้อนที่ไม่จำเป็น ช่วยให้มั่นใจได้ถึงการเปลี่ยนแปลงที่ราบรื่นจากการใช้งานภายในสู่เซิร์ฟเวอร์และระบบคลาวด์
รองรับ CRUD เต็มรูปแบบ: ตั้งแต่การจัดทำดัชนีและการค้นหาไปจนถึงการอัปเดตและการลบ vectordb
ครอบคลุมการดำเนินงาน CRUD ทั้งหมด
DB เป็นบริการ: ควบคุมพลังของโปรโตคอล gRPC, HTTP และ Websocket ด้วย vectordb
ช่วยให้คุณสามารถให้บริการฐานข้อมูลของคุณและดำเนินการแทรกหรือค้นหาได้อย่างมีประสิทธิภาพ
ความสามารถในการปรับขนาด: สัมผัสกับพลังที่แท้จริงของความสามารถในการปรับใช้ของ vectordb
รวมถึงคุณสมบัติความสามารถในการปรับขนาดที่แข็งแกร่ง เช่น การแบ่งส่วนและการจำลองแบบ ปรับปรุงเวลาแฝงของบริการของคุณด้วยการแบ่งส่วน ในขณะที่การจำลองช่วยเพิ่มความพร้อมใช้งานและปริมาณงาน
การปรับใช้ระบบคลาวด์: การปรับใช้บริการของคุณในระบบคลาวด์เป็นเรื่องง่ายด้วย Jina AI Cloud ตัวเลือกการปรับใช้งานเพิ่มเติมกำลังจะมาในเร็วๆ นี้!
ความสามารถแบบไร้เซิร์ฟเวอร์: vectordb
สามารถปรับใช้ในโหมดไร้เซิร์ฟเวอร์ในระบบคลาวด์ เพื่อให้มั่นใจว่ามีการใช้ทรัพยากรอย่างเหมาะสมที่สุดและความพร้อมใช้งานของข้อมูลตามความต้องการของคุณ
อัลกอริธึม ANN หลายตัว: vectordb
นำเสนอการใช้งานอัลกอริธึมเพื่อนบ้านที่ใกล้ที่สุด (ANN) ที่หลากหลาย ต่อไปนี้เป็นข้อเสนอปัจจุบัน พร้อมด้วยการบูรณาการเพิ่มเติมในอนาคต:
InMemoryExactNNVectorDB (การค้นหา NN ที่แน่นอน): ใช้อัลกอริทึมเพื่อนบ้านที่ใกล้ที่สุดอย่างง่าย
HNSWVectorDB (อิงตาม HNSW): ใช้ HNSWLib
อนาคตของ Vector Database ดูสดใส และเรามีแผนอันทะเยอทะยาน! ต่อไปนี้เป็นตัวอย่างคุณสมบัติที่เรากำลังพัฒนา:
อัลกอริธึมการค้นหา ANN เพิ่มเติม: เป้าหมายของเราคือการสนับสนุนอัลกอริธึมการค้นหา ANN ที่หลากหลายยิ่งขึ้น
ความสามารถในการกรองที่ได้รับการปรับปรุง: เรากำลังดำเนินการปรับปรุงโซลูชัน ANN Search ของเราเพื่อรองรับการกรองขั้นสูง
ความสามารถในการปรับแต่งได้: เรามุ่งมั่นที่จะทำให้ vectordb
สามารถปรับแต่งได้สูง ช่วยให้นักพัฒนา Python สามารถปรับแต่งพฤติกรรมให้ตรงกับความต้องการเฉพาะของพวกเขาได้อย่างง่ายดาย
การขยายความจุแบบไร้เซิร์ฟเวอร์: เรามุ่งมั่นที่จะปรับปรุงความจุแบบไร้เซิร์ฟเวอร์ของ vectordb
ในระบบคลาวด์ แม้ว่าปัจจุบันเรารองรับการปรับขนาดระหว่าง 0 ถึง 1 เรพลิกา แต่เป้าหมายของเราคือขยายเป็น 0 ถึง N เรพลิกา
ตัวเลือกการปรับใช้ที่ขยายเพิ่มเติม: เรากำลังดำเนินการอย่างแข็งขันเพื่ออำนวยความสะดวกในการปรับใช้ vectordb
บนแพลตฟอร์มคลาวด์ต่างๆ ด้วยตัวเลือกที่หลากหลาย
ต้องการความช่วยเหลือด้าน vectordb
หรือไม่? สนใจใช้งานแต่ต้องการคุณสมบัติบางอย่างเพื่อตอบสนองความต้องการเฉพาะของคุณหรือไม่? อย่าลังเลที่จะติดต่อเรา เข้าร่วมชุมชน Discord ของเราเพื่อพูดคุยกับเราและสมาชิกชุมชนอื่น ๆ
โครงการ VectorDB ได้รับการสนับสนุนโดย Jina AI และได้รับอนุญาตภายใต้ Apache-2.0 การมีส่วนร่วมจากชุมชนได้รับการชื่นชมอย่างมาก! หากคุณมีแนวคิดเกี่ยวกับคุณลักษณะใหม่หรือการปรับปรุง เรายินดีรับฟังจากคุณ เรามองหาวิธีทำให้ vectordb
ใช้งานง่ายและมีประสิทธิภาพมากขึ้นอยู่เสมอ