โพสต์นี้จะสาธิตกระบวนการใช้ตัวเรียกเอกสารหลักใน LangChain
วิธีใช้ตัวดึงเอกสารหลักใน LangChain
โปรแกรมดึงเอกสารหลักใน LangChain สามารถใช้งานได้โดยการแบ่งเอกสารออกเป็นส่วนเล็กๆ เพื่อไม่ให้สูญเสียความหมายในขณะที่ทำการฝัง เอกสารหลักอาจกล่าวได้ว่าเป็นเอกสารทั้งหมดหรือส่วนที่ใหญ่กว่าซึ่งแยกส่วนที่เล็กกว่าออกมา
หากต้องการเรียนรู้กระบวนการใช้ตัวเรียกเอกสารหลักใน LangChain เพียงอ่านคู่มือนี้:
ขั้นตอนที่ 1: ติดตั้งโมดูล
ขั้นแรก ให้เริ่มใช้ตัวดึงเอกสารหลักโดยการติดตั้งเฟรมเวิร์ก LangChain โดยใช้คำสั่ง pip:
pip ติดตั้ง langchain
ติดตั้งโมดูลฐานข้อมูล Chroma เพื่อบันทึกการฝังเอกสารและดึงข้อมูลจากเอกสาร:
pip ติดตั้ง chromadb
วิธีติดตั้ง tiktoken ซึ่งเป็นโทเค็นที่ได้รับโทเค็นของเอกสารโดยการสร้างชิ้นเล็กๆ:
pip ติดตั้ง tiktoken
รับโมดูล OpenAI โดยดำเนินการคำสั่งต่อไปนี้บนสมุดบันทึก Python เพื่อรับการขึ้นต่อกันและไลบรารี:
pip ติดตั้ง openai
ขั้นตอนที่ 2: ตั้งค่าสภาพแวดล้อมและอัปโหลดข้อมูล
ขั้นตอนต่อไปคือการ ตั้งค่าสภาพแวดล้อม ใช้คีย์ API จากบัญชี OpenAI:
นำเข้า คุณนำเข้า รับผ่าน
คุณ . ประมาณ [ 'OPENAI_API_KEY' ] = รับผ่าน . รับผ่าน ( 'คีย์ OpenAI API:' )
ตอนนี้ ให้อัปโหลดเอกสารจากระบบโลคัลหลังจากนำเข้าไลบรารีไฟล์แล้วเรียกเมธอด upload():
จาก Google. และคณะ นำเข้า ไฟล์อัปโหลดแล้ว = ไฟล์. ที่อัพโหลด ( )
ขั้นตอนที่ 3: นำเข้าไลบรารี
ขั้นตอนต่อไปประกอบด้วยโค้ดสำหรับการนำเข้าไลบรารีที่จำเป็นสำหรับการใช้ตัวเรียกเอกสารหลักโดยใช้เฟรมเวิร์ก LangChain:
จาก แลงเชน ผู้ดึงข้อมูล นำเข้า ParentDocumentRetrieverจาก แลงเชน ร้านเวกเตอร์ นำเข้า โครมา
จาก แลงเชน การฝัง นำเข้า OpenAIEmbeddings
จาก แลงเชน text_splitter นำเข้า RecursiveCharacterTextSplitter
จาก แลงเชน พื้นที่จัดเก็บ นำเข้า ใน MemoryStore
จาก แลงเชน document_loaders นำเข้า โปรแกรมโหลดข้อความ
โหลดเอกสารเพื่อสร้างรีทรีฟเวอร์โดยใช้เมธอด TextLoader() พร้อมพาธของไฟล์:
รถตัก = [โปรแกรมโหลดข้อความ ( 'ข้อมูล.txt' ) ,
โปรแกรมโหลดข้อความ ( 'state_of_the_union.txt' ) ,
]
เอกสาร = [ ]
สำหรับ ล ใน รถตัก:
ขั้นตอนที่ 4: การดึงเอกสารที่สมบูรณ์
เมื่อโหลดเอกสาร/ไฟล์ไปยังโมเดลแล้ว เพียงสร้างเอกสารที่ฝังไว้ และจัดเก็บไว้ในร้านค้าเวกเตอร์:
child_splitter = RecursiveCharacterTextSplitter ( ชิ้น_ขนาด = 400 )ร้านเวกเตอร์ = โครมา (
คอลเลกชัน_ชื่อ = 'เอกสารฉบับเต็ม' ,
embedding_function = OpenAIEmbeddings ( )
)
เก็บ = ใน MemoryStore ( )
รีทรีฟเวอร์ = ParentDocumentRetriever (
ร้านเวกเตอร์ = ร้านเวกเตอร์ ,
docstore = เก็บ ,
child_splitter = child_splitter ,
)
ตอนนี้ให้เรียกใช้เมธอด add_documents() โดยใช้รีทรีฟเวอร์เพื่อรับรีทรีฟเวอร์ไปยังเอกสาร:
รีทรีฟเวอร์ add_documents ( เอกสาร , รหัส = ไม่มี )รหัสต่อไปนี้แยกการฝังของเอกสารที่ถูกเก็บไว้ในฐานข้อมูลสำหรับไฟล์ที่อัพโหลด:
รายการ ( เก็บ. อัตราผลตอบแทน_keys ( ) )
หลังจากได้รับการฝังเอกสารแล้ว ให้เรียกใช้เมธอดคล้าย ๆ กัน_search() พร้อมกับแบบสอบถามเพื่อรับชิ้นส่วนเล็กๆ จากเอกสาร:
sub_docs = ร้านเวกเตอร์ ความคล้ายคลึงกัน_ค้นหา ( 'ความยุติธรรม เบรเออร์' )เรียกใช้เมธอด print() เพื่อแสดงส่วนที่เรียกในโค้ดก่อนหน้าตามแบบสอบถาม:
พิมพ์ ( sub_docs [ 0 ] . หน้า_เนื้อหา )
เรียกใช้ฟังก์ชันรีทรีฟเวอร์ () ให้สมบูรณ์เพื่อรับโทเค็นทั้งหมดที่จัดเก็บไว้ในฐานข้อมูลโดยใช้รหัสต่อไปนี้:
ดึงข้อมูล_docs = รีทรีฟเวอร์ get_relevant_documents ( 'ความยุติธรรม เบรเออร์' )การพิมพ์เอกสารทั้งหมดจะใช้เวลาและพลังในการประมวลผลสูง ดังนั้นเพียงแค่รับเอกสารตามความยาวของเอกสารที่ดึงมาก่อนหน้านี้:
เท่านั้น ( ดึงข้อมูล_docs [ 0 ] . หน้า_เนื้อหา )
ขั้นตอนที่ 5: การดึงชิ้นส่วนที่ใหญ่ขึ้น
ขั้นตอนนี้จะไม่ครอบคลุมทั้งเอกสาร อย่างไรก็ตาม จะใช้กระแตที่ใหญ่กว่าจากเอกสารและดึงชิ้นส่วนที่เล็กกว่าออกมา:
parent_splitter = RecursiveCharacterTextSplitter ( ชิ้น_ขนาด = 2000 )child_splitter = RecursiveCharacterTextSplitter ( ชิ้น_ขนาด = 400 )
ร้านเวกเตอร์ = โครมา ( คอลเลกชัน_ชื่อ = 'แยก_ผู้ปกครอง' , embedding_function = OpenAIEmbeddings ( ) )
เก็บ = ใน MemoryStore ( )
กำหนดค่ารีทรีฟเวอร์เพื่อรับโทเค็นขนาดเล็กจากแหล่งรวมข้อมูลขนาดใหญ่ที่จัดเก็บไว้ใน “ ร้านเวกเตอร์ ' ตัวแปร:
รีทรีฟเวอร์ = ParentDocumentRetriever (ร้านเวกเตอร์ = ร้านเวกเตอร์ ,
docstore = เก็บ ,
child_splitter = child_splitter ,
parent_splitter = parent_splitter ,
)
โทรหารีทรีฟเวอร์เพื่อรับชิ้นใหญ่จากร้านค้าเวกเตอร์โดยใช้ เอกสาร ตัวแปรในอาร์กิวเมนต์ของฟังก์ชัน:
รีทรีฟเวอร์ add_documents ( เอกสาร )รับความยาวของเอกสารเหล่านี้จาก เอกสาร ตัวแปรผ่านคำสั่งด้านล่าง:
เท่านั้น ( รายการ ( เก็บ. อัตราผลตอบแทน_keys ( ) ) )
เพียงแค่ได้ชิ้นส่วนที่เล็กกว่าจากชิ้นที่ใหญ่กว่า เนื่องจากภาพหน้าจอก่อนหน้านี้แสดงว่ามีเอกสาร 23 ฉบับที่จัดเก็บไว้ในร้านค้าเวกเตอร์ แบบสอบถามจะใช้เพื่อรับข้อมูลที่เกี่ยวข้องโดยใช้ ความคล้ายคลึงกัน_ค้นหา() วิธีการดึงข้อมูลจากร้านค้าเวกเตอร์:
sub_docs = ร้านเวกเตอร์ ความคล้ายคลึงกัน_ค้นหา ( 'ความยุติธรรม เบรเออร์' )พิมพ์ชิ้นเล็กๆ โดยใช้แบบสอบถามที่กล่าวถึงในโค้ดก่อนหน้าเพื่อแสดงบนหน้าจอ:
พิมพ์ ( sub_docs [ 0 ] . หน้า_เนื้อหา )
ตอนนี้ ให้ใช้รีทรีฟเวอร์กับชุดข้อมูลทั้งหมดที่จัดเก็บไว้ในฐานข้อมูลโดยใช้แบบสอบถามเป็นอาร์กิวเมนต์ของฟังก์ชัน:
ดึงข้อมูล_docs = รีทรีฟเวอร์ get_relevant_documents ( 'ความยุติธรรม เบรเออร์' )รับความยาวของชิ้นส่วนทั้งหมดที่สร้างและจัดเก็บไว้ในฐานข้อมูล:
เท่านั้น ( ดึงข้อมูล_docs [ 0 ] . หน้า_เนื้อหา )
เราไม่สามารถแสดงชิ้นส่วนทั้งหมดได้ แต่ชิ้นแรกที่มีหมายเลขดัชนี 0 จะแสดงโดยใช้รหัสต่อไปนี้:
พิมพ์ ( ดึงข้อมูล_docs [ 0 ] . หน้า_เนื้อหา
นั่นคือทั้งหมดที่เกี่ยวกับกระบวนการใช้ตัวดึงเอกสารหลักใน LangChain
บทสรุป
หากต้องการใช้ตัวดึงเอกสารหลักใน LangChain เพียงติดตั้งโมดูลและตั้งค่าสภาพแวดล้อม OpenAI โดยใช้คีย์ API หลังจากนั้น ให้นำเข้าไลบรารีที่จำเป็นจาก LangChain เพื่อใช้งานตัวเรียกเอกสารหลัก จากนั้นจึงโหลดเอกสารสำหรับโมเดล ผู้ใช้สามารถใช้เอกสารหลักเป็นเอกสารทั้งหมดหรือชิ้นใหญ่ และรับชิ้นเล็กลงโดยใช้แบบสอบถาม โพสต์นี้ได้อธิบายอย่างละเอียดเกี่ยวกับกระบวนการใช้ตัวเรียกเอกสารหลักใน LangChain