คุณรู้หรือไม่? ในภาพยนตร์ Ragatouille Dish Remy Made ไม่ใช่ Ratatouille แต่เป็นเวอร์ชั่นที่ได้รับการกลั่นกรองที่เรียกว่า "Confit Byaldi"

Byaldi เป็นโครงการมินิน้องสาวของ Ragatouille มันเป็น wrapper ง่าย ๆ รอบ ๆ ที่เก็บ colpali เพื่อให้ใช้งานง่ายหลายรุ่นหลายโมเดลเช่น Colpali ที่มี API ที่คุ้นเคย
ขั้นแรกคำเตือน: นี่คือไลบรารีก่อนวางจำหน่ายโดยใช้ดัชนีที่ไม่ได้บีบอัดและขาดการปรับแต่งประเภทอื่น ๆ
ปัจจุบันเราสนับสนุนทุกรุ่นที่สนับสนุนโดย Colpali-Engine พื้นฐานรวมถึงจุดตรวจ Colqwen2 ที่ใหม่กว่าและดีกว่าเช่น vidore/colqwen2-v1.0 ในวงกว้างจุดมุ่งหมายคือ Byaldi ที่จะสนับสนุน Colvlm ทุกรุ่น
แบ็กเอนด์เพิ่มเติมจะได้รับการสนับสนุนในการอัปเดตในอนาคต ในขณะที่ Byaldi มีอยู่เพื่ออำนวยความสะดวกในการยอมรับการดึงข้อมูลแบบหลายรูปแบบเราตั้งใจที่จะเพิ่มการสนับสนุนสำหรับรุ่นเช่น VISRAG
ในที่สุดเราจะเพิ่มกลไกการทำดัชนี HNSW การรวมและใครจะรู้ว่าอาจจะเป็นปริมาณ 2 บิต?
มันจะได้รับการอัปเดตเมื่อระบบนิเวศแบบหลายระบบพัฒนาขึ้นต่อไป!
ในการแปลง PDF เป็นรูปภาพด้วยใบอนุญาตที่เป็นมิตรเราใช้ไลบรารี pdf2image ไลบรารีนี้ต้องการให้ poppler ติดตั้งในระบบของคุณ Poppler ติดตั้งง่ายมากโดยทำตามคำแนะนำในเว็บไซต์ของพวกเขา tl; dr คือ:
macos กับ homebrew
brew install popplerDebian/Ubuntu
sudo apt-get install -y poppler-utilsGemma ใช้ Flash Attention เวอร์ชันล่าสุด เพื่อให้สิ่งต่าง ๆ ทำงานได้อย่างราบรื่นที่สุดเราขอแนะนำให้คุณติดตั้งหลังจากติดตั้งไลบรารี:
pip install --upgrade byaldi
pip install flash-attnColpali ใช้โมเดลพารามิเตอร์หลายพันล้านเพื่อเข้ารหัสเอกสาร เราขอแนะนำให้ใช้ GPU สำหรับการดำเนินงานที่ราบรื่นแม้ว่า GPU ที่อ่อนแอ/เก่ากว่าจะดีอย่างสมบูรณ์! การเข้ารหัสคอลเลกชันของคุณจะได้รับจากประสิทธิภาพที่ไม่ดีใน CPU หรือ MPS
byaldiByaldi เป็นแบบจำลองเป็นส่วนใหญ่หลังจาก Ragatouille ซึ่งหมายความว่าทุกอย่างถูกออกแบบมาเพื่อใช้รหัสที่น้อยที่สุดเท่าที่จะเป็นไปได้ดังนั้นคุณสามารถสร้างได้อย่างรวดเร็วบนมันแทนที่จะใช้เวลาในการหาวิธีสร้างท่อเรียกคืน
การโหลดแบบจำลองด้วย byaldi นั้นตรงไปตรงมามาก:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll save the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_pretrained ( "vidore/colqwen2-v1.0" )หากคุณมีดัชนีอยู่แล้วและต้องการโหลดพร้อมกับโมเดลที่จำเป็นในการสอบถามคุณสามารถทำได้เช่นกัน:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll look for the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_index ( "your_index_name" ) การสร้างดัชนีด้วย byaldi นั้นง่ายและยืดหยุ่น คุณสามารถจัดทำดัชนีไฟล์ PDF เดียวไฟล์ภาพเดียวหรือไดเรกทอรีที่มีหลายไฟล์ นี่คือวิธีการสร้างดัชนี:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll save the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_pretrained ( "vidore/colqwen2-v1.0" )
RAG . index (
input_path = "docs/" , # The path to your documents
index_name = index_name , # The name you want to give to your index. It'll be saved at `index_root/index_name/`.
store_collection_with_index = False , # Whether the index should store the base64 encoded documents.
doc_ids = [ 0 , 1 , 2 ], # Optionally, you can specify a list of document IDs. They must be integers and match the number of documents you're passing. Otherwise, doc_ids will be automatically created.
metadata = [{ "author" : "John Doe" , "date" : "2021-01-01" }], # Optionally, you can specify a list of metadata for each document. They must be a list of dictionaries, with the same length as the number of documents you're passing.
overwrite = True # Whether to overwrite an index if it already exists. If False, it'll return None and do nothing if `index_root/index_name` exists.
) แล้วก็แค่ไหน! โมเดลจะเริ่มหมุนและสร้างดัชนีของคุณส่งออกข้อมูลที่จำเป็นทั้งหมดไปยังดิสก์เมื่อเสร็จสิ้น จากนั้นคุณสามารถใช้วิธี RAGMultiModalModel.from_index("your_index_name") วิธีที่นำเสนอด้านบนเพื่อโหลดเมื่อใดก็ตามที่ต้องการ (คุณไม่จำเป็นต้องทำสิ่งนี้หลังจากสร้างมัน - มันโหลดในหน่วยความจำแล้วพร้อมที่จะไป!)
การตัดสินใจหลักที่คุณจะต้องทำที่นี่คือไม่ว่าคุณต้องการตั้งค่า store_collection_with_index เป็นจริงหรือไม่ หากตั้งค่าเป็น TRUE มันจะทำให้เวิร์กโฟลว์ของคุณง่ายขึ้นอย่างมาก: เอกสารที่เกี่ยวข้องกับ Base64 รุ่นที่เข้ารหัสจะถูกส่งกลับเป็นส่วนหนึ่งของผลลัพธ์การสืบค้นดังนั้นคุณสามารถส่งไปยัง LLM ของคุณได้ทันที อย่างไรก็ตามมันเพิ่มหน่วยความจำและข้อกำหนดการจัดเก็บข้อมูลจำนวนมากให้กับดัชนีของคุณดังนั้นคุณอาจต้องการตั้งค่าเป็นเท็จ (การตั้งค่าเริ่มต้น) หากคุณขาดทรัพยากรเหล่านั้นและสร้างรุ่นที่เข้ารหัส Base64 ด้วยตัวคุณเองเมื่อต้องการ
เมื่อคุณสร้างหรือโหลดดัชนีแล้วคุณสามารถเริ่มค้นหาเอกสารที่เกี่ยวข้อง อีกครั้งมันเป็นคำสั่งเดียวที่ตรงไปตรงมามาก:
results = RAG . search ( query , k = 3 ) ผลลัพธ์จะเป็นรายการของวัตถุ Result ซึ่งคุณสามารถถือว่าเป็นพจนานุกรมปกติ แต่ละผลลัพธ์จะอยู่ในรูปแบบนี้:
[
{
"doc_id" : 0 ,
"page_num" : 10 ,
"score" : 12.875 ,
"metadata" : {},
"base64" : None
},
...
] page_num เป็น 1-indexed ในขณะที่ doc_ids เป็น 0-indexed นี่คือการทำให้ง่ายขึ้นในการใช้งานกับเครื่องมือการจัดการ PDF อื่น ๆ โดยทั่วไปหน้า 1 หน้า 1 หน้า 1. page_num สำหรับรูปภาพและ PDF หน้าเดียวจะเป็น 1 เสมอมันมีประโยชน์สำหรับ PDF ที่ยาวขึ้นเท่านั้น
หากคุณผ่านข้อมูลเมตาหรือเข้ารหัสด้วยธงเพื่อจัดเก็บรุ่น Base64 ฟิลด์เหล่านี้จะถูกเติม ผลลัพธ์จะถูกจัดเรียงตามคะแนนดังนั้นรายการ 0 จากรายการจะเป็นเอกสารที่เกี่ยวข้องมากที่สุดเสมอ ฯลฯ ...
เนื่องจากดัชนีอยู่ในหน่วยความจำจึงเป็นมิตรกับการเพิ่ม! หากคุณต้องการบริโภค PDF ใหม่เพียงแค่โหลดดัชนีของคุณด้วย from_index จากนั้นโทร add_to_index พร้อมพารามิเตอร์ที่คล้ายกันกับวิธี index() :
RAG . add_to_index ( "path_to_new_docs" ,
store_collection_with_index : bool = False ,
...
)